2009-11-03 3 views
2

Я хочу передать структуру данных в приложение, созданное на C#. Я буду заполнять структуру в программе VC++.Передача структуры данных из VC++ в C#?

Как его отправить? Является ли структура, содержащаяся в C#?

Или, если я использую LPDATA в VC++: как я могу получить то же самое в C#?

ответ

2

Определение структуры в C#

При определении вашей структуры в C# убедитесь, что вы используете типы данных, которые соответствуют реализации C++. Char в C++, как байты в C# и т.д. ...

Вы должны добавить некоторые атрибуты для обеспечения вашей структуры макет памяти в C# соответствует C реализация

[StructLayout(LayoutKind.Sequential, Size=TotalBytesInStruct),Serializable] 
public struct MyStruct 
{ 
} 

++ Проходя мимо STRUCT

Declare struct в C#, используя ту же структуру данных. Передайте указатель на структуру вашего приложения C# из C++ и переведите его в новую структуру на C#.

Вызов вам C# DLL

Для вызова вашего C# DLL, лучшим вариантом является использование смешанного режима сборки в C++. Это позволяет использовать прагмы managed и unmanaged для переключения между собственным и управляемым кодом. Таким образом, вы можете красиво обернуть класс C# с помощью рабочей оболочки C++. См. Это Microsoft article. Помните, однако, это не поддерживается Mono.

0

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

0

Покажите нам свою структуру. У C# есть помощники маршаллеров, которые легко сопоставляют свои типы с родными типами C++, вам просто нужно знать, как украсить ваши типы, и мы можем помочь с этим, если вы покажете нам свою структуру.

Например, что LPDATA вещь, которую вы упомянули, если это char *, он отображает непосредственно над byte[] в C#, если это общий буфер, или string, если это нормальная струна (string отображение требует ИАС помощи, но это намного проще использовать, как только правильно оформлены).

0

Вы можете многому научиться у "platform invoke tutorial" по телефону MSDN. Единственное отличие состоит в том, что вы будете ссылаться собственную DLL :)

Смежные вопросы