<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[DLL Funktion aus externer DLL einbinden zur Laufzeit]]></title><description><![CDATA[<p>Hallo,<br />
ich lese nun seit Stunden hier sämtliche DLL Beiträge, dazu Internet (Google)<br />
und bekomme es einfach nicht richtig hin:</p>
<p>ZIP Datei: sevZip32.dll (liegt mit im Programmordner)</p>
<p>In der main.cpp habe ich bei Auswahl eines Menüs (Datensicherung) folgendes stehen:</p>
<pre><code class="language-cpp">void __fastcall TForm1::Datensicherung1Click(TObject *Sender)
{AnsiString z1,ZipKey;Boolean o1;                                               // Vars definieren
 z1=PrgPfad+&quot;sevZip32.dll.dll&quot;;                                                 // Zip-Dateiname mit Pfad

 HINSTANCE ZipDll; ZipDll=LoadLibrary(z1.c_str());                              // DLL Laden
 if(ZipDll!=0) {                                                                // Laden der DLL hat nicht funktioniert
  ShowMessage(&quot;ZIP-Dll &gt;sevZip32.dll&lt; kann nicht geladen werden!?\r\rDie ZIP-Funktionen stehen nicht zur Verfügung.&quot;);
 }                                                                              // ende if(ZipDll
 else {                                                                         // DLL wurde geladen
  ShowMessage(&quot;ZIP-DLL erfolgreich geladen&quot;);                                   // Info geben
  ZipKey=ReverseString(&quot;1234-5678-1234-5678&quot;);                                  // Key für sevZip32.dll (ist gespiegelt)

  void (__stdcall* ZipInit)(String);                                            //
  ZipInit         =(void(__stdcall*)(String)) GetProcAddress(ZipDll,&quot;_InitZIP&quot;);// ZIP DLL initialisieren

  void (__stdcall* ZipLanguage)(int);                                             //
  ZipLanguage     =(void(__stdcall*)(int))  GetProcAddress(ZipDll,&quot;_SetLanguage&quot;);// ZIP DLL Sprache setzen
  void (__stdcall* ZipCompression)(int);                                          //
  ZipCompression  =(void(__stdcall*)(int))  GetProcAddress(ZipDll,&quot;_SetCompressionRate&quot;);// ZIP DLL Compressionsrate einstellen
  void (__stdcall* ZipAddFile)(int);                                              //
  ZipAddFile       =(void(__stdcall*)(int)) GetProcAddress(ZipDll,&quot;_ZipAddFile&quot;); // ZIP DLL File mitpacken
  void (__stdcall* ZipCancel)();                                                  //
  ZipCancel        =(void(__stdcall*)())    GetProcAddress(ZipDll,&quot;_CancelZip&quot;);  // ZIP DLL Funktion abbrechen
  void (__stdcall* ZipFolderLocation)(int);                                       //
  ZipFolderLocation=(void(__stdcall*)(int)) GetProcAddress(ZipDll,&quot;_SaveFolderLocation&quot;); // ZIP DLL Welchen Pfad pro Datei mitsichern (leer=mit vollem Pfad zippen)

  o1=ZipInit(ZipKey);                                                           // initialisieren
  if(o1==false) {                                                               // nicht ok
   ShowMessage(&quot;ZIP-Funktionen können nicht initialisiert werden!?&quot;);           // Info geben
   return;                                                                      // und raus
  }                                                                             // ende if(o1

  ZipLanguage(1);                                                               // Deutsch (1), Englisch (0)
  ZipCompression(6);                                                            // Kompressionsrat 0 (keine)....9(langsam!), 6 = Standard
  ZipFolderLocation(&quot;&quot;);                                                        // kompletten Pfad immer mitsichern

// ... hier das ZIPPEN noch einbinden

  FreeLibrary(ZipDll);                                                          // und DLL wieder freigeben
 }                                                                              // ende else()

}
</code></pre>
<p>Im Header der main.cpp habe ich folgendes (erstmal zum Testen nur die<br />
erste Funktion ZIP Init):</p>
<pre><code class="language-cpp">public:
  typedef bool ZipInit(String pt1);                                              // ZIP DLL Funktion
</code></pre>
<p>Bekomme beim Start aber immer die Meldung &quot;Kein zulässiger Typ&quot;<br />
und der BCB verweist auf die Zeile o1=ZipInit(ZipKey);<br />
Habe schon alles möglich probiert und bekomme es nicht hin.<br />
Wo mache ich hier den Denkfehler??? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Danke für jeden Hinweis; drehe mich scheinbar im Kreis.</p>
<p>Gruss, Stefan Scholz</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/125619/dll-funktion-aus-externer-dll-einbinden-zur-laufzeit</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 23:37:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/125619.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Nov 2005 07:29:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 07:29:00 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich lese nun seit Stunden hier sämtliche DLL Beiträge, dazu Internet (Google)<br />
und bekomme es einfach nicht richtig hin:</p>
<p>ZIP Datei: sevZip32.dll (liegt mit im Programmordner)</p>
<p>In der main.cpp habe ich bei Auswahl eines Menüs (Datensicherung) folgendes stehen:</p>
<pre><code class="language-cpp">void __fastcall TForm1::Datensicherung1Click(TObject *Sender)
{AnsiString z1,ZipKey;Boolean o1;                                               // Vars definieren
 z1=PrgPfad+&quot;sevZip32.dll.dll&quot;;                                                 // Zip-Dateiname mit Pfad

 HINSTANCE ZipDll; ZipDll=LoadLibrary(z1.c_str());                              // DLL Laden
 if(ZipDll!=0) {                                                                // Laden der DLL hat nicht funktioniert
  ShowMessage(&quot;ZIP-Dll &gt;sevZip32.dll&lt; kann nicht geladen werden!?\r\rDie ZIP-Funktionen stehen nicht zur Verfügung.&quot;);
 }                                                                              // ende if(ZipDll
 else {                                                                         // DLL wurde geladen
  ShowMessage(&quot;ZIP-DLL erfolgreich geladen&quot;);                                   // Info geben
  ZipKey=ReverseString(&quot;1234-5678-1234-5678&quot;);                                  // Key für sevZip32.dll (ist gespiegelt)

  void (__stdcall* ZipInit)(String);                                            //
  ZipInit         =(void(__stdcall*)(String)) GetProcAddress(ZipDll,&quot;_InitZIP&quot;);// ZIP DLL initialisieren

  void (__stdcall* ZipLanguage)(int);                                             //
  ZipLanguage     =(void(__stdcall*)(int))  GetProcAddress(ZipDll,&quot;_SetLanguage&quot;);// ZIP DLL Sprache setzen
  void (__stdcall* ZipCompression)(int);                                          //
  ZipCompression  =(void(__stdcall*)(int))  GetProcAddress(ZipDll,&quot;_SetCompressionRate&quot;);// ZIP DLL Compressionsrate einstellen
  void (__stdcall* ZipAddFile)(int);                                              //
  ZipAddFile       =(void(__stdcall*)(int)) GetProcAddress(ZipDll,&quot;_ZipAddFile&quot;); // ZIP DLL File mitpacken
  void (__stdcall* ZipCancel)();                                                  //
  ZipCancel        =(void(__stdcall*)())    GetProcAddress(ZipDll,&quot;_CancelZip&quot;);  // ZIP DLL Funktion abbrechen
  void (__stdcall* ZipFolderLocation)(int);                                       //
  ZipFolderLocation=(void(__stdcall*)(int)) GetProcAddress(ZipDll,&quot;_SaveFolderLocation&quot;); // ZIP DLL Welchen Pfad pro Datei mitsichern (leer=mit vollem Pfad zippen)

  o1=ZipInit(ZipKey);                                                           // initialisieren
  if(o1==false) {                                                               // nicht ok
   ShowMessage(&quot;ZIP-Funktionen können nicht initialisiert werden!?&quot;);           // Info geben
   return;                                                                      // und raus
  }                                                                             // ende if(o1

  ZipLanguage(1);                                                               // Deutsch (1), Englisch (0)
  ZipCompression(6);                                                            // Kompressionsrat 0 (keine)....9(langsam!), 6 = Standard
  ZipFolderLocation(&quot;&quot;);                                                        // kompletten Pfad immer mitsichern

// ... hier das ZIPPEN noch einbinden

  FreeLibrary(ZipDll);                                                          // und DLL wieder freigeben
 }                                                                              // ende else()

}
</code></pre>
<p>Im Header der main.cpp habe ich folgendes (erstmal zum Testen nur die<br />
erste Funktion ZIP Init):</p>
<pre><code class="language-cpp">public:
  typedef bool ZipInit(String pt1);                                              // ZIP DLL Funktion
</code></pre>
<p>Bekomme beim Start aber immer die Meldung &quot;Kein zulässiger Typ&quot;<br />
und der BCB verweist auf die Zeile o1=ZipInit(ZipKey);<br />
Habe schon alles möglich probiert und bekomme es nicht hin.<br />
Wo mache ich hier den Denkfehler??? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Danke für jeden Hinweis; drehe mich scheinbar im Kreis.</p>
<p>Gruss, Stefan Scholz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911368</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Tue, 08 Nov 2005 07:29:00 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 07:34:29 GMT]]></title><description><![CDATA[<p>Was willst du mit dem Typedef? Ist dir klar, dass du in Datensicherung1Click eine lokale Variable hast, die genauso heißt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911375</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 08 Nov 2005 07:34:29 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 07:37:29 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void (__stdcall* ZipInit) (String);
</code></pre>
<p>gehört nicht in die funktion sondern in den header!</p>
<pre><code class="language-cpp">// header myzip.h
typedef void (*PFUN_ZIPINIT) (String);
PFUN_ZIPINIT ZipInit;
//... weitere
</code></pre>
<pre><code class="language-cpp">// deine main.cpp

//... lib laden
HINSTANCE Lib = ::LoadLibrary(&quot;ziplib.dll&quot;);

if (Lib)
{
  ZipInit = (PFUN_ZIPINIT) ::GetProcAddress(Lib, &quot;_ZipInit &quot;);
  //... weitere
}
</code></pre>
<p>entweder gehts so, oder das __stdcall fehl noch... weiss grad nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911376</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Tue, 08 Nov 2005 07:37:29 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 11:11:35 GMT]]></title><description><![CDATA[<p>Habe die Änderungen vorgenommen und erhalte nach wie vor die Meldung mit dem Typ</p>
<p>im Header Main.h habe ich jetzt:</p>
<pre><code class="language-cpp">public:
  typedef void(*dll_ZipInit) (String);                                           // ZIP DLL Funktion
  dll_ZipInit ZipInit;
 typedef void(*dll_ZipLanguage) (int);                                          // ZIP DLL Funktion
  dll_ZipLanguage ZipLanguage;
</code></pre>
<p>In der Main.cpp habe ich jetzt:</p>
<pre><code class="language-cpp">void __fastcall TForm1::Datensicherung1Click(TObject *Sender)
{AnsiString z1,ZipKey;Boolean o1;                                               // Vars definieren
 z1=PrgPfad+&quot;sevZip32.dll.dll&quot;;                                                 // ZIp-Dateiname mit Pfad

 HINSTANCE ZipDll=::LoadLibrary(z1.c_str());                                    // DLL Laden
 if(ZipDll!=0) {                                                                // nicht funktioniert
  ShowMessage(&quot;ZIP-Dll &gt;sevZip32.dll&lt; kann nicht geladen werden!?\r\rDie ZIP-Funktionen stehen nicht zur Verfügung.&quot;);
 }                                                                              // ende if(ZipDll
 else {                                                                         // DLL wurde geladen
  ShowMessage(&quot;ZIP-DLL erfolgreich geladen&quot;);                                   // Info geben
  ZipKey=ReverseString(&quot;1234-56786-1234-5678&quot;);                                  // Key für sevZip32.dll (ist gespiegelt)

  ZipInit         =(dll_ZipInit)    ::GetProcAddress(ZipDll,&quot;_InitZIP&quot;);        // ZIP DLL initialisieren
  ZipLanguage     =(dll_ZipLanguage)::GetProcAddress(ZipDll,&quot;_SetLanguage&quot;);    // ZIP DLL Sprache setzen

  //void (__stdcall* ZipCompression)(int);                                          //
  //ZipCompression  =(void(__stdcall*)(int))  GetProcAddress(ZipDll,&quot;_SetCompressionRate&quot;);// ZIP DLL Compressionsrate einstellen
  //void (__stdcall* ZipAddFile)(int);                                              //
  //ZipAddFile       =(void(__stdcall*)(int)) GetProcAddress(ZipDll,&quot;_ZipAddFile&quot;); // ZIP DLL File mitpacken
  //void (__stdcall* ZipCancel)();                                                  //
  //ZipCancel        =(void(__stdcall*)())    GetProcAddress(ZipDll,&quot;_CancelZip&quot;);  // ZIP DLL Funktion abbrechen
  //void (__stdcall* ZipFolderLocation)(int);                                       //
  //ZipFolderLocation=(void(__stdcall*)(int)) GetProcAddress(ZipDll,&quot;_SaveFolderLocation&quot;); // ZIP DLL Welchen Pfad pro Datei mitsichern (leer=mit vollem Pfad zippen)

  o1=ZipInit(ZipKey);                                                           // initialisieren
  //void (__stdcall* ZipInit) (ZipKey);
  o1=true;
  if(o1==false) {                                                               // nicht ok
   ShowMessage(&quot;ZIP-Funktionen können nicht initialisiert werden!?&quot;);           // Info geben
   return;                                                                      // und raus
  }                                                                             // ende if(o1

  ZipLanguage(1);                                                               // Deutsch (1), Englisch (0)
  //ZipCompression(6);                                                            // Kompressionsrat 0 (keine)....9(langsam!), 6 = Standard
  //ZipFolderLocation(&quot;&quot;);                                                        // kompletten Pfad immer mitsichern

  FreeLibrary(ZipDll);                                                          // und DLL wieder freigeben
 }                                                                              // ende else()

}
</code></pre>
<p>Bitte möglichst genaue Angaben machen; mir ist einfach nicht klar,<br />
wie die DLL Funktionen eingebunden werden müssen.</p>
<p>Liegt das Problem vielleicht an der Parameterübergabe String???<br />
Lass ich das ZipInit weg, meckert er zumindest nicht an den anderen<br />
3 Aufrufen wie ZipLanguage(1);</p>
<p>Danke und Gruss, Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911392</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Tue, 08 Nov 2005 11:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 08:23:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Was soll denn das hier:</p>
<pre><code class="language-cpp">o1=ZipInit(ZipKey);
</code></pre>
<p>ZipInit ist eine void-Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911415</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 08 Nov 2005 08:23:07 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 08:32:01 GMT]]></title><description><![CDATA[<p>Hallo, Braunstein</p>
<p>Ich ging davon aus, daß der Aufruf so korrekt ist (irgendwie muss<br />
ich doch auch den Rückgabewert o1 (Boolean) erhalten..?<br />
Wie ist es denn korrekt?</p>
<p>Wenn ich es im Header so abändere:</p>
<pre><code class="language-cpp">typedef bool(*dll_ZipInit) (String);                                           // ZIP DLL Funktion
  dll_ZipInit ZipInit;
 typedef int(*dll_ZipLanguage) (int);                                          // ZIP DLL Funktion
  dll_ZipLanguage ZipLanguage;
</code></pre>
<p>dann erhalte ich bei Aufruf der Menüfunktion<br />
Zugriffsverletzung bei Adresse 0000000000 ...</p>
<p>MfG Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911427</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Tue, 08 Nov 2005 08:32:01 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 08:36:04 GMT]]></title><description><![CDATA[<p>Ich kenne die Signatur von ZipInit nicht, weiß also nicht was hier korrekt ist. Überprüfst doch bitte mal die Pointer die dir GetProcAddress zurückliefert auf Gültigkeit bevor du die Funktionen aufrufst.<br />
Was ist eigentlich Boolean bei dir, ein typedef?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911434</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 08 Nov 2005 08:36:04 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 08:43:14 GMT]]></title><description><![CDATA[<p>Hei, Braunstein</p>
<p>in einer anderen Programmiersprache (GB32) geht die ZIP mit (unter anderem)<br />
diesen Aufrufen einwandfrei:</p>
<pre><code>Declare Function InitZip     Lib &quot;sevZip32.dll&quot; _(ByVal sInit As String)   As Boolean   // ZipLanguage 
 Declare Function SetLanguage Lib &quot;sevZip32.dll&quot; _(ByVal nLanguage As Long)              // Zip/Unzip-Funktionen
</code></pre>
<p>Von daher weiss ich also, das in der Zip sevZip32.dll die Aufrufe wie InitZip<br />
mit Rückgabe Boolean (false, true) vorhanden ist und als Übergabeparameter einen String übergebe (bzw. Adresse des String)</p>
<p>Genau dies möchte ich nun im BCB6 ausführen (siehe Code oben)</p>
<p>Daher im Header die typedef bool (...) und in der Main.cpp das Laden der DLL und dann mit GetProcAdress() die Funktion definieren. Aber irgendwas fehlt bzw. ist falsch...?</p>
<p>MfG Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911438</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Tue, 08 Nov 2005 08:43:14 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 08:48:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">z1=PrgPfad+&quot;sevZip32.dll.dll&quot;;
</code></pre>
<p>müsste das nicht &quot;sevZip32.dll&quot; heißen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911447</guid><dc:creator><![CDATA[.dll.dll?]]></dc:creator><pubDate>Tue, 08 Nov 2005 08:48:48 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 08:53:05 GMT]]></title><description><![CDATA[<p>Keine Ahnung ob das überhaupt geht. Wer sagt dir denn, dass String in deiner dll identisch mit String (typedef auf AnsiString) beim BCB ist? Schau doch mal mit impdef aus dem BCB\bin-Verzeichnis nach, wie da die Signatur lautet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911448</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 08 Nov 2005 08:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 09:32:37 GMT]]></title><description><![CDATA[<p>Hei, @unbekannte<br />
Danke für den Hinweis mit .dll.dll , ändert aber nix an den Meldungen</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>:<br />
mit impdef erhalte ich</p>
<pre><code>LIBRARY     SEVZIP32.DLL

EXPORTS
    CancelZip                      @14  ; CancelZip
    InitZip                        @15  ; InitZip
    SaveFolderLocation             @1   ; SaveFolderLocation
    SetCompressionRate             @13  ; SetCompressionRate
    SetLanguage                    @12  ; SetLanguage
    UnZip                          @6   ; UnZip
    UnZipEx                        @4   ; UnZipEx
    ZipAddFile                     @9   ; ZipAddFile
    ZipDeleteFile                  @8   ; ZipDeleteFile
    ZipFile                        @10  ; ZipFile
    ZipFileCount                   @2   ; ZipFileCount
    ZipFileInfo                    @3   ; ZipFileInfo
    ZipFolder                      @7   ; ZipFolder
    ZipFolderEx                    @5   ; ZipFolderEx
    ZipProgress                    @11  ; ZipProgress
</code></pre>
<p>Was soll ich daraus erkennen können?</p>
<p>Der Hersteller der DLL hat z.B. für Borland Delphi folgendes eingetragen:</p>
<pre><code>Beschreibung
Bevor Sie die ZIP-Funktionen verwenden können, muss die DLL initialisiert werden. Die Initialisierung erfolgt über die InitZip-Funktion.

Syntax:

LONG InitZip(
  LPCTSTR sInit
);
Parameter
  sInit: Gültiger Registrierschlüssel oder Leere Zeichenfolge um die Shareware-Version zu testen. 

Rückgabewert
  TRUE: Initialisierung war erfolgreich 
  FALSE: Initialisierung fehlgeschlagen
</code></pre>
<pre><code>{ Deklaration der Funktionen }
{ Allgemeine Funktionen }
function InitZip(sInit: PChar): Integer; stdcall; external 'sevZip32.dll';

procedure SetLanguage(nLanguage: Integer); stdcall; external 'sevZip32.dll';
</code></pre>
<p>Verstehe langsam nichts mehr... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911502</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Tue, 08 Nov 2005 09:32:37 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 10:00:59 GMT]]></title><description><![CDATA[<p>Na da hast du doch deine Signatur.<br />
LPCTSTR entspricht einem const char*. Du kannst den Typ natürlich auch direkt verwenden. Für LONG kannst du long verwenden.<br />
Also</p>
<pre><code class="language-cpp">typedef long(*dll_ZipInit) (const char*);                                           // ZIP DLL Funktion
dll_ZipInit ZipInit;
ZipInit = reinterpret_cast&lt;dll_ZipInit&gt;(::GetProcAddress(ZipDll,&quot;_InitZIP&quot;));
if( ZipInit == 0 )
{
// Fehlerbehandlung
}
// und dann später
o1=ZipInit(ZipKey.c_str());
</code></pre>
<p>sollte eigentlich gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911538</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 08 Nov 2005 10:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 10:19:12 GMT]]></title><description><![CDATA[<p>...aber jetzt bekomme ich auf ZipInit immer 0 zurück; also</p>
<pre><code class="language-cpp">ZipInit=reinterpret_cast&lt;dll_ZipInit&gt;(::GetProcAddress(ZipDll,&quot;_InitZIP&quot;));
  if(ZipInit==0) {
   FreeLibrary(ZipDll);                                                          // und DLL wieder freigeben
   ShowMessage(&quot;Funktion kann nicht deklariert werden!\r\r=&gt; ZipInit&quot;);
   return;
  }
</code></pre>
<p>bringt Null. ??</p>
<p>Das hier habe ich in den Public Bereich (Header main.h) reingesetzt:</p>
<pre><code class="language-cpp">public: 
 typedef long(*dll_ZipInit) (const char*);                             // ZIP DLL Funktion
 dll_ZipInit ZipInit;
</code></pre>
<p>Also ich kapiere nicht, warum die Einbindung von DLL Funktionen in anderen<br />
Sprachen wie VBasic, GB32, Delphi usw. wesentlich leichter ist wie scheinbar<br />
im BCB6 (bin ja erst seit ein paar Wochen umgestiegen).??</p>
<p>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911576</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Tue, 08 Nov 2005 10:19:12 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 10:30:47 GMT]]></title><description><![CDATA[<p>Wenn der Pointer 0 ist, hat GetProcAddress die Funktion nicht in der dll gefunden.<br />
Lass doch mal den Unterstrich vor InitZip in der GetProcAddress weg (werden von ImpDef ja auch nicht angezeigt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911593</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 08 Nov 2005 10:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 10:53:31 GMT]]></title><description><![CDATA[<p>Hei,<br />
nicht der _ war das Problem, sondern der Schreibfehler<br />
InitZIP statt korrekt InitZip !!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Hier eine funktionsfähige Routine für alle verzweifelten DLL-Einbinder:<br />
DLL ist im Programmpfad (PrgPfad) die Datei: sevZip32.dll</p>
<p>Es muss KEINE Eintragung im Header gemacht werden; die DLL wird wenn<br />
benötigt geladen und anschließend wieder freigegeben:</p>
<pre><code class="language-cpp">void __fastcall TForm1::Datensicherung1Click(TObject *Sender)
{AnsiString z1,ZipKey;Boolean o1;int i1,i2;                                     // Vars definieren
 z1=PrgPfad+&quot;sevZip32.dll&quot;;                                                     // ZIp-Dateiname mit Pfad

 HINSTANCE ZipDll=::LoadLibrary(z1.c_str());                                    // DLL Laden
 if(ZipDll==0) {                                                                // nicht funktioniert
  ShowMessage(&quot;ZIP-Dll &gt;sevZip32.dll&lt; kann nicht geladen werden!?\r\rDie ZIP-Funktionen stehen nicht zur Verfügung.&quot;);
 }                                                                              // ende if(ZipDll
 else {                                                                         // DLL wurde geladen
  ShowMessage(&quot;ZIP-DLL erfolgreich geladen&quot;);                                   // Info geben
  ZipKey=ReverseString(&quot;1234-5678-1234-5678&quot;);                                  // Key für sevZip32.dll (ist gespiegelt)

  typedef bool(*dll_ZipInit)     (const char*);  dll_ZipInit     ZipInit;       // Funktion vorbereiten
  typedef void(*dll_ZipLanguage) (int);          dll_ZipLanguage ZipLanguage;   // Funktion vorbereiten
  typedef  int(*dll_ZipCompress) (int);          dll_ZipCompress ZipCompress;   // Funktion vorbereiten
  typedef void(*dll_ZipLocation) (const char*);  dll_ZipLocation ZipLocation;   // Funktion vorbereiten
  typedef void(*dll_ZipAddFile)  (const char*);  dll_ZipAddFile  ZipAddFile;    // Funktion vorbereiten

  ZipInit    =reinterpret_cast&lt;dll_ZipInit&gt;    (::GetProcAddress(ZipDll,&quot;InitZip&quot;));
  if(ZipInit==NULL) {                                                           // Funktion zur Intialisierung nicht gefunden in DLL
   FreeLibrary(ZipDll);                                                         // und DLL wieder freigeben
   ShowMessage(&quot;Funktion kann nicht deklariert werden!\r\r=&gt; ZipInit&quot;);         // Meldung geben
   return;                                                                      // ende if(ZipInit
  }
                                                                                // restlichen Funktionen deklarieren
  ZipLanguage=reinterpret_cast&lt;dll_ZipLanguage&gt;(::GetProcAddress(ZipDll,&quot;SetLanguage&quot;));
  ZipCompress=reinterpret_cast&lt;dll_ZipCompress&gt;(::GetProcAddress(ZipDll,&quot;SetCompressionRate&quot;));
  ZipLocation=reinterpret_cast&lt;dll_ZipLocation&gt;(::GetProcAddress(ZipDll,&quot;SaveFolderLocation&quot;));
  ZipAddFile =reinterpret_cast&lt;dll_ZipAddFile&gt; (::GetProcAddress(ZipDll,&quot;ZipAddFile&quot;));

  o1=ZipInit(ZipKey.c_str());                                                   // Key initialisieren
  if(o1==false) {                                                               // nicht ok
   ShowMessage(&quot;ZIP-Funktion kann mit Key nicht initialisiert werden!?&quot;);       // Info geben
   return;                                                                      // und raus
  }                                                                             // ende if(o1

  i1=1;i2=6;z1=&quot;&quot;;                                                              // Vars vorlegen
  ZipLanguage(i1);                                                              // Deutsch (1), Englisch (0)
  ZipCompress(i2);                                                              // Kompressionsrat 0 (keine)....9(langsam!), 6 = Standard
  ZipLocation(z1.c_str());                                                      // kompletten Pfad immer mitsichern  (&quot;&quot;=Pfadangaben mit Zippen)

  // ... hier jetzt ZIP Funktionen noch ausführen ...//

  FreeLibrary(ZipDll);                                                          // und DLL wieder freigeben
 }                                                                              // ende else()

}
</code></pre>
<p>Danke, Braunstein für Deine Hilfe!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Gruss Stefan Scholz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911622</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Tue, 08 Nov 2005 10:53:31 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 11:03:09 GMT]]></title><description><![CDATA[<p>Den Tipp von Braunstein möchte ich noch ergänzen:</p>
<p>Zum Aufspüren der Funktionen einer DLL findet man im Ordner</p>
<p>\cbuilder6\bin\impdef.exe</p>
<p>Diese muss auf der Shell Ebene (Command) wie folgt aufgerufen werden:</p>
<pre><code>c:\cbuilder6\bin\&gt; impdef.exe c:\temp\funktionen.def c:\test\sevZip32.dll
</code></pre>
<p>Hoffe das hilft vielen weiter ...</p>
<p>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911635</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Tue, 08 Nov 2005 11:03:09 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 14:19:40 GMT]]></title><description><![CDATA[<p>Stefan7124 schrieb:</p>
<blockquote>
<p>Es muss KEINE Eintragung im Header gemacht werden; die DLL wird wenn<br />
benötigt geladen und anschließend wieder freigegeben:</p>
</blockquote>
<p>ARGS... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>so wie du das machst, ist das auf keinen fall zu empfehlen! denn ausserhalb deiner funktionen sind die zip-funktionen dann nicht mehr existent und wenn jemand das nachvollziehen will, hat er ganz schnell wieder ein problem...</p>
<p>man holt sich auch nicht jedesmal wenn man ne datei zippen will (frag mich schon die ganze zeit, woher die zip.dll ist?) die funktionen wieder neu aus der dll, sondern führt das einmal bei programmstart durch. wenn du das sauber in nen extra-header legst, kannst du das ganze spielend leicht in weiteren projekten wiederverwenden! aber so ist es einfach nur mist!</p>
<p>und statt eines sinnlosen aufrufes von <strong>ReverseString(&quot;1234-5678-1234-5678&quot;)</strong> kannste gleich &quot;8765-4321-8765-4321&quot; schreiben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911807</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Tue, 08 Nov 2005 14:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 14:42:09 GMT]]></title><description><![CDATA[<pre><code>so wie du das machst, ist das auf keinen fall zu empfehlen! denn ausserhalb deiner funktionen sind die zip-funktionen dann nicht mehr existent
und wenn jemand das nachvollziehen will, hat er ganz schnell wieder ein problem...
</code></pre>
<p>Das sehe ich ein doch anders; die ZIP Funktion wird alle Jubeljahre nur zum zippen gebraucht; wofür soll sie bitte ausserhalb der Funktionen verfügbar sein? Ich brauche sie sonst nirgends. Für einen Newbie ist das Beispiel jedenfalls übersichtlicher als die 'Zerstückelung' in Header, cpp usw. Und das tolle daran: Es funktioniert!</p>
<pre><code>man holt sich auch nicht jedesmal wenn man ne datei zippen will (frag mich schon die ganze zeit, woher die zip.dll ist?)
</code></pre>
<p>Zum Zippen/Entzippen!<br />
Diese sevZip32.dll ist zu kaufen und ein prima Werkzeug für alle Programmierer...</p>
<pre><code>die funktionen wieder neu aus der dll, sondern führt das einmal bei programmstart durch. wenn du das sauber in nen extra-header legst, kannst du das ganze
spielend leicht in weiteren projekten wiederverwenden! aber so ist es einfach nur mist!
</code></pre>
<p>Danke für den Kommnetar; wie oben erwähnt wird die Funktion alle Jubeljahre benötigt; von verschwenderischen Speicherbedarf heutiger Programme halte ich nicht viel.<br />
Übrigens bin ich noch am lernen und daher vielleicht noch nicht soweit wie Du.</p>
<pre><code>und statt eines sinnlosen aufrufes von ReverseString(&quot;1234-5678-1234-5678&quot;) kannste gleich &quot;8765-4321-8765-4321&quot; schreiben!
</code></pre>
<p>Die Zahlen korrekt reinzuschreiben mag logisch sein, sie in einer EXE Datei als Lizenzcode gedreht reinzuschreiben auch. Es gibt nämlich eine Menge Leute auf diesem Planeten, die nichts besseres zu tun haben, als Lizenzschlüssel zu knacken, auszulesen usw. und nichts ist leichter, als ein Zahlenschlüssel im Reinformat in einer EXE Datei aufzufinden (der obige Schlüssel ist natürlich nicht echt).</p>
<p>Grüsse Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911830</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Tue, 08 Nov 2005 14:42:09 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 14:49:59 GMT]]></title><description><![CDATA[<p>Sunday schrieb:</p>
<blockquote>
<p>so wie du das machst, ist das auf keinen fall zu empfehlen! denn ausserhalb deiner funktionen sind die zip-funktionen dann nicht mehr existent und wenn jemand das nachvollziehen will, hat er ganz schnell wieder ein problem...</p>
</blockquote>
<p>Die Funktionszeiger sind außerhalb auch nicht sichtbar, so dass eigentlich kein Problem entsteht.<br />
Man könnte das Ganze auch in eine Klasse kapseln. Das Laden der dll dann im Konstruktor oder (besser) beider ersten Verwendung. Das Entlade kann dann im Destruktor erfolgen.<br />
Dann kann man die Gültigkeit der Funktionen über die Gültigkeit der Klasseninstanz steuern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911838</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 08 Nov 2005 14:49:59 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Funktion aus externer DLL einbinden zur Laufzeit on Tue, 08 Nov 2005 15:16:11 GMT]]></title><description><![CDATA[<p>Stefan7124 schrieb:</p>
<blockquote>
<p>... Zum Aufspüren der Funktionen einer DLL ...</p>
</blockquote>
<p>bzw. tools wie <a href="http://www.dependencywalker.com" rel="nofollow">Dependency Walker</a> verwenden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911864</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Tue, 08 Nov 2005 15:16:11 GMT</pubDate></item></channel></rss>