Articles of DLL

如何为非Qt应用程序创build一个Qt共享库

我开发了一个具有Qt共享库和Qt应用程序的应用程序。 Qt共享库会导出一个只有less量信号的类。 我已经使用了Q_DECL_EXPORT / Q_DECL_IMPORTmacros。 现在,dll和应用程序之间的通信是通过Qt信号和插槽来实现的,需要使用QObject来开发应用程序。 现在我被要求将Qt共享库作为理想的DLL,其中客户端应用程序不依赖于Qt框架。 我看到以下文章,但在非Qt应用程序中使用基于Qt的DLL,但不知道这是否是最好的方法。 可能有人请赐教,我可能select开发Qt共享库以用于非Qt应用程序。

从DllMain调用LoadLibrary

MSDN说: 它不能调用LoadLibrary或LoadLibraryEx函数(或调用这些函数的函数),因为这可能会在DLL加载顺序中创build依赖关系循环。 这可能会导致在系统执行初始化代码之前使用DLL。 我试图从DllMain调用LoadLibrary并没有发生任何事情。 我看到的唯一问题是,在我的DllMain执行之前,加载的DLL将在我的DLL中使用函数。 为什么我不能在DllMain中调用LoadLibrary? 编辑: 好吧,我意识到,我不能仅仅因为我必须相信其他信徒所做的MSDN(我在那里看到一些错误的东西,但我也应该忘记它们),所以我不能在DllMain中调用LoadLibrary。 而且因为在Windows的新版本中可能会发生一些事情(虽然过去十年没有任何改变)。 但是,任何人都可以显示一个代码,将重现一些不好的事情,当在DllMain中调用LoadLibrary时会发生什么? 在任何现有的Windows操作系统? 不只是在另一个单独的初始化函数调用,但LoadLibrary在DllMain?

Windows API DLL文件的许可证文件

我的朋友目前正在准备分发他的软件,并希望清理他使用的软件的许可证。 策略是他收集所有提供许可文本的文件。 他完成了所有“显而易见的”许可证的收集,例如他使用的Qt库的Qt许可证。 但是他也使用了Windows附带的一些Windows DLL,比如kernel32.dll和advapi32.dll 。 他在哪里可以find许可证文件,以便他可以用他的软件发布? 第一个DLL文件kernel32似乎基于http://en.wikipedia.org/wiki/Auto-linking指令自动链接到他的软件。 第二个文件, advapi32.dll显式链接到他的软件,他想通过收集提供许可证的文件来清理该文件的情况。 例如,对于debian linux,他知道这些文件在/usr/share/doc/<package of the library>/copyright 。

无法find或加载Qt平台插件“窗口”

首先,为了防止重复的报告,我尝试了多种解决scheme, 在这里 , 在这里 , 这里和这里 。 我在Visual Studio 2012中使用Qt 5.5.1,并在Windows 10 x64(不使用Qt Creator)上开发我的应用程序。 应用程序在发布模式下编译。 其实,我的应用程序正在我的电脑上工作 ,没有任何问题,我需要在我的目录中唯一的库是: Qt5Core.dll Qt5Gui.dll Qt5WinExtras.dll Qt5Widgets.dll Qt5Network.dll msvcp110.dll msvcr110.dll 现在,当我试图启动我的应用程序全新安装的Windows 7 x86时,我收到以下错误信息: 此应用程序无法启动,因为它无法find或加载Qt平台插件“窗口”。 重新安装应用程序可能会解决此问题。 现在我无法摆脱它。 根据以前提出的问题,这可能是qwindows.dll文件(或更确切地说,应用程序无法find它)的问题,首先,我做了我的发布目录的部署,如下所示: [..]\msvc2012\bin>windeployqt.exe <PATH> 它已经生成了我的应用程序启动所需的所有文件,包括platforms/qwindows.dll因此我只是简单地将它们全部复制到Windows 7目录而没有任何影响 – 仍然会出现错误。 我也尝试从msvc2012\plugins\platforms手动复制一个qwindows.dll – 没有效果, 我做的最后一步是在Dependency Walker中检查我的应用程序 – qwindows.dll是,没有qwindows.dll相关的依赖关系: 图片 所以我现在没有想法,这里有什么问题?

C ++“Hello World.exe”崩溃 – “Hello World.exe已停止工作”在命令提示符下使用时

我已经开始学习C ++,并写了一个“Hello World” – 程序。 当我尝试运行它在命令提示符下,它崩溃,并给我一个Windows消息,说:“你好World.exe已停止工作。” 码: #include <iostream> #include <string> int main() { std::string response; std::cout << "Hallo Welt\n"; std::cin >> response; std::cout << "User: " << response; return(0); } 我使用Eclipse IDE和MinGW作为编译器。 我已经在环境variables中设置了MinGW / bin的path。 在我将MinGW / bin目录下的所有dll文件复制到Hello World.exe文件夹中之后,程序就可以正常工作了。 所以似乎无论是需要那些DLL都无法正确访问它们。 我想让我为每个创build的项目都复制dll的麻烦。 有什么办法可以解决吗? 我对我的电脑和编程术语还没有真正的自信,所以描述看起来有点粗糙 – 帮助仍然非常感谢! 干杯!

在Windows上embeddedPython:为什么它必须是DLL?

我正在尝试编写一个embeddedPython的软件插件。 在Windows上,插件在技术上是一个DLL(这可能是相关的)。 Python Windows FAQ说: 1. 不要直接将Python构build到您的.exe文件中。 在Windows上,Python必须是一个DLL来处理导入本身就是DLL的模块。 (这是第一个关键的无证事实。)而是,链接到pythonNN.dll; 它通常安装在C:\ Windows \ System中。 NN是Python版本,如Python 2.3中的“23”。 我的问题是为什么Python必须是DLL? 如果在我的情况下,主机应用程序不是一个.exe,但也是一个DLL,我可以build立Python到它? 或者,也许,这个说明意味着第三方C扩展依靠pythonN.N.dll存在,而其他的DLL不会呢? 假设我真的想要一个DLL,我该怎么办? 我看到有dynload_win.c文件,它似乎是在Windows上导入C扩展的模块,并且据我所见,它扫描扩展文件以find它导入的pythonX.X.dll ; 但我没有经验的Windows,我不太了解所有的代码。

从dll导出函数指针

我有一个DLL文件中的函数指针(在实现,而不是标题)。 如何在EXE源代码中调用该指针指向的函数?

java,System.loadlibrary(“someDLLFile”)得到不满意的链接错误

我已经写了一些JNI钩子到C ++库中,并为我的java服务器项目创build了一些DLL文件。 比方说,DLL和jar文件在“C:/ server”下的同一个文件夹中 我正在访问这些DLL文件使用: System.loadLibrary("someDLLFile"); 在需要C ++代码的类中。 我遇到的问题是当我在自己的机器上运行此服务器时,无论我在哪里放置“服务器”文件夹,一切工作正常。 但是当我把它交给一个同事去testing的时候,他们不断地得到: java.lang.UnsatisfiedLinkError no someDLLFile in java.library.path 我想让DLL文件和jar文件在同一个文件夹中,并且不希望有人configuration他们的PATHvariables。 为什么System.loadLibrary()在我自己的机器上工作而不pipe文件夹的位置,而不是在另一台计算机上?

为什么不从入口函数调用FreeLibrary?

我正在写一个DLL需要多次dynamic调用一个单独的DLL。 我想保持被调用者加载,然后卸载它,当我的DLL被卸载。 但根据微软的说法,这是一个坏主意 。 入口点函数只应执行简单的初始化任务,不应该调用任何其他的DLL加载或终止函数。 例如,在入口点函数中,您不应该直接或间接调用LoadLibrary函数或LoadLibraryEx函数。 此外,当进程正在终止时,您不应该调用FreeLibrary函数。 这是有问题的代码。 有人可以解释为什么我不应该从DLL的入口点调用LoadLibrary和FreeLibrary? BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_DETACH : if (hLogLib != NULL) FreeLibrary(hLogLib); break; } return TRUE; }

Qt错误:未find过程条目

我正在Qt 5.6.1中做一个项目。 当我在Qt Creator中运行它时,它运行完美。 但是当我在文件夹中运行它时,它显示: 程序入口点?0QVariant @@ QAE @ ABVQString @@@ Z不能位于DLL Qt5Core.dll中。 我该如何解决?