Я пытаюсь создать класс-оболочку из чистого C ++ SDK. Целью создания класса-оболочки является использование DLL в C # .NET или VB.NET для более простого программирования проекта winform. Некоторые функции в собственном SDK принимают функцию обратного вызова в качестве указателей на функции, и я не могу передать функцию-член моего управляемого класса.
Вот определение нативной функции.
long sr_enbhdlr(long ddd, unsigned long evt_type, long (*handler)(unsigned long param))
и вот мой C ++ управляемый код
#include "stdafx.h"
#include <windows.h>
#include <srllib.h>
#include <dxxxlib.h>
#include "SRL.h"
long Dialogic::SRL::dx_handler(unsigned long evhandle)
{
Debug::WriteLine("dx_handler() called, event is 0x%x\n", sr_getevttype(evhandle));
return(0); /* tell SRL to dispose of the event */
}
bool Dialogic::SRL::enableEventHandler() {
int SRLMode = SR_STASYNC | SR_POLLMODE;
if (sr_setparm(SRL_DEVICE, SR_MODELTYPE, &SRLMode) != 0) {
SRL::lastError = gcnew System::String(ATDV_ERRMSGP(SRL_DEVICE));
return(false);
}
/* Enable a handler for all events on all devices */
if (sr_enbhdlr(EV_ANYDEV, EV_ANYEVT, SRL::dx_handler) == -1)
{
Debug::WriteLine("Error: could not enable handler\n");
return (false);
}
return (true);
}
if (sr_enbhdlr(EV_ANYDEV, EV_ANYEVT, SRL::dx_handler) == -1)
Эта строка говорит, что «указатель на член недопустим для управляемого класса»