Я работаю над веб-приложением VS 2015 MVC C, которое загружает стороннюю C++ DLL. У меня нет исходного кода. Для DLL требуется входной параметр. Для новой спецификации требуется несколько элементов массива. Один из них - массив int
, а другой - массив char
.C#: Как установить элементы массивов небезопасной структуры
Моя C# структуры определяет предполагаемую char
массива в качестве byte
в соответствии с 8-битным C++ символа:
[StructLayout(LayoutKind.Sequential)]
public unsafe struct MyDLLInput
{
public fixed int SomeList[288];
public fixed byte PathToData[256];
};
структура кажется правильной для меня, но теперь мне нужно установить значение и я не имею любой успех.
MyDLLInput dllInput = new MyDLLInput()
{
SomeList = new int[] {0,12,33,67,93},
PathToData = "C:\\some\\path\\to\\data"
}
// Call 3rd Party DLL
MyDLLOutput = MyDLL.EntryPoint(MyDLLInput);
Для обоих массивов членов я получаю следующее сообщение об ошибке:
Fixed size buffers can only be accessed through locals or fields.
Там, по крайней мере несколько вещей происходит здесь - в сторону от правильного пути установки значений с помощью локального ввода также необходимо сделать преобразование кодировки от string
до byte[]
.
Может ли кто-нибудь предоставить мне пример кода с чистым способом установки этих значений?
Вам необходимо создать постоянные поля в небезопасном блоке. – igorushi
Encoding.GetBytes решит вашу вторую проблему https://msdn.microsoft.com/en-us/library/ds4kkd55(v=vs.110).aspx – igorushi