Probleme mit Wrapper - DLL



  • Ich habe mir eine Wrapper Dll für eine Siemens Dll geschrieben um die Kommunikation mit einer SPS zu beobachten, da habe Ich 2 Funktionen durch meine ersetzt!

    Das Problem ist das die Funktion SCP_open was loggt, nur die SCP_send schreibt nichts aus dem char* array c in das textfile.

    Was mache Ich falsch?

    // SCP_open
    extern "C" int __stdcall __E__9__(char* a)
    	{
    
    	 FILE* datei;
    	 datei = fopen("c:\\log.txt","a");
    	 fprintf(datei,"open: %s\r\n",a);
    	 fclose(datei);
    
         typedef int (__stdcall *pS)(char*);
         pS pps = (pS)p[9];
         int rv = pps(a);
    
         return rv;
    	}
    
    // SCP_send
    extern "C" int __stdcall __E__13__(int a, UWORD b, const  char* c)
    	{
    
    	 FILE* datei;
    	 datei = fopen("c:\\log.txt","a");
    	 fprintf(datei,"send: len: %i zeichen: %s\r\n",b,c);
    
    	 fclose(datei);
    
         typedef int (__stdcall *pS)(int, UWORD, char*);
         pS pps = (pS)p[13];
         int rv = pps(a, b, c);
    
         return rv;
    	}
    

  • Mod

    Da lässt sich so spontan nichts erkennen. Geh mal mit einem Debugger durch oder mach ein paar Debug-Ausgaben in SCP_send. Entweder wird die Funktion gar nicht aufgerufen oder es kann die Datei nicht geöffnet werden.



  • nee, er schreibt in scp_send schon auch was in die datei, nur nicht das was ich an scp_send übergebe!

    Ich glaube das problem ist das in der struct auch 0 end drin sein können.

    drum hab ichs dann so gemacht:
    (in parameter b steht die länge!)

    // SCP_send
    extern "C" int __stdcall __E__13__(int a, UWORD b, const  char* c)
    	{
    
    	 FILE* datei;
    	 datei = fopen("c:\\log.txt","a");
    	 fprintf(datei,"send: len: %i zeichen: ",b);
    	 char *g=c;
    	 for (int i=0;i<b;i++)
    	 {
    		fprintf(datei,"%c (%i)",*g,*g);
    		g++;
    	 }
    	 fprintf(datei,"\r\n",b);
    
    	 fclose(datei);
    
         typedef int (__stdcall *pS)(int, UWORD, char*);
         pS pps = (pS)p[13];
         int rv = pps(a, b, c);
    
         ret
    

    geht aber irgendwie auch nicht...



  • also, die werte welche an a und b übergeben werden scheinen zus timmen, auch die software welche meinen wrapper benutzt scheint noch zu komunizieren, nur das was ich in mein textfile schreibe scheint falsch zu sein...



  • Ich hab dir mal eine Handvoll cpp-Tags spendiert, demnächst bitte selber machen 😉

    Bist du sicher dass du im richtigen Forum bist? Das ist purer C-Code. Grade das Gefrickel mit den Funktionspointern und den C-casts aus dem p-Array raus (wo ist das überhaupt definiert?) sorgen bei mir grad für aufgerollte Fußnägel und schrillende Alarmglocken - du hast überhaupt keine Typsicherheit und da kann so in etwa alles mögliche passieren.

    Wie schon beschrieben wurde, hockst du dich am besten mit dem Debugger drauf und gehst schritt für schritt den Code durch und überprüfst ob er tut was du erwartest - bzw. ab wo er das nicht mehr tut.


Anmelden zum Antworten