У меня есть C ++ DLL, и некоторые функции возвращают строки с нулевым символом в конце Unicode:
void SomeFunc(wchar_t* StrBuf)
Вызывающая сторона должна выделять StrBuf - строка может содержать до 256 символов.
Эта DLL также предоставляет COM-объект для использования этой DLL из C # через COM. Определение в 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 #? Прямо сейчас это выглядит некрасиво и требует трех строк для вызова функции или пяти строк, если функция имеет два строковых параметра.