如何编组C头文件中由宏定义的结构体

本文关键字:宏定义 结构体 文件 何编组 | 更新日期: 2023-09-27 18:11:58

我不知道如何编组Vulkan API头文件的下一部分以供c#使用:

#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
...
VK_DEFINE_HANDLE(VkInstance)

我需要在这个方法中使用:

VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
    const VkInstanceCreateInfo*  pCreateInfo,
    const VkAllocationCallbacks* pAllocator,
    VkInstance*                  pInstance
);

指向vkInstance的指针。但是,这个神奇的东西是什么:宏风格的typedef struct object##_T* object;(预处理器)?

如何编组C头文件中由宏定义的结构体

##是c++预处理器中的连接操作符——所以在上面的例子中

#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
VK_DEFINE_HANDLE(VkInstance)

展开为

typedef struct VkInstance_T* VkInstance;

从您的评论来看,您似乎想知道VkInstance句柄的内容,以便您可以将其保存到磁盘或通过网络传输。

这是不可能的不仅没有指定VkInstance(以及任何其他Vulkan句柄)的实际内容,而且它们不能在编译时指定,因为它们的内容完全依赖于您的程序碰巧与一起运行的Vulkan实现(例如,Nvidia的VkInstance的内容肯定不会匹配AMD的VkInstance,或英特尔的)。

即使您知道结构布局,也不可能简单地保存它,因为我可以向您保证,它将包含对无法保存的运行时资源的引用,例如套接字或驱动程序资源句柄。