Всем доброго утра и удачных выходных!
Может, кто-нибудь сможет мне помочь.
Вкратце — мне нужно с помощью чужой DLL зарегистрировать свою CALLBACK функцию, которую DLL будет вызывать.
Есть описание сишных структур (взято из заголовка к DLL, код написан не мной):
typedef struct tagDATA1
{
char tagDATA1_1[65];
char tagDATA1_2;
char tagDATA1_3;
char tagDATA1_4;
double tagDATA1_5;
int tagDATA1_6;
LPCSTR tagDATA1_7;
} DATA1, *P_DATA1;
typedef struct tagDATA2
{
int tagDATA2_1;
int tagDATA2_2;
char tagDATA2_3[65];
BOOL tagDATA2_4;
BOOL tagDATA2_5;
int tagDATA2_6;
int tagDATA2_7;
P_DATA1 tagDATA2_8;
DATA1 tagDATA2_9[1];
} DATA2, *P_DATA2;
Есть функция, регистрирующая мою CALLBACK функцию:
__declspec(dllimport) int RegisterCallback(int type, LPVOID pCallback);
Не знаю, что это, но похоже на описание CALLBACK функции:
typedef void (CALLBACK *P_ONDATA)(DATA2);
---
Мой код:
Сама CALLBACK функция:
class CDataLoader : public CObject
{
public: static void CALLBACK OnData(DATA2 data);
...
}
Собственно, ее передача в DLLку:
RegisterCallback(11, &CDataLoader::OnData);
Вопрос — как все то же самое перевести на .NET?
Т.е. с помощью .NET и InteropServices объявить структуры, callback функцию и зарегистрировать ее через DLL?
Знаю только, что копать надо в сторону делегатов (про callback) и IntPtr (про указатели структур).
Огромнейшее спасибо!!!