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;