Fehler beim Einbinden einer DLL- Funktion...



  • Hallo,

    ich möchte folgende Funktion in eine DLL auslagern (bereits erledigt):

    http://www.delphi-forum.de/viewtopic.php?t=33074&highlight=datei+l�schen
    (Delphi)
    So, der Funktionsaufruf soll ja so aussehen:
    DeleteFiles ('c:\test', '.', True);

    So schaut nun meine BCB- Variante zum Einbinden der DLL aus:

    typedef void (* DLLFUNCTION1PROC)(LPSTR message);   /* Zeiger auf exportierte Funktion */
    HMODULE delf;
        DLLFUNCTION1PROC pfnDllFunction1 = NULL;
    
        delf = LoadLibrary("delf.dll");
        if (delf == NULL) {
            MessageBeep(-1); /* DLL nicht im Pfad gefunden */
        }
        pfnDllFunction1 = (DLLFUNCTION1PROC)GetProcAddress(delf, "DeleteFiles");
        if (pfnDllFunction1 == NULL) {
            MessageBeep(-1);  /* Funktion nicht gefunden */
        }
    
        pfnDllFunction1("C:\test", "test.txt", TRUE);
        FreeLibrary(delf);
    

    Hier bekomme ich einen Fehler, dass zu viele Parameter im Funktionsaufruf vorhanden sind. Entferne ich "test.txt" und TRUE, bekomme ich eine Zugriffsverletzung bei 000000000 - wahrscheinlich wurden die Parameter halt nicht übernommen. Wie bekomme ich das hin, dass es richtig arbeitet?

    Gruß

    Roman



  • Du solltest vielleicht den Typen des Funktionspointers mit den Parametern definieren, die sie auch tatsächlich akzeptiert und nicht einfach mit irgendwas.



  • Hm... Ok... Ich habe leider kaum Erfahrungen mit DLLs... Wie meinst du könnte ich das sonst lösen?
    Ich habe relativ viel gegooglet und einige Delphi- Beispiele gefunden, die ich aber leider nicht in BCB VCL umschreiben konnte.



  • shaftie schrieb:

    typedef void (* DLLFUNCTION1PROC)(LPSTR message)

    Wie kommst du auf das "LPSTR message"?



  • Ich hatte das aus einem Beispiel. Vlt. habe ich da etwas übersehen gehabt?
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-284764.html

    Ich habe im Umgang mit dlls wirklich noch überhauptkeine Erfahrung. Das Erstellen der DLLs ist ja wunderbar einfach, aber das Aufrufen der Funktionen klappt noch nicht ganz... 😕



  • Du musst dort natürlich angeben, welche Parameter die Funktion tatsächlich akzeptiert. Willst du denn eine Delphi-Funktion aufrufen? AFAIK musst du da PChar verwenden und nicht String.


Anmelden zum Antworten