解释C 中三种返回类型的方法
Interpreting a method with three return types in C++
我在此标头FTD2XX中找到了几行代码,这些代码似乎具有具有三种返回类型的函数签名。我该如何解释?这是一个示例
FTD2XX_API
FT_STATUS WINAPI FT_Read(
FT_HANDLE ftHandle,
LPVOID lpBuffer,
DWORD nBufferSize,
LPDWORD lpBytesReturned
);
所有帮助都非常感谢。
实际返回类型本身只是FT_STATUS
:
typedef ULONG FT_STATUS;
FTD2XX_API
是一个宏,使用__declspec
指令定义DLL导入/导出处理:
#ifdef FTD2XX_EXPORTS
#define FTD2XX_API __declspec(dllexport)
#else
#define FTD2XX_API __declspec(dllimport)
#endif
当将API汇编为DLL中时,将定义FTD2XX_EXPORTS
,以便导出DLL函数。消耗API时,未定义FTD2XX_EXPORTS
,因此DLL函数被导入。
WINAPI
是windef.h
中的宏,它可以解决呼叫约定(Windows Systems上的__stdcall
):
#ifdef _MAC
...
#define WINAPI CDECL
...
#elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
...
#define WINAPI __stdcall
...
#else
...
#define WINAPI
...
#endif
因此,您的示例函数声明将解决此问题(包括参数类型分辨率):
__declspec(dllimport)
unsigned long __stdcall FT_Read(
void *ftHandle,
void *lpBuffer,
unsigned long nBufferSize,
unsigned long *lpBytesReturned
);
这些类型的宏在API中并不罕见,这些宏本来不常用于多个编译器和/或编译为DLL中的API。在这种情况下,在实现中,导出功能与使用情况相对于使用,也需要根据目标平台,甚至使用的编译器(例如,某些编译器使用 extern
/ __export
而不是 __declspec(dllimport)
/ __declspec(dllexport)
)。>
相关文章:
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 如何获取std::result_of函数的返回类型
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 奇怪的结构&GCC&clang(void*返回类型)
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 如何构造可以调用和返回两种不同类型的模板
- 多维数组存储三种不同的数据类型?
- 输出一个数字,该数字可能是三种类型之一
- 如何创建一个包含三种不同类型的向量的向量
- 当一种方法有三种返回可能性时该怎么办?
- 是否可以将一种函数类型转换为另一种采用相同参数但返回类型不同的函数类型
- 三种类型之间的隐式转换交互
- 可以使用 std::p air 保存三种数据类型的向量
- 解释C 中三种返回类型的方法
- 有没有一种方法可以让函数返回类型名
- 元组作为一种返回类型,是经过优化的未处理值
- 为什么这个为三种整数类型重载的函数无法编译?
- 返回类型推断:首选哪种方法