【问题标题】:Interacting with a specific COM DLL与特定的 COM DLL 交互
【发布时间】:2013-04-05 02:40:26
【问题描述】:

我正在尝试与一个 .dll 交互,这将允许我从各种设备(具体为 Eye Gaze)接收信息。该 .dll 名为 ETUDriver,可在 http://www.sis.uta.fi/~csolsp/projects.php 找到,但它没有随附的 .h 文件。

我正在努力从 .dll 中实际加载、交互和调用函数。提供了手册,但对于实际设置代码以启动它没有任何帮助。随附三个示例应用程序(带有源代码),但其中只有两个可以工作,其中一个是 C# 中的,因此没有帮助。但是,可以通过 MFC 加载 .dll 的那个,这对于我的代码来说不是一个可行的选项(它旨在与许多其他项目一起使用,因此不能强制执行 MFC 或任何其他不作为标准的库到项目)。

本质上,.dll 中有一系列类,我需要在我的代码中创建这些类并调用该类的相关函数。

我尝试使用HRESULT hr = CoInitialize(NULL); hr = CoCreateInstance(__uuidof(ETUDSink), NULL, CLSCTX_INPROC, __uuidof(IETUDSink), (LPVOID*)&pETUDSink); if(pETUDSink) { pETUDSink->Start(); },但它总是返回一个错误,指出该类未注册。我无法使用 MFC 调用相关的 .rgs 文件,并且完全不知道如何让它工作。

是否有我不知道的给定格式,是否有人有使用 ETUDriver 的经验(或者能够在不使用 MFC 的情况下使其在 C++ 中工作)?

感谢您在此主题上提供的任何帮助:)

【问题讨论】:

  • 类未注册可能是 32 位与 64 位的问题。如果您的程序运行 32 位,COM DLL 也需要注册为 32 位等。
  • 运行的 C++ 示例应用程序具有与我相同的项目配置设置并且运行良好,我需要做什么来确定/更改项目的 64->32 位设置?跨度>
  • 这是 Visual C++ 中的配置。我想 ETUDriver 是 32 位的。您也可以检查您是否为 32 位(我想这应该是默认设置,这里详细介绍了如何使用 64 位:msdn.microsoft.com/en-us/library/vstudio/h2k70f3s.aspx 检查您没有像这样配置)。正如 Eddy 指出的,您必须注册 ETUDriver,查看随附的文档。您可以在您的开发机器上使用 regsvr32.exe 并使用其他方式(MSI 等)进行生产模式。
  • 随附的文档没有提供有关注册 .dll 的信息。它非常缺乏将 .dll 集成到自定义项目中的详细信息。
  • 即使文档中没有提到它,您也必须注册一个 COM 对象才能使其工作。

标签: dll com


【解决方案1】:

我不熟悉有问题的特定 DLL,但听起来你没有在目标机器上注册 DLL。您可以通过运行regsvr32.exe 或调用DLL 导出的DllRegisterServer 函数或使用side-by-side assemblies 来执行此操作。您需要在每台需要利用其中的 COM 功能的机器上注册 DLL,因此当您分发应用程序时,如果您使用 regsvr32.exe 路由,请确保安装程序注册 DLL。

您可以使用 Microsoft Visual C++ 中的#import directive 来加载包含在 DLL 中的信息,而无需使用头文件或根据文档自行重写。

【讨论】:

  • 我正在开发一个 .lib 帮助程序库来扩展包含该项目的游戏的功能。出于这个原因,我不能让每个客户端手动运行 regsvr32.exe(它应该是一个完全自动化的过程。我使用过#import,但不明白如何“查看”我在 .dll 中实际可以使用的内容类和函数。我没有 .dll 的源代码,我如何找出 DLLRegisterServer 函数存在什么(或什至)?
  • 使用带有 /EXPORTS 标志的 Microsoft 的 dumpbin 实用程序来查看 DLL 导出的所有符号:support.microsoft.com/kb/177429
  • 嗨,我已经导出数据 (codepad.org/hdxNSm3A) 但我真的不知道如何使用它?但是我注意到那里有一个“DLLRegisterServer”(我发送的链接上的第 448 行)。
猜你喜欢
  • 2010-10-27
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 2012-06-16
  • 2012-05-02
  • 1970-01-01
相关资源
最近更新 更多