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返回一个 的调用约定函数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这是为实现保留的名称。

于 2012-04-07T01:47:50.197 回答
2

它为函数指针声明了一个 typedef, _TE0300_Open

于 2012-04-07T01:47:17.997 回答