Функция Указатель основной вопрос - PullRequest
0 голосов
/ 08 августа 2011

У меня есть основной вопрос по указателю на функцию.В приведенном ниже фрагменте кода, как мне прочитать этот "*(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 ]

2 голосов
/ 08 августа 2011

Это на самом деле не о указателях функций, а о приведении в целом.

Предположим, 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();
0 голосов
/ 08 августа 2011
*(FARPROC*)&pfn = GetProcAddress(h, szFn);

эквивалентно,

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

Итак, pfn - это указатель функции, тип которого приведен к FARPROC для хранения адреса, полученного от GetProcAddress(h, szFn).

[Примечание: я не уверен, не рекомендуется ли этот тип типизации в C ++.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...