访问C#中通过COM传递的C ++数组

时间:2017-10-11 18:36:54

标签: c# c++ com marshalling idl

我有一个遗留的COM类,它在不使用SAFEARRAY的情况下传递C ++数组指针。 (它可能在存在之前实现。)我想在不改变COM接口的情况下在C#中实现接口。在IDL中,函数定义为:

    HRESULT SetProperties([in] int cProperties,
                  [in, size_is(cProperties)] BSTR Properties[],
                  [in, size_is(cProperties)] VARIANT Values[]);

当我在C#项目中引用DLL并选择实现接口时,它将变为以下内容:

   unsafe public void SetProperties(int cProperties, ref string Properties, ref object Values)
    {
        throw new NotImplementedException();
    }

有没有办法在C#中将属性和值作为数组进行访问?

我再次提起这个问题。部分答案似乎在编组中。我可以重做C#函数,如下所示:

public void SetProperties(int cProperties,
         [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.BStr, SizeParamIndex=0)] ref string[] Properties,
         [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeParamIndex=0)] ref object[] Values)
    {
        throw new NotImplementedException();
    }

现在C#编译器说COM接口函数SetProperties()尚未实现。根据Visual Studio对象浏览器,它仍在寻找具有第一类签名的函数。

有没有办法使用Marshalled参数实现接口?

0 个答案:

没有答案