Я имею следующую проблему:Сбои приложений, когда опция Оптимизация кода включена
Я разрабатываю приложение C#, который требует небезопасного кода для вызова в C Функция неуправляемого ++. Структура:
[StructLayout(LayoutKind.Sequential)]
unsafe struct DataStruct
{
public UInt16 index;
public UInt16 response;
public byte* addr; //this is a pointer to a byte array which stores some some data.
}
И это, как я импортировать функцию:
[DllImport("imagedrv.dll", EntryPoint = "SendCommand", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
private static extern int SendCommand([MarshalAs(UnmanagedType.Struct, SizeConst = 8)]ref DataStruct s);
функция который вызывается из потока Устпешно и я получить ожидаемые результаты, но проблема в том, когда я общаюсь с моя форма Windows.Form, все приложение аварийно завершает работу. Неважно, перемещаю ли я курсор над ним или я взаимодействую с моим контекстным контролем. Если я не взаимодействую с формой, программа работает нормально.
Пример вызова:
DataStruct s;
byte[] buffer = new byte[512];
s.index = 0x03;
s.response = 0;
fixed (byte* pBuffer = buffer) s.addr = pBuffer;
System.Console.WriteLine(SendCommand(ref s));
Странная вещь, если отключить опцию оптимизации кода в моих свойствах проекта, программа прекрасно работает!
Что может случиться?
Благодарим за ответы. Как указал Слэкс, мой буфер собирался в мусор, и его строка кода исправила мои проблемы. Спасибо! – santiageitorx
Этого недостаточно, как указывает Майк, поскольку это не мешает GC перемещать массив. –
Да; ты прав. – SLaks