【发布时间】: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 对象才能使其工作。