0

我正在延迟加载 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 文件感觉不对。

4

1 回答 1

1

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

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

于 2012-07-18T17:01:15.670 回答