我想使用COM调用具有以下签名的函数:
void GetCompoundList(ref object compIds, ref object formulae, ref object names, ref object boilTemps, ref object molwts, ref object casnos)
我无法访问实现,但是对象是包含String和Double的SafeArrays的Variant类型,并且都是out参数。
以下是我如何声明数组并调用函数:
Array thermoCompounds = null;
Array thermoCompFormulae = null;
Array thermoCompName = null;
Array thermoCompTemp = null;
Array thermoCompWei = null;
Array thermoCompCAS = null;
ppThermoComp.GetCompoundList(thermoCompounds, thermoCompFormulae, thermoCompName, thermoCompTemp, thermoCompWei, thermoCompCAS);
其中ppThermoComp是实现接口的类的实例。
但是,函数调用无效:调用后数组仍为 null 。
C ++:
CComVariant cIdsM, cFormulaeM, cNamesM, cTempM, cWeiM, cCASM;
HRESULT hr = thermocompoundsMat->GetCompoundList(&cIdsM, &cFormulaeM, &cNamesM, &cTempM, &cWeiM, &cCASM);
知道我的C#代码有什么问题吗?
答案 0 :(得分:0)
感谢菲利普和汉斯。实际上,我必须根据您的2条评论进行修改以修复代码。
object thermoCompounds = null;
object thermoCompFormulae = null;
object thermoCompName = null;
object thermoCompTemp = null;
object thermoCompWei = null;
object thermoCompCAS = null;
ppThermoComp.GetCompoundList(ref thermoCompounds, ref thermoCompFormulae, ref thermoCompName, ref thermoCompTemp, ref thermoCompWei, ref thermoCompCAS);
我在询问问题之前尝试了每一个(对象和 ref ),但是分开......
顺便说一下,传递Array类型时不使用 ref ,而不是使用 ref 关键字,可能是因为数组已经是引用。