使用延迟加载加载正确的库 - 返回值类型错误
Use delay load to load correct library - return value type error
我在这里使用了msdn文档:http://msdn.microsoft.com/en-us/library/f0fkfy9y(v=vs.100).aspx
它在那里指定:
case dliNotePreLoadLibrary :
//If you want to return control to the helper, return 0.
//Otherwise, return your own HMODULE to be used by the
//instead of having it call LoadLibrary itself
所以我尝试了以下方法:
FARPROC WINAPI delayHook(unsigned dliNotify, PDelayLoadInfo pdli)
{
switch (dliNotify) {
case dliStartProcessing :
case dliNotePreGetProcAddress :
case dliFailLoadLib :
case dliFailGetProc :
case dliNoteEndProcessing :
return 0;
break;
case dliNotePreLoadLibrary :
{
char* dllPath = getDllPath();
HMODULE lib = LoadLibrary(dllPath);
return lib;
}
break;
default :
return NULL;
}
return NULL;
}
我返回 HMODULE 时出错:
">return":无法从"HMODULE"转换为"FARPROC"。
问题出在哪里?我在做什么不对劲的事情吗?他们确实说返回你自己的 HMODULE,这就是我所做的......
LoadLibrary()
返回一个HMODULE
。您的delayHook()
函数返回一个FARPROC
。因此,返回值不匹配。 假设你真的想返回HMODULE
由LoadLibrary()
返回,你可能想使用像reinterpret_cast
这样的强制转换:
case dliNotePreLoadLibrary :
{
char* dllPath = getDllPath();
HMODULE lib = LoadLibrary(dllPath);
return reinterpret_cast<FARPROC>(lib);
}
旁注:在当今世界,您应该使用 Unicode 而不是 ANSI/MBCS,因此您的dllPath
最好是 Unicode 字符串(例如const wchar_t*
, 或CString
, 或std::wstring
)。
所以你应该简单地将其转换为FARPROC
:
return (FARPROC)lib;
相关文章:
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 函数的返回值类型是别名 ***或 *** 布尔值
- 如何为具有常量类型的函数正确转换来自 DLsym 的返回值?
- Pybind11:作为返回值的外部类型
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- 更改 Python 切换的 C 函数的返回值类型
- C 语法,根据此代码返回值类型
- 类成员函数的返回值类型
- 如何捕获返回 lambda 的函数的返回值类型
- 如何从std :: function推断返回值类型
- 分配操作员返回值类型
- 使用延迟加载加载正确的库 - 返回值类型错误
- 返回指向常量getter的指针时,返回值类型与函数类型不匹配
- 返回值类型与函数类型CONST不匹配
- 提升phoenix值和函数返回值类型
- C++ 返回值类型与函数类型不匹配
- const成员函数的优先级高于返回值类型匹配
- boost::resulf_of或返回值类型为boost_TYPEOF
- 将函数的返回值类型转换为大小相同的不相关类型