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

3

C# 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);

Result: 0x80131533 - COR_E_SAFEARRAYTYPEMISMATCH

1个回答

4
COM接口需要使用一个SAFEARRAY来调用原生代码,其内容为VT_I1实例。而您提供的是VT_BSTR值,因此出现了错误。
您需要将字符串值转换为VT_I1值,并将其放入数组中。 编辑 在C++中,正确的名称是VT_I1而不是VT_BYTE

4
同意传递的safearray类型应该与声明类型相匹配,但我认为IShowDialog::showMessage应该接受一个字符串(COM BSTR),而不是byte[]。 - Remus Rusanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接