【问题标题】:How to pass data to C# COM DLL from unmanaged application如何将数据从非托管应用程序传递到 C# COM DLL
【发布时间】: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

【问题讨论】:

    标签: c# c++ dll com


    【解决方案1】:

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

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

    编辑

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

    【讨论】:

    • +1 同意传入的 safearray 类型应该与声明的类型匹配,但我想说 IShowDialog::showMessage 应该接受一个字符串(COM BSTR),而不是一个字节 []
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2013-02-19
    • 2010-10-03
    • 2013-02-09
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多