C++ 延迟加载DLL时的函数原型
我正在延迟加载DLL,如上所述。DLL附带一个.h文件,该文件具有常量定义和函数声明。这意味着当我尝试C++ 延迟加载DLL时的函数原型,c++,C++,我正在延迟加载DLL,如上所述。DLL附带一个.h文件,该文件具有常量定义和函数声明。这意味着当我尝试 MyFunction = pICFUNC(lpfnGetProcessID); // See link above 编译器抱怨“错误:无法将赋值中的‘int(*)(int,int,int)’转换为‘int(int,int,int)’”,因为MyFunction已在.h文件中声明为类似的形式: int __stdcall MyFunction (int, int, int); 我应该: A
MyFunction = pICFUNC(lpfnGetProcessID); // See link above
编译器抱怨“错误:无法将赋值中的‘int(*)(int,int,int)’转换为‘int(int,int,int)’”,因为MyFunction已在.h文件中声明为类似的形式:
int __stdcall MyFunction (int, int, int);
我应该:
A) 注释掉.h文件中的函数原型,并使用
typedef int (__stdcall * pICFUNC)(int, int, int);
pICFUNC MyFunction;
MyFunction = pICFUNC(lpfnGetProcessID);
B) 执行与A)相同的操作,但为函数指定不同的名称(MyFunction_local),而不是在.h文件中注释原型
C) 还有一件我没想到的事
我想做A),但这样处理第三方的.h文件感觉不对。一般来说,两个符号名称相同但含义不同是个坏消息。您的选项B使用不同的名称作为本地指针,听起来是最好的解决方案 如果坚持对函数和指针使用相同的名称,可以将其中一个或另一个放入命名空间中