У меня следующая проблема:
Я занимаюсь разработкой приложения на 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));
Странная вещь, если я отключаю опцию оптимизации кода в свойствах моего проекта,программа работает нормально!
Что может случиться?