隐式接口强制转换是否会导致 COM 对象为 null?

Can an implicit interface cast cause null with a COM object?

提问人:adrianm 提问时间:11/9/2023 更新时间:11/9/2023 访问量:27

问:

我得到了一个间歇性的ArgumentNullException,我无法理解。

代码如下所示

COMRow row = GetCOMRow();
DoSomething1(row);
DoSomething2(row);
DoSomething3(row);
...
// DoSomething methods all look like this:
void DoSomethingX(ICOMRow row)
{
    if (row == null)
        throw new ArgumentNullException(nameof(row));
    ...
}

// the com interface
[ComImport]
[Guid("...")]
[TypeLibType(TypeLibTypeFlags.FDual | TypeLibTypeFlags.FNonExtensible | TypeLibTypeFlags.FDispatchable)]
[SuppressUnmanagedCodeSecurity]
public interface ICOMRow { ... }

[ComImport]
[Guid("...")]
[CoClass(typeof(COMRowClass))]
public interface COMRow : ICOMRow { }

堆栈跟踪显示 ArgumentNullException 发生在 !DoSomething3

当行变量不在 时,它怎么能为 null?DoSomething3DoSomething2

调用中有一个隐式强制转换 from。这是否会导致 COM 因某种原因失败并以静默方式返回 null?COMRowICOMRowQueryInterface

COM 对象有时可能不稳定 (COMException),因此我知道 QueryInterface 可能会失败,但想知道这是否发生在这里,或者我是否需要寻找其他地方。

C# .NET COM nullReferenceException

评论


答: 暂无答案