Articles of DLL

在程序启动时从另一个目录加载一个DLL

我的基本问题是:我的程序(MyProgram.exe)有一个来自另一个程序(OtherProgram)的DLL的依赖,我试图避免每次更新OtherProgram时重新打包一个新的DLL。 我想在启动时在OtherProgram的DLL中有MyProgram.exe链接,但是我不完全确定Windows允许这样做。 所以如果有某种解决方法也是可以接受的。 而在一些背景下,平台是Windows 7 x64,MyProgram.exe运行良好,当我在MyProgram.exe项目目录中创build一个符号链接到OtherProgram的安装目录中的DLL。 当我尝试运行它没有符号链接,我得到“程序无法启动,因为OtherProgramDLL.dll从您的计算机丢失”错误。 任何意见或相关信息的链接非常感谢! 编辑:澄清:DLL在编译时不链接,此问题在运行时出现

只为进程初始化关键部分一次

在一个multithreading的应用程序,有没有一种方法来确保只有一个关键部分初始化,除了把代码放在DLL main()?

DLL:在Linux for Linux上用MinGW编译C时无法识别文件格式

我在Linux上使用MinGW(特别是Ubuntu)来编译Windows的C程序。 我正在使用名为SFML的库,它是名为CSFML的绑定。 我使用-L和-l来定位库,但是当我编译时,我得到这个错误: win32/dll/csfml-audio-2.dll: file not recognized: File format not recognised 我不知道为什么。 这是我用来编译的命令: sudo i686-w64-mingw32-gcc -o wandering src/main.c src/constants.c src/Display/display.c **…some more c files in here…** src/Generation/perlinnoise.c $(pkg-config –libs –cflags glib-2.0) $(pkg-config –libs –cflags gee-1.0) -Iwin32/CSFML-2.1/include -Lwin32/dll -lcsfml-audio- 有谁知道为什么会发生? 我可以在没有SFML的情况下编译C程序,但用MinGW就可以了。

我应该与我的应用程序重新分配msvcrt.dll?

我应该重新分配msvcrt.dll与我的应用程序,并使用私人DLL如果一些应用程序的库dynamic依赖msvcrt.dll? 即与系统的msvcrt.dll(DLL地狱)可能的任何不兼容问题? 应用程序是针对Windows Server系统的。

是rebasing dll(或提供一个合适的默认加载地址)值得的麻烦?

重新绑定DLL意味着修复DLL,因此它首选的加载地址是加载器实际上能够加载DLL的加载地址。 这可以通过诸如Rebase.exe的工具来实现,也可以通过为所有(自己的)dll指定默认加载地址,以使它们“适合”在可执行进程中。 以这种方式pipe理DLL基地址的关键是加速应用程序负载。 (或者我明白) 现在的问题是: 值得麻烦吗? 我有Richter / Nazarre的C / C ++书,他们强烈build议[a]确保加载地址全部匹配,以便Loader不必重新加载加载的DLL。 然而,他们没有争论,如果这加快了应用程序加载时间的任何重要的数额。 而且,对于ASLR来说,这似乎有点可疑,因为无论如何,加载地址都是随机的。 有没有关于这个利弊的事实? [a]:在我的WvC ++ / 5th ed中,在第568ff页的标题为Rebasing Modules and Binding Modules的章节中。 在第20章, DLL高级技术 。

从中央存储库加载DLL的一种方法

我们有很多产品,每个产品的应用程序中都有一些常见的DLL。 现在,我们将每个常见的DLL复制到每个产品的bin目录中,并将它们视为专用程序集。 这不必要地增加了每个产品的msi大小,当DLL发生问题时,我们必须构build包含DLL的每个产品的msi并进行部署。 是否有任何指示产品应用程序使用通用的私人目录来加载DLL [使用清单scheme..]? [注意:将私有目录添加到PATH env将不会提供解决scheme,就好像在SYSTEM目录中存在一个具有相同名称的DLL一样,这将会占用我们专用目录的权限] -Kartlee

WinAPI函数LoadLibrary()在执行错误期间导致函数失败

以下代码使用LoadLibrary()在运行时加载dll。 boolean Load_Internals_dll() { boolean result = true; //LOG_INIT; HINSTANCE hApexRLIO = LoadLibrary(L"APEX_RLIO_Internals.dll"); printf("Checking getlasterror after loadlibrary:\n",GetLastError()); if(NULL == hApexRLIO) { result = false; printf("[ERR]: Unable to load dll\n"); LOG_PRINT(" [ERR]: Unable to load dll.\n" ); } result = InitRSIDComm_Lib_Func(); //LOG_EXIT; return result; } 加载DLL后,发现句柄hApexRLIO不为空,但函数GetLastError()返回系统错误代码1627(函数在执行期间失败)。 这个错误可能是什么原因造成的? 这个错误代码在网上没有太多的文档,VC ++十加仑的头请帮我解决这个问题。

安装和注册win32 OpenSSL库

我的应用程序依赖于OpenSSL库(通过Qtnetworking模块;由于法律问题,您无法静态编译为Qt) 有这个项目 – Win32 OpenSSL 似乎所有我需要的是将这两个DLL复制到System32并注册它们。 copy ssleay32.dll %WINDIR%\System32\ssleay32.dll copy libeay32.dll %WINDIR%\System32\libeay32.dll regsvr32.exe /s %WINDIR%\System32\ssleay32.dll regsvr32.exe /s %WINDIR%\System32\libeay32.dll 事实上,这已经在办公室的几台机器上工作(我的应用程序在操作之后开始使用https正确工作)。 那些东西安装了很多,所以可能会干扰。 在VMWare下,它仍然不能在干净的虚拟机上运行。 虽然我在它下面安装了Tortoise SVN(随OpenSSL一起发布),但一切都很顺利。 安装openssl到系统的正确方法是什么? 注意:Qtnetworking模块有自己的证书权限列表。

导入vtk时Python DLL导入错误

我需要在我的Windows 10机器上的python中使用VTK库(版本5.10,因为我正在处理现有的代码),但是我无法pipe理导入它没有DLLImport错误: Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import vtk Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python27\lib\site-packages\vtk\__init__.py", line 139, in <module> __helper.refine_import_err('qvtk', 'vtkQtPython', exc) File "C:\Python27\lib\site-packages\vtk\__helper.py", line 32, in refine_import_err raise […]

GCC – 链接到另一个文件夹中的库工作,但二进制文件不会运行

我正在一个C ++项目,生成几个EXE和几个DLL。 为了整洁,我想要在Lib文件夹中生成这些DLL,所以构build的项目将如下所示: MyProject —-myExe1.exe —-myExe2.exe —-Lib —-myLib1.dll —-myLib2.dll 我能够成功地获得内置到Lib文件夹中的DLL,并且我能够在EXEs的链接命令中使用-L..\bin\Lib成功链接到新位置中的DLL。 但是,当我去实际运行的EXE,他们抱怨说,他们无法find有问题的DLL。 从我做的研究看来,即使我可以链接到其他文件夹中的库, 加载它们仍然需要它们与二进制文件在同一个文件夹中。 GCC,链接库,找不到? 表明这只是事情的方式,但是提到“系统必须能够finddll;即它必须位于当前工作目录中,path中的目录或其目录中必须被添加到一个特殊的环境variables用于这个东西“。 什么“特殊的环境variables”被引用(我假设它不是%PATH%或评论将没有具体提到的path),有没有一种方法,我可以设置它,使我的DLL可以正确加载?