我在調用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被編碼爲在非空數量通過時拒絕該調用。 –