Laden...

c DLL aus Compact Framework mit Callback

Erstellt von sabre vor 19 Jahren Letzter Beitrag vor 19 Jahren 1.363 Views
S
sabre Themenstarter:in
3 Beiträge seit 2005
vor 19 Jahren
c DLL aus Compact Framework mit Callback

Ich habe hier eine native DLL und will nun aus meinem Code dort Funktionen aufrufen.
Das klappt auch alles ganz prima mit dem Interop, auch wenn ich hin und wieder raten musste welcher Datentyp wohl am ehesten funktioniert (Wieso gibt es im CF kein MarshalAs?), doch an dieser Funktion beisse ich mir die Zähne aus:

int HW_lineInitialize(LPVOID lpDummy, LPVOID lpCallback);

Die Dokumentation ist leider sehr schlecht. lpDummy ist "obsolete" und lpCallback ist eine Adresse zu einer Rückruffunktion.

Ich konnte dann auch eine passenden Definition finden wie diese ausehen soll:

typedef void (*PDACALLBACK)(DWORD,DWORD,LPSTR,DWORD,DWORD,LPVOID);

Mein letzter Code (nach etlichen anderen Versuchen):
_[DllImport("PDA.dll")]
private unsafe static extern int HW_lineInitialize(void* lpDummy, PDACALLBACK callback);

unsafe delegate void PDACALLBACK(short u1,short handle,string caller,short u2,short u3,void* dummy);

public unsafe void callback(short u1,short handle,string caller,short u2,short u3,void* dummy)
{
//++ Code here
}_

Beim Aufruf von
HW_lineInitialize(null, new PDACALLBACK(callback));
bekomme ich aber immer eine "System.NotSupportedException"

Für mich ist das ganze Aufrufen von nativem Code neu. Was muss ich anders machen?
Beim ersten Versuch benutzte ich int statt short.

S
sabre Themenstarter:in
3 Beiträge seit 2005
vor 19 Jahren

habe ne Lösung gefunden.

im CF gehen die Callbacks über delegaten nicht.
Aber bei OpenNETCF gibt es einen Thunk der es ermöglicht.
OpenNETCF.Callback (mus sman suchen ist noch nicht im Release)

Jetzt tut es ein :

_
Callback cb = CallbackFactory.AllocateCallback(this, "callbackFunc");
HW_lineInitialize(null, cb.CB);

[...]
public void callbackFunc(int u1,int handle,string caller,int u2,int u3,IntPtr dummy)_

aber bisher klappt die Anwendung noch zusammen beim Callback... weiss aber nicht ob ich da einfach nur ein Operand Mismatch oder nen fehlerhaftes Marshaling mache oder ob die DLL doch nicht so gut geht.

[edit]
ich weiß warum es bei mir nichtr geht. Die DLL funktioniert einfach nicht auf meinem Gerät, die gehtd erzeit noch nicht auf allen Geräten 🙁 ... so back to the drawing board[/edit]