精华内容
下载资源
问答
  • VS2010使用Dll文件搜索顺序

    千次阅读 2013-05-24 15:45:59
    然后,我再创建了一个win32控制台程序,使用这个dll文件,我使用的方式是装载时调用,所以我需要.h,.lib,.dll文件。 2.1 我将这3个文件复制到这个程序的目录下,然后在程序中就可以直接使用了。 2.2 在运行的...

    1. 首先,我用VS2010创建了一个Dll工程。

    编译连接后,便在Debug目录下得到了.lib.dll文件。

     

    2. 然后,我再创建了一个win32控制台程序,使用这个dll文件,我使用的方式是装载时调用,所以我需要.h.lib.dll文件。

    2.1 我将这3个文件复制到这个程序的目录下,然后在程序中就可以直接使用了。

    2.2 在运行的过程中,我发现运行时,使用的dll文件不是当前程序目录下我复制过来的dll文件,而是利用原来Dll工程中Debug下的dll文件。

    2.3 然后,我将原创建dll工程下Debug目录下的dll文件删除掉后,再执行一下这个控制台程序,发现此时调用的dll就是我复制到这个程序目录下的dll文件了。

    所以我猜测lib文件中应该有记录原创建dll的目录信息,所以在使用lib的时候,程序会从lib文件中记录的dll路径去找dll来加载,从而执行;而当发现这个记录路径下没有预想的dll文件后,系统就会从程序当前路径找相应的dll,于是就找到了我们复制过来的dll文件,于是程序便可以执行了。

    lib文件中记录有原dll文件信息有一个好处,那就是只要我不改变库文件接口,而是更新原接口的操作,这样重新编译生成新的dll文件,这样就不需要每次更新库接口操作后,都要将新的.lib.dll文件复制到需要使用的地方,这样就很方便。当然这只是在本机调试时比较方便,如果已经发布了dll,那么每次更新dll,都要给用户发布这个新的dll文件。如果dll文件中增加了新的接口函数或改变了接口名称,那么就要利用新的.h文件和.lib文件,重新构建生成应用程序,然后将这个升级版的应用程序和新的dll发布给用户,进行更新。

    相关问题:

    . 程序执行时,系统装在dll文件的路径顺序?lib文件记录路径——>程序当前路径——>??

    参考地址:http://msdn.microsoft.com/zh-cn/library/7d83bc18(VS.80).aspx

    通过隐式和显式链接,Windows 首先搜索已知 DLL”,如 Kernel32.dll User32.dllWindows 然后按下列顺序搜索 DLL

    1.      当前进程的可执行模块所在的目录。

    2.      当前目录。

    3.      Windows 系统目录。GetSystemDirectory 函数检索此目录的路径。

    4.      Windows 目录。GetWindowsDirectory 函数检索此目录的路径。

    5.      PATH 环境变量中列出的目录。

    . dll构建程序时,如何处理dll更新升级问题?这个问题比较大、复杂,以后用的时候,慢慢总结吧。

    展开全文
  • 1.dll文件的依赖分析可以通过 使用64位的depends.exe查看你exe依赖的...3.dll文件搜索路径 作者:朱金灿 来源:http://blog.csdn.net/clever101/ DLL的动态链接有两种方法。一种是加载时动态链接(Load_tim...

    1.dll文件的依赖分析可以通过

    使用64位的depends.exe查看你exe依赖的dll

     

    2.32位dll和64位dll的查看

     

     

     

     

     

     

     

     

    3.dll文件的搜索路径

     

    作者:朱金灿
    来源:http://blog.csdn.net/clever101/

     

          DLL的动态链接有两种方法。一种是加载时动态链接(Load_time dynamic linking)。Windows搜索要装入的DLL时,按以下顺序:应用程序所在目录→当前目录→Windows SYSTEM目录→Windows目录→PATH环境变量指定的路径。

     

         前天看到这几句,突然设计出一道自认绝妙的笔试题:
    "如果采用加载时动态链接的方式,Windows搜索要装入的DLL采用怎样的顺序?"
    这个是基础题,估计你很容易答出(答案就是上面的)。呵呵,我还有后着呢:
    "你是如何证明Windows搜索要装入的DLL遵循这样的顺序呢,说出你的证明步骤"

     

          你可以思考一下。下面是我设想的一个方案,但是自己测试了一下。结果却令人吃惊。


    我的证明步骤是这样的:
    1. 首先新建一个MFC 常规DLL工程OutputModulePath,在里面添加一个API函数,功能就是打印DLL所在路径,然后将其导出,代码如下:

     

     

    [cpp] view plain copy
     
    1. void PaintModulePath()  
    2. {  
    3.     extern COutputModulePathApp theApp;  
    4.     TCHAR szModulePath[MAX_PATH];  
    5.     :: GetModuleFileName(theApp.m_hInstance,szModulePath, MAX_PATH);  
    6.     AfxMessageBox(szModulePath);  
    7. }  

     

     


    2. 编译这个DLL工程,然后将生成的DLL文件OutputModulePath.dll复制到当前目录、Windows SYSTEM目录→Windows目录→PATH环境变量指定的路径。这里要说明一下:如果调试运行的话,当前目录应该是当前目录的工程文件所在的路径,如果单击直接运行的话,当前目录应该是exe程序所在的路径,具体可以通过一下代码获取当前目录:

     

     

    [cpp] view plain copy
     
    1.     TCHAR szBuf[MAX_PATH];  
    2. ::ZeroMemory(szBuf,MAX_PATH);  
    3. if (::GetCurrentDirectory(MAX_PATH,szBuf) > 0)  
    4.    {  
    5.     //获取进程目录成功。  
    6.       AfxMessageBox(szBuf);  
    7.     }  

     



    PATH环境变量指定的路径这里可能有多个路径,这里只须将OutputModulePath.dll拷贝到其中之一就行,例如我拷贝到的是:D:/Program Files/Lua/5.1。

     

    3. 建一个测试工程(对话框程序或单文档程序都可以),在里面调用PaintModulePath函数。
    我的测试步骤及结果是这样的,按F5调试运行测试程序,首先程序输出的是exe程序所在的路径,然后我将exe程序路径下的dll文件删除,但接着输出的是C:/WINDOWS/system/OutputModulePath.dll,我将C:/WINDOWS/system/OutputModulePath.dll删除,接着输出的是C:/WINDOWS/ OutputModulePath.dll,将C:/WINDOWS/ OutputModulePath.dll删除,输出的才是当前目录下的文件路径,最后输出的是PATH环境变量指定的路径。

     

         这样的结果和书上的理论不符。难道我的测试方案有什么不对吗?

     

         到论坛一问,得到一个答案是微软上的一篇文章:

     

    Dynamic-Link Library Search Order

     

            现在把它翻译一下:

     

    动态链接库的搜索顺序

     

           一个系统可以包含多个版本的同一个动态链接库(dll)。应用程序能够通过使用动态链接库重定向清单文件 指定要加载的DLL的全路径。如果没有使用这些方法,这篇文章将讲述在装入DLL时DLL的搜索顺序。

     

    标准的搜索顺序

     

           DLL的搜索顺序取决于是否安全DLL搜索模式是启用或禁用。
    安全DLL搜索模式在默认状态下是启用的。通过创HKLM/System/CurrentControlSet/Control/Session Manager/SafeDllSearchMode注册表项并将它的值设为0可以关闭这个属性。通过调用SetDllDirectory函数可以有效禁用安全DLL搜索模式而在这篇文章中这个函数指定的路径将加入搜索范围并改变搜索顺序。

    Windows XP and Windows 2000 with SP4: 安全DLL搜索模式在默认状态下是禁用的。通过创HKLM/System/CurrentControlSet/Control/Session Manager/SafeDllSearchMode注册表项并将它的值设为1可以启用这个属性。安全DLL搜索模式在默认状态下得到启用始于带sp2的Windows XP。

    Windows 2000: 并不支持安全DLL搜索模式。在这种情况下DLL的搜索顺序和安全DLL搜索模式被禁用的情况下的顺序是一样的。安全DLL搜索模式得到支持始于带sp4的Windows 2000。

    假如安全DLL搜索模式启用,搜索顺序如下:
    1. 应用程序所在的路径
    2. Windows SYSTEM目录。通过调用GetSystemDirectory函数可以获取这个目录的路径。
    3. 16位系统的目录。并没有函数可以获取这个目录的路径,但是它会被查找。
    4. Windows目录。通过调用GetWindowsDirectory函数可以获取这个目录的路径。
    5. 当前目录
    6. PATH环境变量指定的路径。请注意,这并不包括每个应用程序的应用程序路径注册表项中指定。在应用程序路径注册表项的键值并不作为DLL的搜索路径。


    假如安全DLL搜索模式禁用,搜索顺序如下:
    1. 应用程序所在的路径
    2. 当前目录
    3. Windows SYSTEM目录。通过调用GetSystemDirectory函数可以获取这个目录的路径。
    4. 16位系统的目录。并没有函数可以获取这个目录的路径,但是它会被查找。
    5. Windows目录。通过调用GetWindowsDirectory函数可以获取这个目录的路径。
    6. PATH环境变量指定的路径。请注意,这并不包括每个应用程序的应用程序路径注册表项中指定。在应用程序路径注册表项的键值并不作为DLL的搜索路径。

     

    预备的搜索顺序

     

           由系统指定的标准搜索顺序可以通过调用LoadLibraryEx函数加上LOAD_WITH_ALTERED_SEARCH_PATH参数值得到改变。标准搜索顺序也可以通过调用SetDllDirectory函数得到改变。

     

    Windows XP: 通过调用SetDllDirectory函数来改变标准搜索顺序并不支持直到Windows XP sp1出现。
    Windows 2000: 不支持通过调用SetDllDirectory函数来改变标准搜索顺序。


    如果您指定一个备用的搜索顺序,程序将按备用的搜索顺序进行搜索,直到所有相关的可执行模块被找到。系统启动后,DLL初始化例程处理,该系统将恢复为标准的搜索顺序。

    LoadLibraryEx函数通过指定LOAD_WITH_ALTERED_SEARCH_PATH属性和lpFileName参数指定一个绝对路径支持一个预备的搜索顺序。

    请注意:标准搜索顺序和通过调用指定LOAD_WITH_ALTERED_SEARCH_PATH属性的LoadLibraryEx函数来设置的预备搜索顺序只是有一点不同:标准搜索顺序开始于搜索1. 应用程序所在的路径而预备搜索顺序开始于LoadLibraryEx函数所要加载的可执行模块的所在目录。

    假如安全DLL搜索模式启用,搜索顺序如下:


    1. lpFileName参数值所指定的目录
    2. Windows SYSTEM目录。通过调用GetSystemDirectory函数可以获取这个目录的路径。
    3. 16位系统的目录。并没有函数可以获取这个目录的路径,但是它会被查找。
    4. Windows目录。通过调用GetWindowsDirectory函数可以获取这个目录的路径。
    5. 当前目录
    6. PATH环境变量指定的路径。请注意,这并不包括每个应用程序的应用程序路径注册表项中指定。在应用程序路径注册表项的键值并不作为DLL的搜索路径。


    假如安全DLL搜索模式禁用,搜索顺序如下:


    1. lpFileName参数值所指定的目录
    2. 当前目录
    3. Windows SYSTEM目录。通过调用GetSystemDirectory函数可以获取这个目录的路径。
    4. 16位系统的目录。并没有函数可以获取这个目录的路径,但是它会被查找。
    5. Windows目录。通过调用GetWindowsDirectory函数可以获取这个目录的路径。
    6. PATH环境变量指定的路径。请注意,这并不包括每个应用程序的应用程序路径注册表项中指定。在应用程序路径注册表项的键值并不作为DLL的搜索路径。

     

          假如lpPathName参数指定了一个路径,SetDllDirectory函数支持一个预备的搜索顺序。这个预备的搜索顺序如下:


    1. 应用程序所在的路径
    2. lpPathName参数指定的目录
    3. Windows SYSTEM目录。通过调用GetSystemDirectory函数可以获取这个目录的路径。
    4. 16位系统的目录。并没有函数可以获取这个目录的路径,但是它会被查找。
    5. Windows目录。通过调用GetWindowsDirectory函数可以获取这个目录的路径。
    6. PATH环境变量指定的路径。请注意,这并不包括每个应用程序的应用程序路径注册表项中指定。在应用程序路径注册表项的键值并不作为DLL的搜索路径。

     

         如果lpPathName参数为一个空字符串,当前目录将会从搜索顺序中删除。
    SetDllDirectory 有效地禁用安全DLL搜索模式,而在搜索指定的目录路径。要恢复安全 DLL搜索模式的SafeDllSearchMode注册表值的基础和恢复当前目录到搜索顺序,调用 lpPathName的参数值为NULL的SetDllDirectory函数。

     

          看完这篇文章,我大致知道了我的测试为何会出现那个结果,因为我的操作系统环境是Win XP + sp3。

     

    参考文献:

     

    1. MFC深入浅出

     

     

     

    展开全文
  • DLL文件搜索顺序

    2010-01-09 17:29:00
    对于 API的DLL搜索顺序: 如果是采用lib方式隐式链接的话: 1:被装载程序包的执行目录。 //即可执行文件所在的路径2:当前目录。如果与执行目录不同的话。//.dsw所在的路径 3:Windows系统目录 4:Windows目录。...

    对于 API的DLL的搜索顺序:
    如果是采用lib方式隐式链接的话:
    1:被装载程序包的执行目录。 //即可执行文件所在的路径
    2:当前目录。如果与执行目录不同的话。//.dsw所在的路径
    3:Windows系统目录
    4:Windows目录。
    5:Path中的目录。 

    这应该是固定的一种规则。

    展开全文
  • 程序中调用LoadLibrary函数装载一个DLL文件,没有指定文件路径,那么Windows操作系统搜索DLL文件的顺序如下: MSDN中说得很明白: 1.The directory where the executable module for the current process is ...

    程序中调用LoadLibrary函数装载一个DLL文件,没有指定文件路径,那么Windows操作系统搜索DLL文件的顺序如下:


    MSDN中说得很明白:
    1.The directory where the executable module for the current process is located. 
      进程的所在目录
    2.The current directory. 
      当前目录
    3.The Windows system directory. The GetSystemDirectory function retrieves the path of this directory. 
      Windows系统目录
    4.The Windows directory. The GetWindowsDirectory function retrieves the path of this directory. 
      Windows目录
    5.The directories listed in the PATH environment variable.
      Path环境变量中的目录


    当一个DLL文件被装入内存后,其他应用程序不必再重复装入同名的DLL(不论要装入的DLL存放在什么位置)。





    展开全文
  • 本资源是针对于Lucene.Net提供的所需代码开发的dll文件,通时也包括使用分词所需要的Dict文件
  • PAGE PAGE 2 win7系统中删除多余的dll文件的详细步骤 以下就是最为详细的步骤 1.首先在桌面上依次击开始-而后在搜索框里面输入regedit回画并运行它如下图 2.在注册编辑器中依次展开以下路径 HKEY_LOCAL_MACHINE\ ...
  • 解决DLL文件丢失

    千次阅读 2017-10-31 21:28:35
    前篇一律都是同样的解决的办法第一步看提示记住xxx.dll文件的名称第二步找到百度搜索,(如果嫌弃百度广告多可以选择其他搜索类型),搜索dll文件进行下载,不过要注意很多的dll下载网站文件不正规,要谨慎下载,...
  • Windows搜索DLL文件的基本规则

    千次阅读 2010-02-24 20:24:00
    Windows搜索DLL文件的基本规则: 1)执行文件所在的文件夹。 2)windows系统安装文件夹,即安装了windows的文件夹,GetWindowsDirectory( )函数可提供该目录的路径名。 3)Windows系统目录,即System32子目录;...
  • 前几天我重新在C盘装了系统,之后发现D盘的软件不能用了,点击运行时,出现:.dll文件找不到了! 我用everything搜索了一下,发现系统盘C:\Windows\SysWOW64下有这个文件,同时的我的软件安装路径下也有这个文件。...
  • python DLL文件调用问题

    万次阅读 2018-12-29 13:40:42
    在网上搜索很多关于pythonDLL文件调用的问题,大多给出的都是DLL文件的编写,然后python调用,但是在调用中遇到的一些问题却很少有提及,下面将给出在python调用DLL文件时遇到的一些问题等。  ctypes官网:...
  • vb 实现文件的关联库文件搜索源代码
  • 修改DLL文件内容

    万次阅读 2017-12-20 20:02:27
    今天帮人修改一个网站。...文件搜索title名,如果写在js里肯定可以被搜索到,但是没有。 查看页面请求,也没有异常请求。 由于刚入门.net,没有意识到可以静态调试,好方便。所以在cs文件里又修改了t
  • 压缩包内提供原版安装文件和破解后的dll文件. 使用方法:1.执行原版安装文件. 2.在电脑内搜索VA_X.dll文件的位置,把下载到的破解dll文件覆盖原VA_X.dll文件. 3.安装破解结束.
  • 2 在电脑内搜索VA X dll文件的位置 把下载到的破解dll文件覆盖原VA X dll文件 Windows7系统和VisualStudio2013的VA X dll所在路径:C: Users 你的用户名 AppData Local Microsoft VisualStudio 12 0 Extensions 一...
  • 压缩包内提供VisualAssist10.8.2036原版安装文件和破解后的dll文件. 使用方法: 1.执行原版安装文件. 2.在电脑内搜索VA_X.dll文件的位置,把下载到的破解dll文件覆盖原VA_X.dll文件. 3.安装破解结束.
  • 2.在电脑内搜索VA_X.dll文件的位置,把下载到的破解dll文件覆盖原VA_X.dll文件. (Windows7系统和VisualStudio2013的VA_X.dll所在路径:C:\Users\你的用户名\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\一...
  • 使用 manifest 文件搜索依赖 DLL

    千次阅读 2013-05-07 11:02:42
    生成 C/C++ 并行程序集 Visual Studio 2005 ...side-by-side assembly 是应用程序在运行时可使用的资源的集合,如一组 DLL、Windows 类、COM 服务器、类型库或接口。在 Visual C++ 2005 中,已将 ATL
  • 丢失Qt5Core.dll文件

    2020-07-24 12:31:45
    解决操作系统中丢失Qt5Core.dll文件 运行程序时显示“无法启动此程序,因为计算机丢失Qt5Core.dll,尝试重新安装此程序以解决此问题”。 解决方案如下(缺少其他dll文件时类似): 下载Qt5Core.dll文件。百度搜索...
  • 切换到 Solution 右键单击 Dependencied 并选中 Add Reference 直接在搜索搜索或选择 Add From 指定目标文件,选择好后单击 Add 即可
  • 2 在电脑内搜索VA_X.dll文件的位置 把下载到的破解dll文件覆盖原VA_X.dll文件. Windows7系统和VisualStudio2013的VA_X dll所在路径: C:\Users\你的用户名\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\...
  • npptools.dll文件丢失

    千次阅读 2017-05-08 20:52:18
    今天下载一个x-scan玩玩时,打开发现npptools.dll文件丢失.网上搜索,在百度下载了一个npptools.dll,输入cmd时,出现没有找到DllRegisterStrver输入点,于是换用管理员身份登录cmd,再输入时,大功告成!
  • 2 在电脑内搜索VA_X.dll文件的位置 把下载到的破解dll文件覆盖原VA_X.dll文件 Windows7系统和VisualStudio2013的VA X dll所在路径: C:\Users\你的用户名\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\随机...
  • 由于找不到 libmmd dll,无法继续执行代码。重新安装程序可能会解决此问题C4D 由于找不到 libmmd dll...1、右键桌面快捷图标——打开文件所在的位置——在这个文件夹下搜索libmmd.dll 2、将搜索出来的libmmd.dll复...
  • dll文件的加载顺序

    千次阅读 2012-05-28 19:53:04
    程序的运行要去加载所需要的dll文件,在程序运行的时候往往会遇到dll找不到的问题,或者不能确定所加载的dll文件是否是自己所需要的dll,遇到dll出问题的时候往往会不知所措,但是一旦知道了dll的加载顺序,按这个去...
  • QT4.9.0生成.exe文件显示缺少dll文件 最近才开始学习QT,在QT界面程序可以正常运行,但是打开QT文件夹下的release文件夹后会发现一个xx.exe文件,运行时老是提示缺少XX.dll,我看了很多博主的博客,但是都没有解决。...
  • 电脑用时间久了,经常会遇到这样的问题,当你打开某个程序,突然会弹出一个提示窗口,说程序中某个dll文件丢失或...首先登录下载网站(http//:dll.ylmf.net)后在搜索框中直接输入丢失的dll文件全称,点击搜索便可。如
  • INNO SETUP注册DLL文件

    2012-09-04 13:33:00
    在用INNO SETUP制作安装脚本时常常遇到DLL没有注册而安装完成后运行程序出现错误的问题经过一系列的搜索终于找到了解决方案 特此共享代码如下:[Files]Source: "DLL文件所在路径"; DestDir: "{app}"; Flags:...
  • 关于在Windows10上删除.dll文件的方法

    千次阅读 2020-01-13 15:29:51
    DLL文件是库文件,是我们软件运行时的必备文件,但是在有的时候我们删除了安装的软件,相对应的...3.搜索要删除的DLL文件 点击编辑—>查找—>输入想要删除的DLL文件 或Ctrl+f—>输入要删除的DLL文件查找 4....
  • PAGE PAGE 1 Win10系统中shapp.dll文件丢失的详细解决方法 Win10系统用户表示遇到了shapp.dll...解决方法 方法一 1在网上搜索并下载丢失的相应dll文件; 2一般下载后得到的都会是压缩包文件解压后即可得到dll文件; 3然
  • .CS文件编译生成.DLL文件 .EXE文件

    千次阅读 2014-03-18 09:30:17
    如果没有VS用下面的办法 搜索csc.exe 打开cmd 转到csc.exe的文件夹 ...正常情况下csc.exe的目录下会多个dll文件 copy出来 asp.net程序是经过编译执行的,这个大家都知道,尤其是使用Codebehind的时候,必须先把背

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,387
精华内容 1,354
关键字:

dll文件搜索