Articles of DLL

更改Windows DLL加载顺序? (加载顺序,不是search顺序)

说我有一个可执行文件: app.exe 我在这个可执行文件中使用2个不同的第三方DLL: foo.dll bar.dll和应用程序必须隐式链接到这些DLL,也就是我不能使用::LoadLibrary来加载它们。 (注意:并不是我无法调用LoadLibrary ,但是这些DLL需要静态链接(C ++ DLL与__declspec(dllexport) ),所以我调用LoadLibrary没有任何意义,因为可改变的加载器已经调用它了。 这两个DLL 没有任何依赖关系,也就是说,他们的加载顺序是不确定的,据我所知( 应该是不相关的)。 (两者的依赖关系基本上只在标准的windows dll(kernel32,msvcrt等) 我现在有问题,我希望控制这些DLL的加载顺序,那就是我希望foo.dll 总是在bar.dll之前加载( DLL_PROCESS_ATTACH )。 是不是有可能告诉Windows DLL加载器加载一个DLL之前? 编辑:要检查可执行文件的DLL加载顺序 ,可以使用DUMPBIN.exe实用程序:(只需启动Visual Studio命令提示符) 编辑:根据这个答案 / 这个博客条目 ,NT加载程序确实按顺序走入导入部分。 (这将导致独立的 DLL以它们出现在导入部分的顺序加载。) C:\path\to\program> dumpbin /IMPORTS app.exe | grep -i \.dll MSVCR80D.dll KERNEL32.dll OLEAUT32.dll MSVCP80D.dll foo.dll bar.DLL 这个输出意味着MSVCR80D.dll(及其依赖[a] )将首先被加载,并且bar.DLL将被最后加载。 卸载将以相反的顺序发生。 我还没有发现的是如何影响这个加载顺序 … (笔记) [a]:当然,这意味着kernel32.dll将被加载,因为msvcr80d.dll将依赖于kernel32.dll。 根据一些要求,我为此添加了一个基本原理:( 但是请 ,我仍然对此感兴趣, 我知道如何解决MFC问题。 […]

在64位Windows Server 2008 Standard SP2 IIS 7上注册一个dll

项目:VS2010 C#类库。 本地机器:Win 7 64bit 项目中更改的项目如下: Properties / AssemblyInfo.cs [assembly:ComVisible(true)] 项目/属性/生成选项卡:注册Com for Interop:选中生成Seralization程序集:自动 我已经为接下来的post设置了testing类,comvisible = true和guids等: 使用4.0框架和Visual Studio 2010为ASP Classic构buildCOM互操作库 我能够通过regasm在本地机器上注册这个dll。 C:\ windows \ Microsoft.Net \ Framework \ v4.0.30319> regasm NrccuaComFileSystem.dll types注册成功。 在服务器regsvr,regasm,reglm与tlb都失败,并显示以下消息: RegAsm:错误RA0000:无法加载文件或程序集'file:/// c:\ Windows \ Micr osoft.NET \ Framework \ v4.0.30319 \ NrccuaComFileSystem.dll'或其依赖项之一。 操作不受支持。 (从HRESULTexception:0x80131515) 我在这里做错了什么? 它是否正在寻找一个入口点,如果是的话,完全失去了如何提供。 看了下面的post也… 经典的ASP使用COM + .net互操作64位Windows Server 2008 […]

Qwindows.dll从来没有find

当我在其他机器上运行我的应用程序时,如果我重命名Qt目录,我得到“此应用程序无法启动,因为它无法find或加载Qt平台插件”窗口“重新安装应用程序可能会解决此问题。 这是包含应用程序的文件夹的布局: app.exe icudt53.dll icuin53.dll icuuc53.dll Qt5Core.dll Qt5Gui.dll Qt5Widgets.dll msvcp110.dll platforms/qwindows.dll 有没有可能强制searchqwindows.dll目录而不是QT目录我的应用程序的目录?

如何截取dll方法调用?

如何截取dll方法调用? 有什么可用的技术? 它只能在C / C ++中完成吗? 如何拦截从所有正在运行的进程到给定的DLL的方法调用? 如何拦截从给定的进程到给定的DLL的方法调用?

有没有更好的方式来加载在C + +的DLL?

现在我做这样的事情,如果我有很多我想在我的DLL中引用的函数,它似乎很混乱。 有没有一种更好,更干净的方式来访问函数,而不必为每个函数定义创build一个typedef,以便它将编译和正确加载函数。 我的意思是函数定义已经在.h文件中,我不应该重新声明他们后我加载函数(或我?)有没有比使用LoadLibary更好的解决scheme? 如果在Visual Studio 2005项目设置中可以做同样的事情,我不一定需要这个function。 BHannan_Test_Class.h #include "stdafx.h" #include <windows.h> #ifndef BHANNAN_TEST_CLASS_H_ #define BHANNAN_TEST_CLASS_H_ extern "C" { // Returns n! (the factorial of n). For negative n, n! is defined to be 1. int __declspec (dllexport) Factorial(int n); // Returns true iff n is a prime number. bool __declspec (dllexport) IsPrime(int n); } #endif […]

如何获取mscorlib.ni.lib(.Net Framework 3.5)的PDB文件

做了很多search之后,我仍然无法得到问题的解决scheme。 我有一个mdmp文件。 调用堆栈显示它正在使用mscorlib.ni.dll。 所以要获取函数信息,我需要得到它的pdb文件。 mscorlib.ni.dll的版本是2.0.50727.3655。 我相信它来自.Net Framework 3.5。 由于mscorlib.ni.dll是由ngen.exe生成的本机优化的dll,所以我需要使用ngen.exe createpdb生成此dll的pdf。 ngen.exe createpdb "C:\Windows\assembly\…\mscorlib.ni.dll" "C:\SymbolCache" 结果如下: 在“C:\ Windows \ Microsoft.NET \ Framework64 \ v3.5”文件夹中找不到ngen.exe 我可以在文件夹“C:\ Windows \ Microsoft.NET \ Framework64 \ v2”中findngen.exe,但没有createpdb选项。 我可以在文件夹“C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319”中findngen.exe,它确实支持createpdb选项,但报告错误。 Microsoft(R)CLR本机映像生成器 – 版本4.0.30319.18408版权所有(c)Microsoft Corporation。 版权所有。 在本机映像“C:\ Windows \ assembly \ NativeImages_v2.0.507 7_64 \ mscorlib \ 5cd1c2848ff40eb0a8c149706ee394fa […]

在程序启动时从另一个目录加载一个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系统的。