代码之家  ›  专栏  ›  技术社区  ›  sum1stolemyname

地狱图书馆(又名DLL地狱)

  •  4
  • sum1stolemyname  · 技术社区  · 14 年前

    在我的一个项目中,我使用了一个Delphi应用程序,它动态加载一个包装器DLL(导出C风格的函数),该DLL又与一堆第三方DLL进行静态链接。

    它在我的测试机器上运行良好,但在我的客户计算机上,它初始化失败,出现了一条错误消息,如“找不到入口点”_somefunction@4AKKZ 在TMYlibrary.dll中。

    在对sysinternal的进程监视器进行了一些调查之后,我意识到Windows首先会从Windows/sytem32中的DLL进行查找,因此如果一个名为 我的

    你知道有没有可能改变windows的DLL的搜索行为?


    附加信息

    • [ 更新 ].exe文件位于应用程序文件夹树的顶层。
    2 回复  |  直到 14 年前
        1
  •  13
  •   sum1stolemyname    14 年前

    我自己找到了另一个解决办法:

    SetDllDirectory 向要查看的位置列表中添加其他搜索路径。

    http://msdn.microsoft.com/en-us/library/ms686203%28v=VS.85%29.aspx

    1. 从中加载应用程序的目录。
    2. 系统目录。使用GetSystemDirectory函数获取 此目录的路径。的名字 这个目录是System32。
    3. 此目录的路径,但它是 搜索。此目录的名称
    4. Windows目录。使用GetWindowsDirectory函数获取
    5. PATH环境变量中列出的目录。

    (也许我应该在发布之前搜索一下。)

        2
  •  1
  •   Alex    14 年前

    将DLL放入程序文件夹中(与exe文件相同)。

    那么Windows应该先试用你的版本。