Маршалинг типов данных из C# Struct в CC#

Место общения программистов C#
Ответить
Anonymous
 Маршалинг типов данных из C# Struct в C

Сообщение Anonymous »

Я пытаюсь определить правильный тип для маршалинга char[] в функцию C dll. Следующий код правильно отправляет в dll данные char[] и возвращает ожидаемый результат из dll, но я не думаю, что делаю это правильно.

Код: Выделить всё

// C# code

public struct TestStruct {

public uint id;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
public char[] name;

};

[DllImport("Test.dll", CallingConvention = CallingConvention.StdCall)]
internal static extern void testFunction(ref TestStruct ts);

string name = "name123"; // 7 chars

TestStruct ts = new TestStruct();

ts.name = name.ToCharArray();

testFunction(ref tcsymbol); // C dll function call

Использование UnmanagedType.ByValArray не может быть правильным, поскольку я использую char[], а код должен работать с символами, а не с байтами.
Мне также пришлось жестко закодировать SizeConst = 7, чтобы этот тест работал... но во время выполнения я не буду знать размер значения имени, поэтому это решение в любом случае не будет работать как есть.
Любая помощь будет быть оцененным...

Подробнее здесь: https://stackoverflow.com/questions/792 ... truct-to-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»