Interop - из CPP в С#
От: Riven  
Дата: 21.07.07 07:21
Оценка:
Всем доброго утра и удачных выходных!

Может, кто-нибудь сможет мне помочь.

Вкратце — мне нужно с помощью чужой 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 (про указатели структур).

Огромнейшее спасибо!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.