延迟加载DLL时的函数原型

时间:2012-07-18 16:43:29

标签: c++

我按照here所述延迟加载DLL。 DLL附带.h文件,它具有常量定义和函数声明。这意味着当我尝试做

MyFunction = pICFUNC(lpfnGetProcessID);  // See link above

编译器抱怨“错误:无法在赋值中将'int(*)(int,int,int)'转换为'int(int,int,int)'”因为在.h文件中已经声明了MyFunction :

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文件感觉不对。

1 个答案:

答案 0 :(得分:1)

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

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