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);
此行的typedef函數指針WINAPI
調用約定函數返回一個int
,並採取了unsigned 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
是爲實施保留的名稱。
謝謝,畢竟它並不是很奇怪,我只是沒有完全理解'typedef'的用法。 – Reginald 2012-04-07 02:17:11
[Typedef function pointer?](http://stackoverflow.com/questions/4295432/typedef-function-pointer)和[帶有兩組括號的Typedef?](http://stackoverflow.com/ question/9515739/typedef-with-two-sets-of-brackets) – 2012-04-07 01:47:47