我在调用COM对象(Inventor 2012)上的方法的for循环中调用方法。从输出变量读取COM方法?
曾经是该代码:
foreach (var occ in occurrences)
{
// [...]
SomeMethod(occ);
// [...]
重构时,我决定到内联方法调用:
foreach (var occ in occurrences)
{
// [...]
BOMQuantityTypeEnum quantityType;
object quantity;
occ.Definition.BOMQuantity.GetBaseQuantity(out quantityType, out quantity);
if (quantityType ==
// [...]
}
当改变不出意外,今年开始失败了,扔E_INVALIDARG。此外,它只在第二次调用该方法时失败。但是,通过将其更改为以下版本,可以再次运行:
BOMQuantityTypeEnum quantityType = 0;
object quantity = null;
occ.Definition.BOMQuantity.GetBaseQuantity(out quantityType, out quantity);
为什么会发生这种情况?
编辑:
难道说的COM对象读取上一次迭代的价值?
签名在文档中给出的(在VB中)为:
Sub GetBaseQuantity(ByRef QuantityType As BOMQuantityTypeEnum, ByRef Quantity As [optional] VARIANT)
是C#-signature错了吗? COM接口不是自动生成的吗?
相当于VB ByRef的C#不等于ref关键字而不是out关键字吗?我不确定这是否应该有所作为,但可能值得一试? –
'GetBaseQuantity(ref quantityType,ref quantity)'不能编译。 – johv
嗯,它只是意味着GetBaseQuantity被编码为在非空数量通过时拒绝该调用。 –