【发布时间】:2013-12-02 22:54:44
【问题描述】:
我想包含一个来自这个网站http://projnet.codeplex.com/的dll,但它只提供了一个dll文件和一个xml文件,没有包含头文件或lib文件。是否可以使用
之类的方式导入 dllQLibrary geolib("ProjNet.dll");
geolib.load();
如果它有效(在这种情况下 geolib.isloaded 为真)那么我如何在 Qt 中使用它?
非常感谢!!!
【问题讨论】:
我想包含一个来自这个网站http://projnet.codeplex.com/的dll,但它只提供了一个dll文件和一个xml文件,没有包含头文件或lib文件。是否可以使用
之类的方式导入 dllQLibrary geolib("ProjNet.dll");
geolib.load();
如果它有效(在这种情况下 geolib.isloaded 为真)那么我如何在 Qt 中使用它?
非常感谢!!!
【问题讨论】:
这是一个托管 DLL,用于 .net 框架,这解释了为什么它没有头文件。您将无法直接使用它。你需要把它包起来。例如使用 COM 或作为混合模式 C++/CLI DLL。
【讨论】:
您只能以这种方式使用导出的函数(为此您需要知道函数的名称和原型)。加载 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 没有导出。
【讨论】:
QLibrary 用于非托管代码,而ProjNet.dll 是托管DLL,完全不同