延迟加载DLL时的函数原型



我正在延迟加载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,使用不同的名称作为本地指针,听起来是最好的解决方案。

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

最新更新