C # Wrapper und Callbacks

Ich bin dabei, einen C # -Wrapper für Dallmeier Common API light (Kamera- und Überwachungssysteme) zu schreiben, und ich habe noch nie einen Wrapper geschrieben, aber ich habe den Canon EDSDK C # -Wrapper verwendet. Daher verwende ich den Canon-Wrapper als Anleitung zum Schreiben des Dallmeier-Wrappers.

Ich habe derzeit Probleme beim Einschließen eines Rückrufs. Im API-Handbuch hat es Folgendes:

dlm_connect

int(unsigned long uLWindowHandle,   
    const char * strIP,  
    const char* strUser1,  
    const char* strPwd1,  
    const char* strUser2,  
    const char* strPwd2,   
    void (*callback)(void *pParameters, void *pResult, void *pInput),   
    void * pInput)  

Argumente
- ulWindowhandle - Handle des Fensters, das an das ViewerSDK übergeben wird, um dort Videos und Nachrichten anzuzeigen
- strUser1 / 2 - Name des Benutzers, der sich anmelden soll. Wenn nur die Einzelbenutzeranmeldung verwendet wird, ist strUser2
- NULL
- strPwd1 / 2 - Passwörter beider Benutzer. Wenn strUser2 NULL ist, wird strPwd2 ignoriert.

Rückkehr
Diese Funktion erstellt ein SessionHandle, das übergeben werden muss

Rückrufen
pParameter werden strukturiert:
- unsigned long ulFunctionID
- unsigned long ulSocketHandle, // Handle zum Socket der aufgebauten Verbindung
- unsigned long ulWindowHandle,
- int SessionHandle, // Sitzungshandle der erstellten Sitzung
- const char * strIP,
- const char * strUser1,
- const char * strPwd1,
- const char * strUser2,
- const char * strPWD2
pResult ist ein Zeiger auf eine Ganzzahl, die das Ergebnis der Operation darstellt. Null auf Erfolg. Negative Werte sind Fehlercodes.

Nach allem, was ich im Internet und im Stapelüberlauf gelesen habe, verwendet C # Delegaten zum Zweck von Rückrufen. Also erstelle ich eine Rückruffunktion:

public delegate uint DallmeierCallback(DallPparameters pParameters, IntPtr pResult, IntPtr pInput);

Ich erstelle die Verbindungsfunktion

[DllImport("davidapidis.dll")]
public extern static int dlm_connect(int ulWindowHandle, string strIP, string strUser1, string strPwd1, string strUser2, string strPwd2, DallmeierCallback inDallmeierFunc

Und (glaube ich) die DallPParameters als Struktur:

[StructLayout(LayoutKind.Sequential)]
public struct DallPParameters
{
  public int ulfunctionID;
  public int ulsocketHandle;
  public int ulWindowHandle;
  ...
}

All dies ist in meiner Wrapper-Klasse.
Gehe ich in die richtige Richtung oder ist das völlig falsch?
Dann habe ich in meiner Dallmeier-Klasse folgendes:

    private DallmeierAPI dallmeierAPI;  
    private DallmeierSDK.DallmeierCallback dallCallbackHandler;  
    private GCHandle handle;  
    private IntPtr pResult;  
    private IntPtr pInput;  

    internal Dallmeier()
    {
        this.dallmeierAPI = DallmeierAPI.Instance;

        registerEvents();
    }

    private void registerEvents()
    {
        // Register Callback Events
        dallCallbackHandler = new DallmeierSDK.DallmeierCallback(pParameters, pResult, pInput); // Error: Method Name expected

        handle = GCHandle.Alloc(dallCallbackHandler);
    }

    private void unregisterEvents()
    {
        handle.Free();
    }

    private DallmeierSDK.DallPParameters pParameters(int ulfunctionID, int ulSocketHandl, int ulWindowHandle, int SessionHandle, string strIP, string strUser1, string strPwd1, string strUser2, string strPwd)
    {
        // what goes in here : Error not all code paths return a value
    }


}

Wenn ich den Rückruf registriere, wird ein Methodenname erwartet?
und pParameters erwartet einen Rückgabewert?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage