2012-04-07 90 views
0

可能重複:
Typedef function pointer?奇怪的typedef定義C++

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

有人能解釋我這一段代碼呢?我知道typedef用於爲現有類型指定替代名稱,但我完全不瞭解這種情況。

+0

[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

回答

2

它爲函數指針聲明typedef,_TE0300_Open

4

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是爲實施保留的名稱。

+0

謝謝,畢竟它並不是很奇怪,我只是沒有完全理解'typedef'的用法。 – Reginald 2012-04-07 02:17:11