繁体   English   中英

我可以更改要在运行时加载的dll的名称吗?

[英]Can I change the name of a dll to load at runtime?

说我有一个名为middle.dll的dll,它从runme.dll导入函数

我现在有一个替换的runmeDBG.dll,它具有与runme.dll导出的所有相同功能

有没有一种使用middle.dll的方法,但它具有链接到runmeDBG.dll而不是runme.dll导出的函数的功能?

我可以更改middle.dll的代码,但不知道将包含在构建Middle.dll时要使用的功能的dll名称。

(所有这些都是在C / C ++和Mingw工具集的上下文中)

如果通过使用GetProcAddress访问DLL中的所有功能,则可以,则可以在运行时切换使用哪个模块。 只需加载备用模块(请参见LoadLibrary )并将其句柄用作GetProcAddress的参数。

您也不想将其用于导入,但是,它将变得非常乏味!

这个问题很旧,但是我遇到了一个非常相似的问题后,首先在Google中找到了它,然后在其他地方找到了更好的解决方案。 这是我在另一个线程中找到的解决方案:延迟加载DLL。

如何重命名DLL但仍允许EXE查找它?

例如,如果将DLL设计为静态链接(接口中带有类),但是您实际上需要动态加载它而不更改其接口,则此技术很有用。 您只需要告诉Windows延迟加载DLL,并且当它实际加载DLL时,Windows会调用您的预加载钩子,然后只需将Handle返回到具有相同接口的另一个DLL(可能具有不同的名称)即可。

我假设middle.dll不是您的,并且它静态链接到runme.dll。 不,在静态链接的情况下,无法更改dll名称; 您可以将runmeDBG.dll重命名为runme.dll,并将其放置在dll加载程序可以找到它的位置。 或使用清单将可执行文件直接指向特定路径。 这不是runme.dll位于特定路径的要求,不是吗?

只需重命名替换项,然后将其放在与可执行文件相同的目录中即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM