我已经开发了一个程序,我正试图使这个程序与其他公司制造的可控光源一起工作。我已经给公司发了电子邮件,他们同意将他们的外部库作为 DLL 发送给我。
我已经使用Qt 4.8.1开发了我的所有软件,并且已经使用MSVC2008进行了编译。
可控灯的 DLL 在 Visual Studio 2008 中编译,用 C++ 或 C# 编写(制造商不确定)。我得到的只是 DLL 和一个文本文件,说我必须:
- 添加 DLL 作为对我的项目的引用
- 添加
using LightName;
到班级顶部 - 像这样实例化对象的实例:
LightName *ln = new LightName();
- 使用新创建的 LightName 实例调用函数 void turnOn()。
首先,我觉得奇怪的是外部库需要我实例化他们的对象的一个实例,尤其是当它用于一个简单的硬件时。
其次,对方公司没有给我提供接口文件。
我的问题是: 如果没有 Qt 环境中的接口头文件,我怎么可能链接到 C++ DLL 并公开嵌套在这个库中的函数?有没有办法为外部库制作接口?
我已经尝试使用QLibrary并执行以下操作:
QLibrary myLib("mylib");
typedef void (*MyPrototype)();
MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
if (myFunction)
myFunction();
但是,这不起作用,因为给我的 DLL 不是 C DLL,而且我没有接口,所以 Qt 不知道它需要解析哪些符号。
我尝试使用 dumpbin /EXPORTS 命令显示从我的 DLL 导出的所有定义。不幸的是,这无法产生任何东西。我希望我能从中得到某种被破坏的 C++,然后我可以整理出自己的标题。
我尝试使用依赖walker(非常有用的工具),但是它无法解析任何符号来给我一些函数定义。