如何将数据从非托管应用程序传递到 C# COM DLL
Posted
技术标签:
【中文标题】如何将数据从非托管应用程序传递到 C# COM DLL【英文标题】:How to pass data to C# COM DLL from unmanaged application 【发布时间】:2011-05-20 17:52:28 【问题描述】:С# COM DLL 接口:
public interface IShowDialog
void showMessage(byte[] array);
并在非托管 C++ 应用程序中调用它:
SAFEARRAY *array;
array = SafeArrayCreateVector(VT_BSTR, 0, 1);
long lidx = 0;
SafeArrayPutElement( array, &lidx, SysAllocString(L"test") );
hr = dlg->showMessage(array);
结果:0x80131533 - COR_E_SAFEARRAYTYPEMISMATCH
【问题讨论】:
【参考方案1】:COM 接口需要使用 SAFEARRAY
的本机代码调用,其内容是 VT_I1
实例。您改为提供 VT_BSTR
值并因此收到错误。
您需要将字符串值转换为VT_I1
值并将它们放入数组中。
编辑
C++ 中的正确名称是VT_I1
而不是VT_BYTE
【讨论】:
+1 同意传入的 safearray 类型应该与声明的类型匹配,但我想说 IShowDialog::showMessage 应该接受一个字符串(COM BSTR),而不是一个字节 []以上是关于如何将数据从非托管应用程序传递到 C# COM DLL的主要内容,如果未能解决你的问题,请参考以下文章