我有一个遗留的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参数实现接口?