【问题标题】:Strange typedef definition C++ [duplicate]奇怪的typedef定义C ++ [重复]
【发布时间】:2012-04-20 12:26:08
【问题描述】:

可能重复:
Typedef function pointer?

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

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

【问题讨论】:

标签: c++ c


【解决方案1】:

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 是为实现保留的名称。

【讨论】:

  • 谢谢,毕竟没那么奇怪,只是没完全理解typedef的用法。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 2018-06-22
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多