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

时间:2011-05-20 17:52:29

标签: c# c++ dll com

С#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 个答案:

答案 0 :(得分:4)

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

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

修改

C ++名称中的正确名称为VT_I1而不是VT_BYTE