Articles of DLL

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中。 我该如何解决?

通过dll边界传递对STL向量的引用

我有一个很好的库来pipe理需要返回特定的string列表的文件。 由于我将要使用的唯一代码将是C ++(和Java,但通过JNI使用C ++),我决定使用标准库中的向量。 库函数看起来有点像这样(其中FILE_MANAGER_EXPORT是平台定义的导出要求): extern "C" FILE_MANAGER_EXPORT void get_all_files(vector<string> &files) { files.clear(); for (vector<file_struct>::iterator i = file_structs.begin(); i != file_structs.end(); ++i) { files.push_back(i->full_path); } } 我使用vector作为引用而不是返回值的原因是为了保持内存分配的健全,并且因为windows对于c ++返回types有一个extern“C”真是不高兴(谁知道为什么,我的理解是所有的extern都是“ C“的作用是防止编译器中的名称混乱)。 无论如何,与其他c ++一起使用这个代码一般如下: #if defined _WIN32 #include <Windows.h> #define GET_METHOD GetProcAddress #define OPEN_LIBRARY(X) LoadLibrary((LPCSTR)X) #define LIBRARY_POINTER_TYPE HMODULE #define CLOSE_LIBRARY FreeLibrary #else #include <dlfcn.h> #define GET_METHOD dlsym #define […]

什么是REBASE.EXE的替代?

我需要重新绑定与我的程序一起安装的DLL文件组,因为这是一个32位程序,现在地址空间太碎了。 另外还有一个问题,就是在冷启动时需要将整个DLL分页到RAM中,这样加载器就可以将它们重新绑定,因为与某些DLL的基地址冲突。 有些DLL是我们编译的; 其他人来自第三方。 我想要做的是有一个工具重新绑定给定的一组DLL,这样的DLL组占用连续的内存块。 然后,这个工具将在编译安装程序之前运行,而重新发布的DLL将被安装在应用程序的专用目录中。 据我所知,Windows SDK附带的REBASE.EXE工具确实做到了。 给它一些DLL,并重新启动它们。 不幸的是… Windows 8 Consumer Preview的Windows软件开发工具包(SDK)说: 工具许多过时或已弃用的工具已从Windows SDK中删除。 以下工具已被删除: <snip> ReBase.exe 现在怎么办? 我不想开始使用显然已经过时的工具,它将在下一个版本的Windows中消失。 假设我正在阅读这个权利,什么是使用ReBase.exe的替代品? 我想限制自己使用Windows SDK和/或Visual Studio附带的工具,而不是引入第三方工具和/或编写自己的rebase代码。 或者,我以错误的方式接近整个问题?