Передача функции-члена управляемого класса в качестве указателя на неуправляемую функцию - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь создать класс-оболочку из чистого 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)

Эта строка говорит, что «указатель на член недопустим для управляемого класса»

...