Как маршалловую структуру, определенную из макросов в заголовке C?

Я не имею ни малейшего представления, чтобы сделать следующую часть Заголовочный файл API Vulkan для использования 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; в стиле макросов (препроцессор)?

1

Решение

## является оператором сцепления в препроцессоре C ++, поэтому в приведенном выше примере

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

будет расширяться до

typedef struct VkInstance_T* VkInstance;
2

Другие решения

Из ваших комментариев кажется, что вы хотите знать содержание VkInstance обрабатывать, так что вы можете сохранить его на диск или передать по сети.

Это невозможно. Мало того, что фактическое содержание VkInstance (как и любая другая ручка Vulkan) не указано, они не могу быть указано во время компиляции, потому что их содержимое полностью зависят от реализации Vulkan, с которой запускается ваша программа (Например, содержимое Nvidia’s VkInstance конечно, не будет соответствовать AMD VkInstanceили Intel).

Даже если бы вы как-то знали структуру структуры, было бы невозможно просто сохранить ее, потому что я могу гарантировать, что она будет содержать ссылку на ресурс времени выполнения, который просто не может быть сохранен, такой как сокет или дескриптор ресурса драйвера.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector