我有一个C++ DLL,一些函数返回Unicode空终止字符串:
void SomeFunc(wchar_t* StrBuf)
调用者必须分配StrBuf - 字符串最长可达256个字符。 此DLL还通过COM公开了一个COM对象,以便从C#中使用此DLL。在IDL中定义如下:
[id(1), helpstring("bla")]
HRESULT SomeFunc([in,out] BSTR* TextStr, [out,retval] LONG* RetValue);
目前C#代码如下:
string val = new string('\0', 256); // Allocate memory
MyComObj.SomeFunc(ref val); // Get string
val = val.Substring(0, val.IndexOf('\0')); // Convert from null-terminated string
有没有办法定义这样一个COM函数,使得它更容易从C#中调用?现在看起来很丑,并且需要三行代码才能调用该函数,如果函数有两个字符串参数,则需要五行代码。