Wie der Titel schon verrät, ist es etwas kniffelig.
Ich habe eine C-DLL, die mir bis dato auch kaum Schwierigkeiten gemacht hat. Leider habe ich jetzt eine Funktion zu importieren, die wiederum eine Funktion als Parameter hat.
Die zu extrahierende Funktion reagiert auf ein vorher festgelegtes Event und ruft eine - selbst definierte - Funktion auf. Letztere wird als Zeiger übergeben.
Dummerweise habe ich keine Ahnung, wie ich das in C# realisiere.
Das sieht im C-Header so aus:
In einem C-Beispiel wird das folgendermaßen gelöst:
Bei mir hakts beim Import:
Nebenbei habe ich die Funktionen in einer eigenen Bibliothek hinterlegt, damit man darauf auch aus späteren C#-Projekten zugreifen kann. Somit ist die zu übergebende Funktion bzw. der Pointer darauf ja noch nicht fest...
Ich habe eine C-DLL, die mir bis dato auch kaum Schwierigkeiten gemacht hat. Leider habe ich jetzt eine Funktion zu importieren, die wiederum eine Funktion als Parameter hat.
Die zu extrahierende Funktion reagiert auf ein vorher festgelegtes Event und ruft eine - selbst definierte - Funktion auf. Letztere wird als Zeiger übergeben.
Dummerweise habe ich keine Ahnung, wie ich das in C# realisiere.
Das sieht im C-Header so aus:
Code:
typedef void (*FUNCTION)(_int32 /*Eventmaske*/, _uint8 * /*Daten*/);
_uint32 Event(
_uint32 hdl,
FUNCTION callback
);
In einem C-Beispiel wird das folgendermaßen gelöst:
Code:
result = Event(Handle, &myCallBack);
void myCallBack(_uint32 eventMask, _uint8 * data) {...}
Bei mir hakts beim Import:
Code:
[DllImport("beispiel.dll", EntryPoint = "Event")]
public static extern UInt32 RegisterEvent(UInt32 handle, /*was kommt hier rein*/);
Nebenbei habe ich die Funktionen in einer eigenen Bibliothek hinterlegt, damit man darauf auch aus späteren C#-Projekten zugreifen kann. Somit ist die zu übergebende Funktion bzw. der Pointer darauf ja noch nicht fest...
Zuletzt bearbeitet: