Fehler beim übergeben von Paramtern in eine Funktion einer DLL



  • Meine Main wo ich die Funktion aufrufe:

    int test = 2;
    char dir[] = "C:\\";
    char file[] = "test.jpg";
    int q = 100;
    
    screenshot32(test, & dir[0], & file[0],q);
    

    Hier die addDLL.cpp

    int screenshot32 (int iSet, char *szDir, char *szFileName ,int iJPGQuality)
    {
        Tscreenshot32* screenshot32;
        int Erg;
        HINSTANCE h = LoadLibrary("screenshot.dll");
        if (h != 0)
            screenshot32 = (Tscreenshot32*)GetProcAddress(h, "_screenshot32");
        if (screenshot32 != NULL)
            Erg = screenshot32 (iSet,*szDir,*szFileName,iJPGQuality);
        else
            Erg = 0;
        FreeLibrary(h);
        return Erg;
    }
    

    Hier die addDLL.h

    typedef int Tscreenshot32 (int, char, char,int);
    int screenshot32 (int iSet, char *szDir, char *szFileName ,int iJPGQuality);
    

    Hier die DLL:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <windows.h>
    #include <jpeg.hpp>
    #pragma hdrstop
    #pragma argsused
    //---------------------------------------------------------------------------
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
       return 1;
    }
    //---------------------------------------------------------------------------
    extern "C" __declspec (dllexport)int screenshot32 (int iSet, char *szDir, char *szFileName ,int iJPGQuality)
    {
    
       char savefile[600]={0};
       strcat(savefile,szDir);
       strcat(savefile,szFileName);
       Application->MessageBoxA(savefile,"dsfsdfsd",MB_OK);
    
       //.... usw usw .....
    
       return 0;
    }
    

    Also die DLL wird aufgerufen den ich bekomme die

    Application->MessageBoxA(savefile,"dsfsdfsd",MB_OK);
    

    zusehen also klappt die komunikation. Leider spuckt meine MessageBoxA nur irgendwelche sonderzeichen raus do wo normal die savefile ausgegeben werden müsste. Jemand eine idee was da bei der übergabe der Parameter nicht klappt?

    gruß

    zyon



  • Was soll denn das für ein typedef sein? Da hast du dich gewaltig mit den Datentypen verknotet (die Funktion erwartet char*'s, da darfst du ihr keine blanken char's vorsetzen):

    typedef int Tsceen(int,char*,char*,int)
    
    int screenshot32(int iSet, char *szDir, char *szFileName ,int iJPGQuality)
    {
      TScreen* funct;
      int Erg;
      HINSTANCE h = LoadLibrary("screenshot.dll");
      if (h != 0)
        funct = (Tscreenshot32*)GetProcAddress(h, "_screenshot32");
      if (funct != NULL)
        Erg = funct(iSet,szDir,szFileName,iJPGQuality);
      else
        Erg = 0;
      FreeLibrary(h);
      return Erg;
    }
    

    (PS: Und der Compiler erlaubt dir wirklich, daß eine lokale Variable den selben Namen bekommt wie ihre Heimatfunktion?)



  • CStoll schrieb:

    Da hast du dich gewaltig mit den Datentypen verknotet

    Ohh ja habe ich auch grade gesehen.

    CStoll schrieb:

    (PS: Und der Compiler erlaubt dir wirklich, daß eine lokale Variable den selben Namen bekommt wie ihre Heimatfunktion?)

    Also ich habe es grade so stehen lassen und das ganze geht/ging!
    P.S: Im http://bcb-tutorial.c-plusplus.net/DLL_Tutorial/artikel5.html steht es auch so drin !

    gruß and have a nice day !

    zyon


Log in to reply