Announcement

Collapse
No announcement yet.

DLL-Funktion aufrufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DLL-Funktion aufrufen

    <html>

    <head>
    <meta http-equiv="Content-Type"
    content="text/html; charset=iso-8859-1">
    <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
    <title>Normale Seite ohne Titel</title>
    </head>

    <body bgcolor="#FFFFFF">

    <p>Hallo, im Delphi-Forum wurde gefragt, wie man eine Diskette
    formatieren kann. Den Tip von Andreas würde ich auch gern
    umsetzen, aber es funktioniert nicht. Was mache ich falsch ?
    Danke für jede Antwort !!</p>

    <pre>
    <font color="#008040">#define SHFMT_ID_DEFAULT 0xFFFF
    #define SHFMT_OPT_QUICKFORMAT 0x0000</font>
    <strong>void</strong> <strong>__fastcall</strong> TForm1:isketteformatieren1Click(TObject *Sender)
    {
    HINSTANCE hDllLib=LoadLibrary(<font color="#0000A0">&quot;shell32.dll&quot;</font>);
    <strong>long</strong> __stdcall FormatDrive;
    <strong>long</strong> x=-1;
    <strong>if</strong>((<strong>int</strong>)hDllLib&lt;32) Error(<font
    color="#0000A0">&quot;LoadLibrary fehlgeschlagen&quot;</font>);
    <strong>else</strong>
    {
    FormatDrive=(<strong>long __stdcall</strong>)GetProcAddress(hDllLib,<font
    color="#0000A0">&quot;SHFormatDrive&quot;</font>);
    <strong>if</strong>(FormatDrive!=NULL)
    <font color="#0000FF">x=FormatDrive(Handle,0,SHFMT_ID_DE FAULT, SHFMT_OPT_QUICKFORMAT);</font>
    <font color="#FF0000"><strong>// Compiler-Fehler: Call of nonfunction</strong></font>
    FreeLibrary(hDllLib);
    }
    <strong>if</strong>(x&lt;0) Error(<font color="#0000A0">&quot;Formatierung ist fehlgeschlagen&quot;</font>);
    <strong>else</strong> Info(<font color="#0000A0">&quot;Diskette erfolgreich formatiert&quot;</font>);
    <em>// Error() und Info() sind zwei Funktionen von mir, die eine MessageBox anzeigen</em>
    }
    </pre>
    </body>
    </html>
    Günther

  • #2
    Hallo Günter,

    ich habe mir deinen kleinen Quelltext eben heruntergeladen und werde ihn nachher bearbeiten. Ich schätze mal, das ich ihn so bringe, das es funktioniert. Ich kann aber nichts versprechen. Ich habe da so meine eigene Syntax für den import von Funktionen. Sie heute Abend noch mal hier hinein.

    Gruß Philip

    Comment


    • #3
      Hallo Günther,
      versuch mal folgenden Vorschlag:
      erst die Funktion FormatDrive deklarieren:<br>
      DWORD (*FormatDrive)(HWND Handle, unsigned int drive, unsigned int fmtId, unsigned int options);<br>
      und dann zuweisen:<br>
      (FARPROC)FormatDrive=GetProcAddress(hDllLib,"SHFor matDrive");

      Jetzt wie gewohnt FormatDrive(...) benutzen

      Gruß Thorste

      Comment


      • #4
        Hallo Thorsten,

        Dein Tip bringt einen vollkommen unverständlichen Compilerfehler auf den Plan:

        Extra parameter in call

        Die Anzahl der Parameter stimmt doch exakt überein !

        trotzdem Danke, jetzt liegen alle Hoffnungen auf Philipp
        Günther

        Comment


        • #5
          Hallo Günther,
          folgender Code funktioniert bei mir (BCB4.0):
          (z.B. in einer ButtonClick Funktion, defines wie in Deinem Beispiel

          HINSTANCE hDllLib=LoadLibrary("shell32.dll");<br>
          DWORD (*FormatDrive)(HWND Handle, unsigned int drive, unsigned int fmtId, unsigned int options);<br>

          long x=-1;<br>
          if((int)hDllLib<32) {}<br>

          else<br>
          {<br>

          (FARPROC)FormatDrive=GetProcAddress(hDllLib,"SHFor matDrive");<br>
          if(FormatDrive!=NULL)<br>
          x=FormatDrive(Handle,0,SHFMT_ID_DEFAULT, SHFMT_OPT_QUICKFORMAT);<br>
          FreeLibrary(hDllLib);<br>
          }<br>
          if(x<0){}<br>
          else {};<br>
          // Deine Error() und Info Funktionen sind entfernt!

          Gruß Thorsten

          P.S. Wie hast Du den Code in Deinem Beispiel so schön formatiert

          Comment


          • #6
            Hallo Thorsten, heißt das jetzt daß der BCB1.0 unfähig ist ? Danke auf jeden Fall für Deine Mühe !

            Die Textformatierung ist ganz einfach. Du brauchst einen Editor wie FrontPage oder den von Netscape, Word geht auch (als HTML speichern). Wenn Du den Quelltext reinkopiert hast, gehst Du in die HTML Ansicht und schreibst vor den Quelltext ein < pre > und hinter dem Block ein < /pre > Alle HTML-Tags dazwischen entfernen und die Einrückung verbessern. Dann zurück in die normale Editorsicht und die Schrift anpassen - ACHTUNG - Keine RETURN - Taste im Quelltext ! Zuletzt gehst Du in die HTML-Ansicht und kopierst alles in die Zwischenablage und dann in den Forum-Editor. Das wars. Viel Spaß dabei - Günthe
            Günther

            Comment


            • #7
              HI,

              ich hatte es auf meine Art mit dem C++ Builder 3 ausprobiert und hatte auch die Fehlermeldung das die Funktion nicht gefunden wurde.
              Bei mir konnte schonmal nicht die DLL geladen werden und deswegen konnte die Funktion auch nicht gefunden wurde. Ich habe geschriben:

              < pre >

              HINSTANCE dllhinst = LoadLibrary("shell32.dll");

              if (dllhinst)
              {
              Beep();
              MessageBox(Handle, "Dll konnte nicht geladen werden", "Fehler", MB_OK);
              }

              ...

              < /pre >

              Ich konnte den Fehler bislang nicht beheben.

              Gruß Philip

              Comment


              • #8
                Hallo Philipp, macht ja nichts. Danke für Deine Bemühungen. Ich werds ( gleich ? ) mal mit BC++5.02 ausprobieren.

                Übrigens, bei < pre > und < /pre > darfst Du die Leerzeichen NICHT abtippen !

                Gruß - Günthe
                Günther

                Comment


                • #9
                  Also, mit BC5.02 krieg ich zwar eine Warnung "call to function with no prototype", aber dann wird die Diskette formatiert. Der BC++Builder scheint wohl erst in Version 4.0 erwachsen zu sein
                  Günther

                  Comment

                  Working...
                  X