Задать вопрос
BacCM
@BacCM
C++ почти с рождения

C# Как создать структуру с полем типа массив?

Есть под которую пишутся плагины, изначально на свевозможных вариантах С++, пробовали на Delphi, на C вместе с Qt

Вот теперь захотелось диковинки в виде C#

Плагин это dll экспортирующая несколько функций. Обломился на первой же. Той которая возвращает заполненную структуру с информацией о плагине

На C это как-то так:
typedef struct {
	char name[101];
	char describe[201];
	char vendor[201];
	short version;
	short subversion;
}PLUGININFO;
typedef PLUGININFO* LPPLUGININFO;

/// И потом 

RCPLUGINCALLTYPE void GetPluginInfo(LPPLUGININFO lpPluginInfo)
{
	if (lpPluginInfo) {
		strcpy(lpPluginInfo->name, PLUGIN_NAME);
		strcpy(lpPluginInfo->describe, PLUGIN_DESCRIBE);
		strcpy(lpPluginInfo->vendor, "ООО \"Вендор\"");
		lpPluginInfo->version = PLUGIN_VERSION;
		lpPluginInfo->subversion = PLUGIN_SUB_VERSION;
	}
}


На самом деле там вариации на тему, кто делает memcpy с уже заполненной, кто по полям как тут.

Пока не понимаю как описать даже саму структуру. Может чего надоумите.

С C# опыт нулевой.
  • Вопрос задан
  • 213 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
petermzg
@petermzg
Самый лучший программист
[StructLayout(LayoutKind.Sequential)]
        public unsafe struct PLUGININFO
        {              
            public fixed byte name[101];      
            public fixed byte describe[201];
            public short version;

            // либо
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 101)]
            public string name;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 201)]
            public string describe;

            public short version;
        }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@John_Nash
coder
советую использовать c++ cli, mixed mode для того и существует
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы