LoadLibrary()到dll的相对地址
LoadLibrary() relative address to dll
我正试图在windows中的代码中加载一个dll,我用LoadLibrary((函数成功加载了我的dll,但我有一个问题,我给出了我的dll的路径,如:
LoadLibrary(C:\path\to\my\dll);
我想知道我是否可以给出dll的相对路径。例如:
LoadLibrary(.my dll directorymy dll.dll)
有可能吗?如果没有,我如何开发我的项目,它可以在不改变不同机器中dll的路径的情况下移植?
它很可能失败,因为您在对LoadLibrary的第二次调用中忘记了转义反斜杠。也许这是写问题时的拼写错误,因为你也忘记了文件名的引号。(也就是说,更改这一行:
LoadLibrary(.my dll directorymy dll.dll);
成为这样:
LoadLibrary(L".\my dll directory\my dll.dll");
(我不确定是否需要领先的.\
(
如果这还不能解决问题,那么这很可能会满足你的需求:
wchar_t szFullPath[MAX_PATH] = {};
GetCurrentDirectory(MAX_PATH, szFullPath);
PathCchAppend(szFullPath, MAX_PATH, L"my dll directory\my dll.dll");
HMODULE hDLL = LoadLibrary(szFullPath);
最后,LoadLibrary在搜索依赖DLL时有不同的行为。它会根据您指定路径的方式而变化。这可能会影响您从相对搜索路径加载DLL的能力。阅读上面的MSDN页面,并考虑查看LoadLibraryEx和SetDllDirectory等各种选项调用,以使搜索路径更容易处理。这个页面上的DLL搜索路径。
首先,我假设您打算写:
LoadLibrary(".\my dll directory\my dll.dll");
文档回答了您的问题:
如果指定了相对路径,则整个相对路径将附加到DLL搜索路径列表中的每个令牌。要从相对路径加载模块而不搜索任何其他路径,请使用GetFullPathName获取非相对路径,并使用非相对路径调用LoadLibrary。
因此,可以指定一个相对路径。但它的解释方式可能不是你所期望的。DLL搜索将依次获取DLL搜索路径中的每个路径,将其与相对路径相结合,然后尝试加载该DLL。
因此,如果您希望相对路径相对于当前工作目录,请调用GetFullPathName
将其扩展为绝对路径,然后加载该路径。如果您希望您的相对路径相对于其他目录进行解释,请与该目录结合,并使用绝对路径加载DLL。
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 使用来自 Dll 的偏移地址调用成员函数
- 使用 ReadProcessMemory 从进程读取相对于基址的地址
- 从注入进程的 DLL 调用函数并更改指针函数的地址
- 如何通过dll中的地址调用函数
- 如何在 64 位 DLL 中查找导出函数的地址?
- VirtualProtect和kernel32.dll-试图访问无效地址
- 如何修改运行时加载DLL的导入地址表
- (内存地址)(msvcr110.dll)处出现未处理的异常
- 在DLL的基地址处Win API ReadProcessMemory返回意外数据
- 本机 DLL 和 JRE 地址模型是否匹配
- 指定给 RtlValidateHeap DLL 的地址无效
- 在哪里可以找到与Microsoft DLL(比如WTTLog.DLL)相对应的头文件和库文件
- 使用32位应用程序从64位kernel32.dll获取函数地址
- 我该如何添加与表的每个哈希地址相对应的计数器
- 是任何编程语言(C++、C#、Java、C.)中声明函数的最终内存地址,无论是相对地址还是绝对地址
- dll-IAT中的指针-物理地址
- 如何将dll包含为相对路径
- LoadLibrary()到dll的相对地址
- 用于复制文件的c++代码::对相对地址感到困惑(波浪)