【问题标题】:Using a function defined in a DLL from C++ code在 C++ 代码中使用 DLL 中定义的函数
【发布时间】:2013-12-31 06:01:49
【问题描述】:

我从源代码(dll)构建了 Qt,并试图构建一个使用 Qt dll 的应用程序。我对 C++ 没有太多经验,所以我遇到了一个我确信这是一个非常基本的问题。

我的构建在包含错误时失败,如下所示:

Fatal error: QNetworkProxy: No such file or directory

这是我正在使用的 g++ 命令(我还使用 -L 将正确的文件夹添加到 lib 路径,但这也不起作用):

g++ -l..\..\wkqt\bin\QtCore4.dll -l..\..\wkqt\bin\QtNetwork4.dll -l..\..\wkqt\bin\QtWebKit4.dll -I..\include -Ishared -Ipdf -Ilib -Iimage -o ..\bin\wkhtmltopdf.exe pdf\*.cc lib\*.cc image\*.cc shared\*.cc

我也在 Visual Studio 中尝试过(假设它不会构建,但我想看看我是否至少可以从那里正确包含 Qt dll)并且我遇到了同样的错误。我用 g++ 编译的方式有问题吗?如果我与 Dll 正确链接,那么从我的代码中使用 Qt 函数的正确方法是什么?

澄清一下,我不是在寻找如何正确使用 Qt。我的问题是:从本机 C++ 代码中使用任何 Dll 中定义的函数的正确方法是什么?如果这是一个非常基本的问题,我深表歉意,但我无法在 Google 上找到明确的答案,而且我没有任何使用 C++ 的经验,也没有任何使用 C++ 代码的第三方库的经验。

【问题讨论】:

标签: c++ qt dll g++ mingw32


【解决方案1】:

可以通过动态加载它们并调用它们使用的函数来使用DLL。

调用暴露的函数首先在开头定义它们的语法 假设函数是语法是

BOOL MyFunction(int a,char* pszString)

然后定义语法

#typedef BOOL (WINAPI *PMYFUNCTION)(int a,char* pszString)

然后制作对象

PMYFUNCTION pfnMyFunction;

在loadlibrarycall之后调用GetProcaddress获取有效指针

HMODULE hlib= Loadlibrary("c:\\Mylib.dll");
if(hlib)

{    pfnMyFunction = (PMYFUNCTION)Getprocaddress(hlib,"MyFunction"); }

希望这会有所帮助...

【讨论】:

  • 我开始以这种方式实现它(到目前为止一直有效),但后来发现我需要的标头在哪里。
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 2013-04-17
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
相关资源
最近更新 更多