C++ 延迟加载DLL时的函数原型

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

我正在延迟加载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) 注释掉.h文件中的函数原型,并使用

typedef int (__stdcall * pICFUNC)(int, int, int);
pICFUNC MyFunction;
MyFunction = pICFUNC(lpfnGetProcessID); 
B) 执行与A)相同的操作,但为函数指定不同的名称(MyFunction_local),而不是在.h文件中注释原型

C) 还有一件我没想到的事


我想做A),但这样处理第三方的.h文件感觉不对。

一般来说,两个符号名称相同但含义不同是个坏消息。您的选项B使用不同的名称作为本地指针,听起来是最好的解决方案

如果坚持对函数和指针使用相同的名称,可以将其中一个或另一个放入命名空间中