podczepienie niezarządzanego callbacka pod zarządzanego delegata

0

Mam funckję natywną:

class NativeFunctions
{		
	public:
		static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata);
}

void NativeFunctions::on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata)
{
...
}

Jak w zarządzanym kodzie:
public ref class PJSIPLib
{
public:
}
zrobić delegata do niezarządzanego natywnego callbacka on_incoming_call?

0

Wydaje mi się, że jest jakiś specjalny wrapper na to, ale możesz przecież zawsze podczepić zarządzany delegat, który wywoła niezarządzaną funkcję.

0

Czy jedynym wyjściem będzie napisanie czegoś takiego i opakowanie wszystkich struktur występujących w liście argumentów metod:

public ref class PJSIPLib
{        
        delegate void Del(pjsua_acc_id^ acc_id, pjsua_call_id^ call_id, array<pjsip_rx_data,1>^ rdata);
        void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata);
        Del ^d;
        public:  
        void inicjalizacja_gdzies_w_kodzie() 
        {
              PJSIPLib^a = gcnew PJSIPLib;
              d = gcnew Del(a, &PJSIPLib::on_incoming_call);
              void* unmanaged =(void *)Marshal::GetFunctionPointerForDelegate(d).ToPointer();            
              cfg.cb.on_incoming_call = unmanaged ;
        }

} 

Czy można jakoś inaczej? Nie bardzo chcę opakowywać struktury, więc jak jest inne wyjście to chciałbym się mu przyjrzeć.

0

Twoje fragmenty kodu są zazwyczaj zbyt… fragmentaryczne, do tego ciężko czytelne.
w C++/CLI można podać wskaźnik na funkcję… po prostu, nie trzeba kombinować z jakimś GetFunctionPointerForDelegate...

1 użytkowników online, w tym zalogowanych: 0, gości: 1