gpt4 book ai didi

c++ - typedef 在 C++ 中别人的 .h 头文件中声明的函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:15:48 26 4
gpt4 key购买 nike

我使用的是 Visual Studion 2010,并给出了从 WinGDI.h 获得的以下示例函数:

__gdi_entry WINGDIAPI int WINAPI AbortDoc(__in HDC hdc);

有没有办法声明这种类型的函数指针,或者将其放入 typedef 中。例如:

AbortDoc() MyAbortDocPtr;

typedef AbortDoc AbortDocType;

显然这些在语法上是不正确的,不会编译,也许我想做的事根本做不到。但是,有一个解决方案,您可以自己手动干扰每个 typedef,如下所示:

typedef int (WINAPI *AbortDocType)( HDC hdc );

我用过这个,它确实对我有用,但是......

  • 这很乏味,尤其是当您要完成 100 个例程时。
  • 因为它很乏味而且容易出错,而且您可能会得到一个错误的签名并且直到边缘案例执行错误代码时才知道它。
  • 如果头文件中的基本签名发生变化,您有责任找出哪些发生了变化并进行更正。这意味着要手动检查所有例程,而不是仅仅抓取新的头文件并重新编译。

有谁知道我如何在 typdef 中使用预定义的函数声明,或者简单地使用原始声明作为 typedef 来声明新的函数指针?

最佳答案

您可以使用 decltype推断函数指针的类型。

#include <iostream>

#include <Windows.h>
#include <WinGDI.h>

typedef decltype(&AbortDoc) AbortDocType1;
typedef __gdi_entry WINGDIAPI int (WINAPI *AbortDocType2)( HDC hdc );

int main()
{
std::cout << typeid(AbortDocType1).name() << std::endl;
std::cout << typeid(AbortDocType2).name() << std::endl;
}

输出:

int (__stdcall*)(struct HDC__ *)
int (__stdcall*)(struct HDC__ *)

关于c++ - typedef 在 C++ 中别人的 .h 头文件中声明的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9706956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com