<?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[CString global aus DLL laden ?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte gerne aus einer DLL einen bestimmten<br />
CString an meine Anwendung übergeben.</p>
<p>In der DLL gibt es den CString Ereignis,<br />
der den Wert = &quot;Hallo&quot; hat.</p>
<p>Nun habe ich die DLL bei Programmstart so importiert:</p>
<pre><code class="language-cpp">__declspec (dllimport) void EreignisFunk(void);
</code></pre>
<p>In der MFC-Anwednung gibt es eine globale Variable vom<br />
Typ CString, die ebenfalls Ereignis heißt.<br />
Ich rufe die EreignisFunk() dann im Programm irgendwo auf,aber<br />
die globale Variable im Programm nimmt nicht den Wert von der<br />
DLL an ?</p>
<p>Wird nicht alles aus der DLL praktisch so behandelt, als würde es<br />
im Quelltext der MFC-Anwednung stehen ?</p>
<p>Oder is das totaler murks was ich mir da ausgedacht habe ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/50044/cstring-global-aus-dll-laden</link><generator>RSS for Node</generator><lastBuildDate>Sun, 28 Jun 2026 10:53:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/50044.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Sep 2003 18:44:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CString global aus DLL laden ? on Thu, 25 Sep 2003 18:44:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte gerne aus einer DLL einen bestimmten<br />
CString an meine Anwendung übergeben.</p>
<p>In der DLL gibt es den CString Ereignis,<br />
der den Wert = &quot;Hallo&quot; hat.</p>
<p>Nun habe ich die DLL bei Programmstart so importiert:</p>
<pre><code class="language-cpp">__declspec (dllimport) void EreignisFunk(void);
</code></pre>
<p>In der MFC-Anwednung gibt es eine globale Variable vom<br />
Typ CString, die ebenfalls Ereignis heißt.<br />
Ich rufe die EreignisFunk() dann im Programm irgendwo auf,aber<br />
die globale Variable im Programm nimmt nicht den Wert von der<br />
DLL an ?</p>
<p>Wird nicht alles aus der DLL praktisch so behandelt, als würde es<br />
im Quelltext der MFC-Anwednung stehen ?</p>
<p>Oder is das totaler murks was ich mir da ausgedacht habe ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/360569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/360569</guid><dc:creator><![CDATA[Planyo]]></dc:creator><pubDate>Thu, 25 Sep 2003 18:44:09 GMT</pubDate></item><item><title><![CDATA[Reply to CString global aus DLL laden ? on Thu, 25 Sep 2003 19:30:04 GMT]]></title><description><![CDATA[<p>weist du denn in der Ereignisfunktion den Inhalt von &quot;DLL CString Ereignis&quot; zu?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/360592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/360592</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Thu, 25 Sep 2003 19:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to CString global aus DLL laden ? on Thu, 25 Sep 2003 19:40:54 GMT]]></title><description><![CDATA[<p>Hi PAD,</p>
<p>also in der DLL weise ich Ereignis einen Wert zu, ja.<br />
Ich kann den z.B. in der gleichen EreignisFunk()<br />
so einbinden:</p>
<p>MessageBox(NULL, Ereignis, &quot;Testereignis&quot;, MB_OK);</p>
<p>Und es wird dann die MessageBox auch richtig in der MFC-<br />
Anwendung mit dem Wert &quot;Hallo&quot; aus der DLL ausgegeben.</p>
<p>Nur in der Anwendung die CStrings aus der DLL weiter zu verarbeiten<br />
geht nicht. Alsob diese nicht existieren bzw. nur in der aufgerufenen<br />
EreignisFunk() die ich exportierte, gültig sind ?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/360603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/360603</guid><dc:creator><![CDATA[Planyo]]></dc:creator><pubDate>Thu, 25 Sep 2003 19:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to CString global aus DLL laden ? on Thu, 25 Sep 2003 21:33:07 GMT]]></title><description><![CDATA[<p>Du nimmst da aber da lokale Ereigniss. Du musst der globalen Variablen aus dem Haupprogramm den wert zuweisen</p>
<p>Hier ein Beispiel in C</p>
<pre><code class="language-cpp">Hauptprogramm
char GlobalEreignis[128+1];];// das +1 ist eine Marotte von mir um den üblichen Fehler zu 
                             // vermeiden das für die schließende Null kein Platz mehr da ist.   

int SetGlobalEreignis(char *data) // Accessfunktion 1 Setzen der globalen
 {
  strcpy(GlobalEreignis,data)
  return 0;
 }

int GetGlobalEreignis(char *data) // Accessfunktion 2 Lesen der globalen
 {
  strcpy(data,GlobalEreignis)
  return 0;
 }

int main( int argc, char *argv[ ]) 
 { 
  ........
 }

DLL

...EreignisFunk() 
 {
  char Ereignis[]={&quot;HALLO&quot;}
  ...............
  MessageBox(NULL, Ereignis, &quot;Testereignis&quot;, MB_OK); 
  SetGlobalEreignis(Ereignis);
  ...............
}
</code></pre>
<p>Ein deutlich sinnvolleres Design ist wenn du diese Globale in die DLL verlagerst und diese globale dann über die Accessfunktionen in allen Programmteilen benutzt.</p>
<p>Wenn du die Accessfunktionen und die globale in das Main-Programm setzt kommt es zu einem Henne Ei Problem<br />
int der DLL da der linker die 3 extrenen Referenzen nicht ( Ereignis,SetGlobalEreignis,GetGlobalEreignis) nict auflösen kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/360658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/360658</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Thu, 25 Sep 2003 21:33:07 GMT</pubDate></item><item><title><![CDATA[Reply to CString global aus DLL laden ? on Fri, 26 Sep 2003 16:27:34 GMT]]></title><description><![CDATA[<p>Hmm, also irgendwie versteh ich das noch nicht ganz <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="😕"
    /></p>
<p>Ich setz in der DLL folgendes:</p>
<pre><code class="language-cpp">__declspec (dllexport) void testdll(void)
{

CString hallo;
hallo =&quot;hallo dll&quot;;

	  }
</code></pre>
<p>Nun habe ich in der Hauptanwendung zum laden:</p>
<pre><code class="language-cpp">__declspec (dllimport) void testdll(void);
</code></pre>
<p>und ich dachte dann wird der CString hallo als global<br />
in meine Anwendung übernommen, so dass ich ihn überall<br />
während das Programm läuft verwenden kann.</p>
<p>Wie geht das denn nun richtig ?<br />
Der Code von dir produziert bei mir leider Fehler <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>Ich mach irgendwas falsch ?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/361192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/361192</guid><dc:creator><![CDATA[Planyo]]></dc:creator><pubDate>Fri, 26 Sep 2003 16:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to CString global aus DLL laden ? on Fri, 26 Sep 2003 22:17:40 GMT]]></title><description><![CDATA[<p>Schu dir die Bemerkungen unter dem Code nochmal an Speziell das Henne Ei Problem.</p>
<p>Du solltest folgendes in die DLL packen</p>
<p>Die globale Variable<br />
int SetGlobalEreignis(char *data) // Accessfunktion 1 Setzen der globalen<br />
int GetGlobalEreignis(char *data) // Accessfunktion 2 Lesen der globalen</p>
<p>Dann sollte es funktionieren</p>
<p>Um etwas global zu definieren/deklarieren mußt du es außerhalb jeder Funktion definieren.<br />
Dein Code erzeugt eine lokale Variable hallo der du den Wert &quot;hallo dll&quot; zuweist.<br />
Sobald du diese funktion verlässt ist diese Variable zerstört.</p>
<pre><code class="language-cpp">__declspec (dllexport) void testdll(void) 
{ 

CString hallo; 
hallo =&quot;hallo dll&quot;; 

}
</code></pre>
<p>Um hier eine globale Variable zu machen müßtest du folgendes Schreiben</p>
<pre><code class="language-cpp">CString hallo;
__declspec (dllexport) void testdll(void) 
  { 
   hallo =&quot;hallo dll&quot;; 
   }
</code></pre>
<p>ein kleiner aber entscheidender Unterschied.<br />
Damit du im Hauptprogramm darauf zugreifen kannst, musst du in allen Files die<br />
auf diese Variable zugreifen folgendes einfügen</p>
<pre><code class="language-cpp">extern CString hallo;
</code></pre>
<p>Das ist aber schlechter Stil, deswegen der Vorschlag mit den Accessfunktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/361380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/361380</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Fri, 26 Sep 2003 22:17:40 GMT</pubDate></item><item><title><![CDATA[Reply to CString global aus DLL laden ? on Sat, 27 Sep 2003 05:07:28 GMT]]></title><description><![CDATA[<p>Ich habe eine andere Lösung für dich:</p>
<p>Mache keine globalen Variablen oder syncronisiere den Zugriff darauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/361416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/361416</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Sat, 27 Sep 2003 05:07:28 GMT</pubDate></item><item><title><![CDATA[Reply to CString global aus DLL laden ? on Sun, 28 Sep 2003 08:23:29 GMT]]></title><description><![CDATA[<p>Unix-Tom schrieb:</p>
<blockquote>
<p>Ich habe eine andere Lösung für dich:</p>
<p>Mache keine globalen Variablen oder syncronisiere den Zugriff darauf.</p>
</blockquote>
<p>Was meinst du mit syncronisiere den Zugriff darauf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/361905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/361905</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Sun, 28 Sep 2003 08:23:29 GMT</pubDate></item></channel></rss>