是否可以在 COM 对象之间传递 char*
Is it possible to pass char* between COM objects
我需要修改在 Delphi 和 C++ 上编写并使用 COM 的应用程序。而且我经常看到 COM 包装器总是使用 WideString 和 BSTR,即使最终使用的 dll 与普通的 char* 一起工作。那么没有 unicode 字符串就无法在 COM 对象之间进行通信吗?
非常感谢一些用于进一步阅读该主题的链接。
要在 COM 中传递 8 位 char
字符串,您可以:
使用 SysAllocStringByteLen()
to create a binary BSTR
按原样保存原始 char
字符。然后接收者可以从 BSTR
.
中按原样复制 char
个字符
如果需要,请使用 SafeArrayCreate()
/SafeArrayCreateVector()
to create a SAFEARRAY
holding VT_UI8
elements, and then you can copy the char
characters as-is into the array. You can put the SAFEARRAY
inside of a VARIANT
。
将 char
个字符包裹在 IStream
, such as from CreateStreamOnHGlobal()
or SHCreateMemStream()
.
中
我需要修改在 Delphi 和 C++ 上编写并使用 COM 的应用程序。而且我经常看到 COM 包装器总是使用 WideString 和 BSTR,即使最终使用的 dll 与普通的 char* 一起工作。那么没有 unicode 字符串就无法在 COM 对象之间进行通信吗? 非常感谢一些用于进一步阅读该主题的链接。
要在 COM 中传递 8 位 char
字符串,您可以:
使用
中按原样复制SysAllocStringByteLen()
to create a binaryBSTR
按原样保存原始char
字符。然后接收者可以从BSTR
.char
个字符如果需要,请使用
SafeArrayCreate()
/SafeArrayCreateVector()
to create aSAFEARRAY
holdingVT_UI8
elements, and then you can copy thechar
characters as-is into the array. You can put theSAFEARRAY
inside of aVARIANT
。将
中char
个字符包裹在IStream
, such as fromCreateStreamOnHGlobal()
orSHCreateMemStream()
.