在Qt中使用第三方dll(没有.lib文件)

3
一个朋友让我创建一个应用程序来控制一些东西,使用 "Velleman VM167"。这个VM167只是一个带有一些GPIO和几个ADC的USB接口卡。
这个VM167配有一个SDK,包括两个DLL(VM167.dll和MPUSBAPI.dll,其中我怀疑最后一个是在第一个DLL中使用的)和一个头文件VM167.h。
我以前在Delphi中成功使用过这个卡,但现在想转换到Qt。而且由于这只是一个简单的项目,我认为这可能是正确的时间。
我想做的是导入DLL并使用其中实现的函数。我尝试了很多事情并搜索了很多教程,但它们总是使用.lib或.a文件。我没有这个。 有没有办法使用这个DLL并使用Qt控制卡?
我正在使用带有MinGW 32位编译器的Qt 5.3。

产品描述和SDK下载链接: http://www.velleman.eu/products/view/?country=be&lang=en&id=384006

2个回答

4

既然您正在使用Qt,您可以使用QLibrary,特别是它的resolve方法。


2

在C/C++中使用没有LIB文件的Windows DLL的方法是通过LoadLibraryGetProcAddress

您提供的VM167 SDK中有一些示例,其中一个在Examples\VM167DemoBCB_dynamic_load\Unit1.cpp中,另一个在Examples\VM167DemoDevC\main.cpp中。


感谢您指出正确的示例!加上QT网站上的Qlibrary类信息,让我快速上手。不好的是,我不知道我的代码在做什么...您能简要解释一下这里发生了什么吗?QLibrary VMDLL("VM167"); typedef int (*VOID2INT)(void); VOID2INT OpenDevices = (VOID2INT) VMDLL.resolve("mysymbol");我的想法是创建一个具有相应参数和结果的类型的Typedef。然后,我创建了此类型的实例,然后将其指针地址设置为DLL中实际函数的指针地址。这样做没问题吧? - DisplayName
@Jetse:是的,你完全理解了。你需要typedef,这样编译器才知道如何将参数传递给函数,并期望什么返回类型。QLibrary完成了加载DLL和查找所需函数的工作,然后返回指向该函数的指针,您可以通过该指针调用该函数。 - RichieHindle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接