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文件。是否可以使用
之类的方式导入 dllQLibrary 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的主要内容,如果未能解决你的问题,请参考以下文章
在哪里可以找到与 Microsoft DLL(比如 WTTLog.DLL)对应的头文件和 lib 文件?