TE0300_Open = (_TE0300_Open)GetProcAddress(hInstLibrary, "TE0300_Open");
typedef int (WINAPI *_TE0300_Open)(unsigned int* PHandle, int CardNo);
誰かがコードのこの作品が何を私に説明できますか?私はtypedef
が既存のタイプに代替名を割り当てるのに使われていることを知っていますが、私はこのケースを全く理解していません。
TE0300_Open = (_TE0300_Open)GetProcAddress(hInstLibrary, "TE0300_Open");
typedef int (WINAPI *_TE0300_Open)(unsigned int* PHandle, int CardNo);
誰かがコードのこの作品が何を私に説明できますか?私はtypedef
が既存のタイプに代替名を割り当てるのに使われていることを知っていますが、私はこのケースを全く理解していません。
関数ポインタとしてtypedef、_TE0300_Open
を宣言しています。
typedef int (WINAPI *_TE0300_Open)(unsigned int* PHandle, int CardNo);
この行は、int
を返すWINAPI
呼び出し規約関数への関数ポインタをtypedefで、かつunsigned int *
とint
を取ります。関数ポインタ型には、別名_TE0300_Open
が与えられます。あなたのGetProcAddress
コールについては
using func = void (*)();
、この負荷を:私も関数ポインタを使用する場合にC++ 11が少ない不快な構文のサポートを追加したと信じて
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);
}
:
は、次の例を考えてみましょうライブラリからの関数。関数ポインターに割り当てると、元の関数と同じようにその関数ポインターを使用できます。
この例では、_TE0300_Open
と通常どおりにTE0300_Open
を呼び出すことができます。 _TE0300_Open
は実装用に予約されている名前であることにも注意してください。
結局のところ、奇妙なことではありませんでした。私は 'typedef'の使い方を完全に理解していませんでした。 – Reginald
[Typedef関数ポインタ?](http://stackoverflow.com/questions/4295432/typedef-function-pointer)と[Typedef with 2 set of bracket?](http://stackoverflow.com/)が重複している可能性があります。質問/ 9515739/typedef-with-bracketの2つ) –