Function Pointer basic question
I have a basic question on function pointer.
In the below code snippet, how do I read this "
*(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 = 开发者_StackOverflow中文版LoadLibrary(szDll);
if (h)
*(FARPROC*)&pfn = GetProcAddress(h, szFn);
}
return pfn ? pfn(psz) : 0;
}
This isn't really about function pointers, but about casting in general.
Suppose pfn is of type T. Then &pfn is of type T*. This gets cast to FARPROC* by the cast expression (the stuff in the parentheses). Finally, this gets dereferenced, yielding a FARPROC&.
All in all this just means you're treating pfn as if it were of type FARPROC and assign a value to it.
Here's a generic example:
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();
*(FARPROC*)&pfn = GetProcAddress(h, szFn);
is equivalent to,
(FARPROC)pfn = GetProcAddress(h, szFn);
So, pfn is a function pointer which is type casted to FARPROC to store the address received from GetProcAddress(h, szFn).
[Note: I am not sure, if this kind of typecasting is deprecated in C++.]
加载中,请稍侯......
精彩评论