1

我正在使用 IMB WMQ 库连接到队列管理器。

这是一个我用了很久的代码,它是朋友在VS2005中创建的,我更新后可以在VS2010中使用。当我使用与 LoadRunner 集成的工具来运行一些性能脚本时,它工作正常。但是,当我尝试调试时,它会返回以下错误:

{"Unable to load DLL '**amqxcs2.dll**': The handle is invalid. (Exception from HRESULT: 0x80070006 (E_HANDLE))"}

这与调试外部 DLL 有关,但我没有找到解决方法。

我使用以下命令将 dll 注册到 GAC 中:

gacutil /I "C:\Program Files\IBM\WebSphere MQ\bin\amqmdnet.dll"

当我尝试添加 amqxcs2.dll 时,它返回一个错误:

gacutil /I "C:\Program Files\IBM\WebSphere MQ\bin\amqxcs2.dll"
Failure adding assembly to the cache:   The module was expected
to contain an assembly manifest.

我在 Windows Server 2003 上运行 VS2010 Ultimate。

在 Loadrunner 中运行代码时,我可以从队列中放置和获取消息,但无法调试。

这里有一个类似的帖子,但它没有解决方案。

4

2 回答 2

0

这可能是 COM 错误。IBM 程序集可能是本机 dll,因此您无法在 GAC 中注册它,它仅适用于 .NET dll。可以使用Regsvr32注册本机 COM dll 。如果本机 dll 依赖于另一个缺少的 dll,也会发生此错误。另请参阅了解 Visual C++ 应用程序的依赖关系,它提供了有关可用于确定本机 dll 依赖关系的 Dependency Walker 工具的信息。

于 2012-04-13T23:00:17.133 回答
0

为什么您认为“确保库位于应用程序需要的位置”不是解决方案?

您需要在您计划使用它的机器上正确安装您正在使用的任何产品,或者通过手动将必要的文件复制到正确的位置(并手动计算“正确的位置”)来欺骗自己。SysInternals工具可能有助于跟踪应用程序尝试使用的文件)。

于 2012-04-13T19:01:21.150 回答