0

重複の可能性:
Typedef 関数ポインター?

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

誰かがこのコードが何をするのか説明できますか? 既存の型に代替名を割り当てるために使用されることは知っていtypedefますが、このケースはまったくわかりません。

4

2 に答える 2

4

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

この行は、 を返し、 および を受け取るWINAPI呼び出し規約関数への関数ポインターを型定義します。関数ポインタ型にはエイリアスが与えられます。intunsigned int *int_TE0300_Open

次の例を検討してください。

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);
}

C++11 は、関数ポインターを使用する場合にも、厄介な構文のサポートを追加したと思います。

using func = void (*)();  

あなたのGetProcAddress呼び出しに関しては、これはライブラリから関数をロードします。これを関数ポインターに割り当てると、その関数ポインターを元の関数と同じように使用できます。

あなたの例では、TE0300_Open通常どおりに呼び出すことができます_TE0300_Open_TE0300_Openまた、 は実装用に予約されている名前であることに注意してください。

于 2012-04-07T01:47:50.197 に答える
2

_TE0300_Open関数ポインターの typedef を宣言しています。

于 2012-04-07T01:47:17.997 に答える