<?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[VB-Zeichenkette in&#x2F;aus DLL]]></title><description><![CDATA[<p>Hallo,<br />
bei mir stellt sich folgendes Problem:<br />
ich habe eine C-Dll erzeugt, die Funktionen exportiert. Bei der folgenden Fkt.<br />
&quot;extern &quot;C&quot; VOID PASCAL EXPORT DLL_Veraendere(char* x)&quot;<br />
möchte ich von Visual Basic aus einen String an die DLL übergeben die diesen verändert. VB sollte dann den 'veränderten' String weiter verarbeiten. Der String wird zwar von VB zur DLL richtig übergeben. Umgekehrt funzt das aber überhaupt nicht. Wie muss eine solche Übergabe richtig aussehen?<br />
Danke <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/6095/vb-zeichenkette-in-aus-dll</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 08:28:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/6095.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Jun 2003 12:54:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to VB-Zeichenkette in&#x2F;aus DLL on Wed, 04 Jun 2003 12:54:00 GMT]]></title><description><![CDATA[<p>Hallo,<br />
bei mir stellt sich folgendes Problem:<br />
ich habe eine C-Dll erzeugt, die Funktionen exportiert. Bei der folgenden Fkt.<br />
&quot;extern &quot;C&quot; VOID PASCAL EXPORT DLL_Veraendere(char* x)&quot;<br />
möchte ich von Visual Basic aus einen String an die DLL übergeben die diesen verändert. VB sollte dann den 'veränderten' String weiter verarbeiten. Der String wird zwar von VB zur DLL richtig übergeben. Umgekehrt funzt das aber überhaupt nicht. Wie muss eine solche Übergabe richtig aussehen?<br />
Danke <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>
]]></description><link>https://www.c-plusplus.net/forum/post/29554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29554</guid><dc:creator><![CDATA[gerto]]></dc:creator><pubDate>Wed, 04 Jun 2003 12:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to VB-Zeichenkette in&#x2F;aus DLL on Sat, 07 Jun 2003 18:58:00 GMT]]></title><description><![CDATA[<p>Hi<br />
Ich hatte da auch so meine Probleme damit. <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="😡"
    /><br />
Nun habe ich es so gelöst, dass ich aus der dll eine Temporaer-Datei im verzeichniss C:\Temp erstellen lasse und dort, die von der DLL erzeugten Strings zwischenspeichere. Dann lasse ich sie von meinem VB6 Programm auslesen.<br />
Umgekehrt verfahre ich genau so. Funktioniert übrigens Fehlerfrei und sehr zufriedenstellend.<br />
Viel Spass beim ausprobieren!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/29555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29555</guid><dc:creator><![CDATA[Anonym]]></dc:creator><pubDate>Sat, 07 Jun 2003 18:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to VB-Zeichenkette in&#x2F;aus DLL on Sun, 08 Jun 2003 12:11:00 GMT]]></title><description><![CDATA[<p>Erstmal vorweg: Ich bin kein Basic-Crack <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>In VB werden Strings intern als Unicode-Strings (16 Bit pro Zeichen) behandelt. Ich würde die Funktion in der DLL also auf wchar_t* anstatt char* umstellen...</p>
<p>EDIT: Alternativ kannst du aus Basic auch mit StrConv den String in ein Byte-Array umwandeln. Dann sollte es auch mit char* klappen. Die Lösung mit der Temporärdatei funktioniert zwar auch ist aber:<br />
1.) unsauber<br />
2.) unsicher<br />
3.) langsam<br />
4.) schlicht und einfach schlecht</p>
<p>[ Dieser Beitrag wurde am 08.06.2003 um 14:16 Uhr von <strong>MaSTaH</strong> editiert. ]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29556</guid><dc:creator><![CDATA[Walli]]></dc:creator><pubDate>Sun, 08 Jun 2003 12:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to VB-Zeichenkette in&#x2F;aus DLL on Sun, 08 Jun 2003 12:58:00 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Danke für Eure Antworten. Ich habe eine Lösung gefunden, die wie folgt aussieht:</p>
<p>Die Funktion in der C-DLL sieht so aus:</p>
<pre><code class="language-cpp">extern &quot;C&quot; INT PASCAL EXPORT SCP_ReceiveData(char * x, unsigned int len)
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  char *test;
  test = &quot;dies ist es jetzt!&quot;;
  // reicht der Speicherplatz aus?
  if ((strlen(test) + 1) &gt; len)
  {
    return -1;
  }
 memcpy(x,test,strlen(test) + 1); //das ist es!
 return 0;
}
</code></pre>
<p>Die Deklaration der Dll-Funktion in VB:</p>
<pre><code>Private Declare Function SCP_ReceiveData _
Lib &quot;Test.dll&quot; ( _
ByVal Puffer As String, _
ByVal Length As Integer
) As Integer
</code></pre>
<p>Achtung: der String muss in diesem Fall ByVal übergeben werden. ByVal verliert hier aber seine ursrüngliche Bedeutung. Es wird hiermit ein Zeiger auf die nullterminierte Zeichenkette übergeben. (ByRef würde einen Zeiger auf eine BSTR-Struktur liefern...)</p>
<p>Der Aufruf der Funktion in VB:</p>
<pre><code>Dim strPuffer As String
Dim intRueck As Integer
strPuffer = String$(260, 0) 'Speicher reservieren soviel wie nötig
intRueck = SCP_ReceiveData(strPuffer, Len(strPuffer))
'hier kann der Rückgabewert ausgewertet werden
strPuffer = C2VBString(strPuffer) 'Funktion sucht das erste Chr(0) im String und gibt ihn bis dort zurück
</code></pre>
<p>Und das funzt - jedoch die Verwendung natürlich auf eigene Gefahr!<br />
Gruß,<br />
Gerto</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29557</guid><dc:creator><![CDATA[gerto]]></dc:creator><pubDate>Sun, 08 Jun 2003 12:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to VB-Zeichenkette in&#x2F;aus DLL on Tue, 10 Jun 2003 06:32:00 GMT]]></title><description><![CDATA[<p>Effizienter wäre es, den String schon in der DLL in ein VB-lesbares Format umzuwandeln, z.B. mit BSTR und SysAllocString!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/29558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/29558</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Tue, 10 Jun 2003 06:32:00 GMT</pubDate></item></channel></rss>