C# 如何在C头中对宏定义的结构进行marshall?
我不知道下一部分的内容是什么: 我以后需要在该方法中使用:C# 如何在C头中对宏定义的结构进行marshall?,c#,c++,pinvoke,marshalling,vulkan,C#,C++,Pinvoke,Marshalling,Vulkan,我不知道下一部分的内容是什么: 我以后需要在该方法中使用: VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance( const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance ); 指向vkInstance的指针,可以。但是,这个神奇的东西是什么:
VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
const VkInstanceCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkInstance* pInstance
);
指向vkInstance
的指针,可以。但是,这个神奇的东西是什么:typedef结构对象###u T*对象在宏样式(预处理器)中,代码> < P> >是在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
或英特尔的内容不匹配)
即使你知道结构布局,也不可能简单地保存它,因为我可以保证它包含一个运行时资源的引用,它不能保存,比如socket或驱动程序资源句柄。< /P>我只是在C中创建了一个结构,确保类型大小与C++相同。没有元帅是请求者。ed.VkInstance,以及所有其他不可分派的Vulkan句柄,只是指向泛型结构的指针。如果您感兴趣,我们中的一些人已经为Vulkan-@FacticiusVir编写了C#绑定,谢谢:)greatI,请看,但是我如何检查哪个是
VkInstance
呢?我正在尝试跳转到它的定义,但不能超过VK\u DEFINE\u HANDLE(VkInstance)
,它引用了宏?如何处理它?它是一个空结构吗?ThanksIt是指向结构的指针。没有别的了。您可以将VK_DEFINE_HANDLE解释为一种typedef void*VkInstance代码>,+或-略低于@PaulIF上面写的内容。试试谷歌搜索VkInsatnce-这是列表的第一位:答案很好,非常感谢:)顺便说一句,我已经通过C#成功创建了Vulkan实例,证明:@MatthewTipton哦,是的,这是可能的,因为Vulkan实现正在为您分配VkInstance
。你不需要知道它包含什么,你只需要一个句柄来使用Vulkan函数。
typedef struct VkInstance_T* VkInstance;