如何编组从 C 头文件中的宏定义的结构?
How to marshall struct defined from macros in C header?
我不知道如何整理 Vulkan API header file 的下一部分供 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;
in macros-style (preprocessor)?
## 是 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
或 Intel 的)。
即使您以某种方式知道结构布局,也无法简单地保存它,因为我可以向您保证它将包含对无法保存的 运行时间资源的引用,例如套接字或驱动程序资源句柄。
我不知道如何整理 Vulkan API header file 的下一部分供 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;
in macros-style (preprocessor)?
## 是 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
或 Intel 的)。
即使您以某种方式知道结构布局,也无法简单地保存它,因为我可以向您保证它将包含对无法保存的 运行时间资源的引用,例如套接字或驱动程序资源句柄。