我在 for 循环中调用一个方法,该方法调用 COM 对象上的一个方法(Inventor 2012)。
以前的代码是:
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#签名错了吗?COM 接口不是自动生成的吗?