Callback Win32 Dll



  • Hallo Leute,

    evtl. könnt ihr mir helfen, ich habe eine Win32 Dll in VS 2010 geschrieben welche in einem VB Programm geladen wird, auf den Quellcode des Programmes habe ich keinen Zugriff.

    Die Callbackfunktion funktioniert auch, solange ich diese aus dem Mainthread der DLL aufrufe. Sobald ich aber einen Thread erstelle (in dessen ein Loop läuft der den Status von bestimmter Hardware abfragt) und aus diesem die Callbackfunktion aufrufe stürzt das VB Programm ab.

    hier mal ein Aufruf

    ExecuteCallback("Interrupt","Befehl");
    

    und die Callbackfunktion

    long ExecuteCallback(const char* FuncName, const char* Para=" ",const int ParaLen=-1,const int Flags=0,const char* ReturnString= " ")
     {
     typedef long (__stdcall *FUNCPTR)(const char* a,const char* b,const int c,const int d, const char* e);
    
    		 FUNCPTR vbFunc=0;
    
    		 vbFunc = (FUNCPTR)CallbackAddress;     
    
    	return(vbFunc(FuncName,Para,ParaLen,Flags,ReturnString));
    }
    

    Die CallbackAddress ist egal ob diese vom Hauptthread aufgerufen wird oder vom Thread gleich.



  • Mounty schrieb:

    Die Callbackfunktion funktioniert auch, solange ich diese aus dem Mainthread der DLL aufrufe. Sobald ich aber einen Thread erstelle (in dessen ein Loop läuft der den Status von bestimmter Hardware abfragt) und aus diesem die Callbackfunktion aufrufe stürzt das VB Programm ab.

    Klingt als wär die VB Funktion eben nicht thread-safe. Lösung des Problems: Die VB Funktion thread-safe machen...

    Mounty schrieb:

    Die CallbackAddress ist egal ob diese vom Hauptthread aufgerufen wird oder vom Thread gleich.

    Klar, wieso sollte sich auch unterschiedlich sein? 😉



  • ok danke, das hatte ich befürchtet.
    Kann man nicht irgendwie einen Workaround basteln? z.B. sich in Prozess der Anwendung einklinken? (hooken)



  • Von wo aus genau willst du dich in den Prozess der Anwendung einklinken und was genau versprichst du dir davon!?



  • Hmm in den Messageloop einklinen, aber das würde wohl auch nichts bringen.

    Kann ich von meiner DLL aus etwas machen? Denn die *.ocx Erweiterungen funktioniert ja auch in VB welche eigene Threads erzeugen und Ereignisse auslösen.


Anmelden zum Antworten