提问人:adrianm 提问时间:11/9/2023 更新时间:11/9/2023 访问量:27
隐式接口强制转换是否会导致 COM 对象为 null?
Can an implicit interface cast cause null with a COM object?
问:
我得到了一个间歇性的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?DoSomething3
DoSomething2
调用中有一个隐式强制转换 from。这是否会导致 COM 因某种原因失败并以静默方式返回 null?COMRow
ICOMRow
QueryInterface
COM 对象有时可能不稳定 (COMException),因此我知道 QueryInterface 可能会失败,但想知道这是否发生在这里,或者我是否需要寻找其他地方。
答: 暂无答案
评论