如何将数据从非托管应用程序传递到 C# COM DLL

本文关键字:DLL COM 应用程序 数据 | 更新日期: 2023-09-27 17:57: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

如何将数据从非托管应用程序传递到 C# COM DLL

COM 接口需要从具有内容VT_I1实例的SAFEARRAY的本机代码调用。 您提供的VT_BSTR值,因此会收到错误。

您需要将字符串值转换为VT_I1值并将其放入数组中。

编辑

C++名称中的专有名称是VT_I1而不是VT_BYTE

  • http://msdn.microsoft.com/en-us/library/cc235118(v=PROT.10(.aspx