2012-04-07 11 views
0

Mögliche Duplizieren:
Typedef function pointer?Seltsam typedef Definition C++

TE0300_Open = (_TE0300_Open)GetProcAddress(hInstLibrary, "TE0300_Open"); 
typedef int (WINAPI *_TE0300_Open)(unsigned int* PHandle, int CardNo); 

Kann mir jemand erklären, was dieses Stück Code tut? Ich weiß, dass typedef verwendet wird, um anderen Typen alternative Namen zuzuweisen, aber ich verstehe diesen Fall überhaupt nicht.

+0

Mögliches Duplikat von [Typedef Funktionszeiger?] (Http://stackoverflow.com/questions/4295432/typedef-function-pointer) und [Typedef mit zwei Klammern?] (Http://stackoverflow.com/) Fragen/9515739/typedef-with-two-sets-of-brackets) –

Antwort

2

Es wird ein typedef, _TE0300_Open, für einen Funktionszeiger deklariert.

4

typedef int (WINAPI *_TE0300_Open)(unsigned int* PHandle, int CardNo);

Diese Linie typedefs einen Funktionszeiger auf eine Funktion WINAPI convention Aufruf ein int Rückkehr und ein unsigned int * zu nehmen und ein int. Der Funktionszeigertyp erhält den Alias ​​_TE0300_Open.

Betrachten Sie das folgende Beispiel:

typedef void (*func)(); 

void foo (func f) //notice we have a nice type name here 
{ 
    cout << "Calling function..."; 
    f(); 
} 

void bar(){} 

int main() 
{ 
    foo (bar); 
} 

Ich glaube, C++ 11-Unterstützung für weniger eklig Syntax hinzugefügt, wenn auch Funktionszeiger mit:

using func = void (*)(); 

Was Ihre GetProcAddress Aufruf, diese Lasten eine Funktion aus einer Bibliothek. Sie weisen es einem Funktionszeiger zu, und Sie können diesen Funktionszeiger wie die ursprüngliche Funktion verwenden. In Ihrem Beispiel können Sie jetzt TE0300_Open anrufen, wie Sie normalerweise _TE0300_Open anrufen würden. Es sollte auch angemerkt werden, dass _TE0300_Open ein Name ist, der für die Implementierung reserviert ist.

+0

Danke, es war doch nicht so komisch, ich habe die 'typedef'-Verwendung einfach nicht ganz verstanden. – Reginald