Qt:如何导入没有头文件和lib文件的dll

Posted

技术标签:

【中文标题】Qt:如何导入没有头文件和lib文件的dll【英文标题】:Qt: how to import dll without header and lib files 【发布时间】:2013-12-02 22:54:44 【问题描述】:

我想包含一个来自这个网站http://projnet.codeplex.com/的dll,但它只提供了一个dll文件和一个xml文件,没有包含头文件或lib文件。是否可以使用

之类的方式导入 dll
QLibrary geolib("ProjNet.dll");
geolib.load();

如果它有效(在这种情况下 geolib.isloaded 为真)那么我如何在 Qt 中使用它?

非常感谢!!!

【问题讨论】:

【参考方案1】:

这是一个托管 DLL,用于 .net 框架,这解释了为什么它没有头文件。您将无法直接使用它。你需要把它包起来。例如使用 COM 或作为混合模式 C++/CLI DLL。

【讨论】:

【参考方案2】:

您只能以这种方式使用导出的函数(为此您需要知道函数的名称和原型)。加载 dll 后,您应该调用 resolve 方法。例如,您想使用从 MyModule.dll 导出的函数 foo

extern "C" Q_DECL_EXPORT void foo(int a)

你需要创建一个原型:

typedef void (*MyProto)(int)

然后解决它:

QLibrary myDll("MyModule.dll");
if (myDll.load())

    MyProto mp = reinterpret_cast<MyProro>(myDll.resolve("foo"));

很遗憾,ProjNet.dll 没有导出。

【讨论】:

与其说它没有出口,不如说它完全是错误的类型。它输出了大量的功能。 我的回答只是直接使用 dll 功能而无需任何包装。 “……这完全是错误的事情”是什么意思? 我的意思是QLibrary 用于非托管代码,而ProjNet.dll 是托管DLL,完全不同

以上是关于Qt:如何导入没有头文件和lib文件的dll的主要内容,如果未能解决你的问题,请参考以下文章

.h头文件 .lib库文件 .dll动态链接库文件关系

如何将外部库添加到 QT?

VS2010添加外来库设置

在哪里可以找到与 Microsoft DLL(比如 WTTLog.DLL)对应的头文件和 lib 文件?

CMAKE设置INSTALL工程,分别设置头文件Lib和DLL的输出路径

在 Visual C# 中创建头文件 (.h) 和 .lib 文件