c++ - 奇怪的 typedef 定义 C++

标签 c++ c

<分区>

Possible Duplicate:
Typedef function pointer?

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

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

最佳答案

typedef int (WINAPI *_TE0300_Open)(unsigned int* PHandle, int CardNo);

这一行 typedef 函数指针指向 WINAPI 调用约定函数返回一个 int,并采用一个 unsigned 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 是为实现保留的名称。

关于c++ - 奇怪的 typedef 定义 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10051051/

相关文章:

c++ - 函数返回数组但输出不符合预期

c++ - 编写程序获取 CPU 缓存大小和级别

c++ - Xerces-C 在根名称中放置冒号时失败

c - 我在方程式中输入一个 double 整数,但一直得到 0

c++ - 比较 rapidjson::Documents

c++ - 一个宏定义调用中的对象及其类定义

c++ - 在 ios 编程中包括 c++ 库

在 VS2010 的 CUDA C 中编译计算能力 2.x

c - 有没有办法通过网络插件或其他插件通过 SSL 将数据发送到服务器?

从 .txt 文件中计算数字