奇怪的typedef定义C ++

时间:2012-04-07 01:44:31

标签: c++ c

  

可能重复:
  Typedef function pointer?

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

有人能解释一下这段代码的作用吗?我知道typedef用于为现有类型指定替代名称,但我根本不理解这种情况。

2 个答案:

答案 0 :(得分: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在使用函数指针时也增加了对较少icky语法的支持:

using func = void (*)();  

对于您的GetProcAddress调用,这会从库中加载一个函数。您将它分配给函数指针,您可以像使用原始函数一样使用该函数指针。

在您的示例中,您现在可以像通常呼叫TE0300_Open一样呼叫_TE0300_Open。还应注意,_TE0300_Open是为实现保留的名称。

答案 1 :(得分:2)

它为函数指针声明了typedef _TE0300_Open