есть такая структура
struct VkExtensionProperties {
char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
uint32_t specVersion;
}
и метод в котором она используется
VkResult vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties)
в c# написал так
public unsafe struct VkExtensionProperties
{
public fixed char extensionName[(int)vk.VK_MAX_EXTENSION_NAME_SIZE];
public uint specVersion;
}
VkResult vkEnumerateInstanceExtensionProperties([MarshalAs(UnmanagedType.LPWStr)] string pLayerName, ref uint pPropertyCount,[Out] [MarshalAs(UnmanagedType.LPArray)] VkExtensionProperties[] vkExtensionProperties);
но структуры оказываются пустыми. как правильно импортировать структуру и метод?
char в С# означает совсем не то, что в С++. Вместо массива char в данном случае нужно использовать string и ByValTStr.
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct VkExtensionProperties
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=(int)vk.VK_MAX_EXTENSION_NAME_SIZE)]
public string extensionName;
public uint specVersion;
}
Можно добавить в структуру оператор
VkExtensionProperties*
operator ()(const char* p, uint32_t k)
{
if (p)
strcpy(extensionName, p);
specVersion = k;
return this;
}
а потом можно будет передавать в вашу функцию например так:
const char* name = "pLayerName";
uint32_t k{5};
VkExtensionProperties v;
vkEnumerateInstanceExtensionProperties(name, &k, v(name, k));
поля обьекта v
будут иннициализированы первым и вторым аргументом
Виртуальный выделенный сервер (VDS) становится отличным выбором
Навесил метод на кнопку, но при нажатии ничего не происходит, остаются прежние значения, почему?
Мне необходимо проверить все TabPage`ы в TabControl, и если среди них не был найден ни один с определенным текстом, то выполнять на определенное действие
Я делаю игру Match3 на unity (C#)Мне нужно синхронизировать анимацию отдельных элементов в Unity (C#), при выделение одно элемента анимация включается...