gpt4 book ai didi

.net - 如何诊断 COM 可调用包装对象创建失败?

转载 作者:行者123 更新时间:2023-12-03 14:32:48 26 4
gpt4 key购买 nike

我正在使用 CoCreateInstance 创建一个 COM 对象(从 native 代码) :

const 
CLASS_GP2010: TGUID = "{DC55D96D-2D44-4697-9165-25D790DD8593}";

hr = CoCreateInstance(CLASS_GP2010, nil, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IUnknown, out unk);

实际上,我在Delphi中,这意味着我调用了辅助函数:

CreateComObject(CLASS_GP2010);

大多数时候这个函数都会成功。但是有时,在同一个可执行文件中,在同一个进程中,对CoCreateInstance的调用失败并显示:

Unspecified error (0x80004005 = E_FAIL)

再次调用该函数可能会成功,也可能会失败。没有(明显的)押韵或理由。

这不是我的 COM dll

如果这是我编写的正常 COM dll,我会开始将 OutputDebugString 放入 DLL_ATTACH 中,当有人尝试调用 DllGetClassObject,我将确认 COM 正确加载了我的 DLL,并且它正确地要求实例化一个类。

不幸的是,它不是一个 COM dll;它是一个.NET 程序集 dll。以及 COM 子系统 does not simply “加载”我的dll。相反,COM 被指示加载 mscoree.dll:

HKEY_CLASSES_ROOT
CLSID
{DC55D96D-2D44-4697-9165-25D790DD8593}
InprocServer32
@default = mscoree.dll

并且mscoree.dll导出所需的GetClassObject函数。所以 mscoree.dll 是返回 E_FAIL 的,而不是我。我的开发计算机上从未发生过故障,但在客户计算机上始终间歇性地发生故障。

如何启用 .NET 日志记录?

问题是,由于 mscoree.dll 是返回 E_FAIL (而不是任何有用的东西)的:我如何让它告诉我问题是什么?

例如,似乎唯一遇到故障的客户(除了那些大量使用 COM 对象的客户之外)恰好是 Windows XP。也许他们正在经历 .NET 框架(版本 4 之前的版本)中的已知错误,您 cannot load different versions of the .NET runtime into the same process :

doing so introduces a CLR version dependency which may conflict with the CLR version expected by the host process

an article on MSDN when using COM wrappers 中也提到了这种故障模式。 ;您可以选择指定 clrVersion:

If another version of the CLR is already loaded and the specified version can be loaded side-by-side in-process, the specified version is loaded; otherwise, the loaded CLR is used. This might cause a load failure.

如果这是我在 Windows XP 或 .NET Framework 的早期版本上间歇性加载失败的原因,我该如何获取 mscoree.dll告诉我这个?

如果原因是其他原因,我如何让 .NET 告诉我这一点?

最佳答案

您可以使用程序集绑定(bind)失败日志记录功能 - 需要启用它,然后您可以使用融合日志查看器查看结果 http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx不确定如何将其安装到您的客户端计算机上。

当我第一次读到这篇文章时,我的第一个想法是,在 win xp 机器上似乎最常见的是这是一个 .net 版本/位问题,或者是您的 .net dll 缺少这些机器上不存在的依赖项。

关于.net - 如何诊断 COM 可调用包装对象创建失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17836693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com