错误:从'int (*)()'到'long unsigned int'的转换无效
error: invalid conversion from 'int (*)()' to 'long unsigned int'
我对C++相当陌生,我正在尝试在这个论坛上理解代码 http://www.blizzhackers.cc/viewtopic.php?p=2483118。我已经设法解决了大部分错误,但这个错误让我难倒了,这是函数中的代码给我带来了问题。
void LoadDll(char *procName, char *dllName)
{
HMODULE hDll;
unsigned long cbtProcAddr;
hDll = LoadLibrary(dllName);
cbtProcAddr = GetProcAddress(hDll, "CBTProc"); // The error points to this line
SetWindowsHookEx(WH_CBT, cbtProcAddr, hDll, GetTargetThreadIdFromProcname(procName));
}
将cbtProcAddr
的定义更改为:
HOOKPROC cbtProcAddr;
编译器很不高兴,因为您尝试将指针类型值存储在声明为保存整数的变量中。 (您可能需要将 GetProcAddress()
的结果强制转换为 HOOKPROC
,因为该函数不知道指向函数的实际签名,但在 SetWindowsHookEx()
调用中指针的使用意味着它与HOOKPROC
函数指针类型的签名兼容。
GetProcAddress
返回一个FARPROC
(从编译器错误来看,这只是int(*)()
的typedef)。 unsigned long
不是FARPROC
,两者之间没有隐式转换。
我无法理解为什么您将GetProcAddress
的结果存储在unsigned long
中.如果检索函数,则要存储函数指针。使用正确的类型(SetWindowsHookEx
需要HOOKPROC
)并强制转换:
HOOKPROC cbtProcAddr;
hDll = LoadLibrary(dllName);
cbtProcAddr = reinterpret_cast<HOOKPROC>(GetProcAddress(hDll, "CBTProc"));
相关文章:
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 错误:隐式转换更改符号:'int'到'unsigned long'
- 定义 uint= "unsigned int" 没有像我在 Visual Studio 中使用 nvcc 时预期的那样应用
- 对 '(const Y) (int&, std::mersenne_twister_engine<long unsigned int,
- 错误:'class std::unique_ptr<std::set<long unsigned int> >'没有名为 'size' 的成员
- 正确语法,用于统一初始化名称中带有空格的类型的临时,如unsigned int
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 按值对 std::unordered_map<std:::string, std::atomic<unsigned int>> 进行排序
- 编译Qt项目给出了对运算符delete(void*,unsigned int)的未定义引用
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- memcpy unsigned char to int
- 没有匹配函数来调用"std::basic_ofstream<char>::write(std::string*, long long unsigned int)"
- 初始化unsigned int至0
- 为什么"unsigned int" + "unsigned int"返回"unsigned int"?
- C++模板比 int->unsigned 转换更好?
- 错误:从'int'分配给'_List_iterator<unsigned int,unsigned int &,unsigned int *>'
- 请求在"num"中请求成员"push_back",其非类类型为"int[((unsigned int)((int)n))]"