[StuctLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
struct X {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1500)]
public string Data;
}
Управляемые типы в native длл-ке
Доброго времени суток всем. Возникла интересная(по крайней мере для меня) проблема. Существует длл-ка, написанная на native c++, в функции которой в качестве параметров посылаются структуры, содержащие другие структуры и тд)) Я хочу все структуры перебить на управляемый код(в c++/cli) и уже их использовать в качестве параметров. Как это правильно реализовать? По идее, надо сделать так, чтобы итоговая последовательность байт управляемого класса полностью соответствовала последовательности байт изначальной структуры. Пытался вместо структур объявлять ref class, но функция выдала ошибку
Объявляем соответствующий struct и навешиваем атрибут StuctLayoutAttribute с аргументом LayoutKind.Sequential или LayoutKind.Explicit, во втором случае нужно будет для каждого поля указывать смещение атрибутом FieldOffsetAttribute.
Функции из DLL вызывать через PInvoke.
Т.е. его аналог в управляемой структуре:
static array<System::Byte>^ Data = gcnew array<System::Byte>(1500) ?
Ведь в cli нельзя объявлять что-то типа array<System::Byte> Data[1500], а для нестатического массива можно только объявить дескриптор array<System::Byte>^ Data, под который не будет выделено необходимые нам 1500 байт))
Цитата: Karrde
Допустим, в native-структуре объявлен массив типа char Data[1500].
Т.е. его аналог в управляемой структуре:
Т.е. его аналог в управляемой структуре:
Код:
Цитата: Karrde
static array<System::Byte>^ Data = gcnew array<System::Byte>(1500) ?
Ведь в cli нельзя объявлять что-то типа array<System::Byte> Data[1500], а для нестатического массива можно только объявить дескриптор array<System::Byte>^ Data, под который не будет выделено необходимые нам 1500 байт))
В unsafe структурах в C# - можно. Как в MC++ - не ведаю.
Мне кажется, чем совершать сей великий труд по трансляции пива в чебуреки, проще сделать управляемый API над вашей DLL и похорнить неуправляемые структуры в его недрах.
мдя, в итоге подумал, что такую разнородную кучу структур переводить в управляемый код будет долго и муторно)) и решил, раз уж пишу на cli, то можно и эти неуправляемые структуры оставить. Спасибо, по крайней мере начал разбираться с PInvoke