Добрый день, коллеги.
Есть сишное апи, такого вида:
typedef void (__stdcall *ReadDataCallback)(void* buf);
int Init(ReadDataCallback pFunction);
По вызову Init запускается некий цикл, переодически вызывающий колбек, и отдающий в него
указатель на массив постоянного и известного мне размера.
Мне надо использовать это апи из С#, для чего я описал интероп следующий образом:
public delegate void ReadDataCallback([MarshalAs(UnmanagedType.LPArray, SizeConst=1024)] byte[] buf);
[DllImport("SomeDll.dll", EntryPoint = "Init")]
public static extern int GeoInit(ReadDataCallback callback);
Данный способ не работает вполне хорошо — в рабочем проекте быстро вываливается исключение
NullReferenceException в безымянном потоке, стек которого отладчик показать не может.
В тестовой консольной программке все хорошо.
Подозреваю, что я неправильно описал интероп.
Идеи?