功能指针基本问题

时间:2011-08-08 14:10:39

标签: c++ function-pointers

我对函数指针有一个基本的问题。 在下面的代码片段中,我该如何阅读“ *(FARPROC*)&pfn =“?

IFastString *CallCreateFastString(const char *psz) {

static IFastString * (*pfn)(const char *) = 0;

if (!pfn) {

const TCHAR szDll[] = _TEXT("FastString.DLL");

const char szFn[] = "CreateFastString";

HINSTANCE h = LoadLibrary(szDll);

if (h)

*(FARPROC*)&pfn = GetProcAddress(h, szFn);

}

return pfn ? pfn(psz) : 0;

}

2 个答案:

答案 0 :(得分:2)

这不是关于函数指针,而是关于一般的转换。

假设pfn的类型为T。然后&pfn的类型为T*。这会通过强制转换表达式(括号中的内容)强制转换为FARPROC*。最后,这会被取消引用,产生FARPROC&

总而言之,这只意味着您将pfn视为FARPROC类型,并为其指定值。

这是一个通用的例子:

S make_an_S();

T x;
T * const px = &x;
S * const py = (S*)px;
*py = make_an_S();  // same as *(S*)&x = make_an_S();

答案 1 :(得分:0)

*(FARPROC*)&pfn = GetProcAddress(h, szFn);

相当于,

(FARPROC)pfn = GetProcAddress(h, szFn);

因此,pfn是一个函数指针,其类型已转换为FARPROC以存储从GetProcAddress(h, szFn)收到的地址。

[注意:我不确定,如果在C ++中不推荐使用这种类型转换。]