<?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[String als Rückgabewert einer exportierten Funktion]]></title><description><![CDATA[<p>hi</p>
<p>Ich habe mir schon die Finger wund gesucht und habe keine Lösung für mein kleines Problem gefunden. Das Problem ist folgendes:</p>
<p>Ich habe eine C++ dll (Visual C++ 2005). Darin habe ich eine (exportierte) Funktion, die einen String (const char*) zurückgibt. Diese Funktion binde ich nun in VB6 mittels declare function ein. Damit der String in VB6 nicht eine million Zeichen lang ist, verwende ich strdup(), um ihn zu begrenzen. Das funktioniert fast. Leider bleibt der '\0' Terminator im VB6 String erhalten. Ich kann ihn natürlich einfach wieder abschneiden, aber schön ist diese Lösung natürlich auch nicht.</p>
<p>Wenn ich einen const char* als Parameter einer solchen Funktion annehme und ihn direkt wieder zurückgebe, kommt er auch korrekt wieder in VB6 an (kein '\0' Terminator). Daher denke ich mal, dass es eine Möglichkeit geben müsste, einen anderen String so zu formatieren, dass er auch vernünftig ankommt.</p>
<p>Ist das so ein ungewöhnlicher Fall? kann ich mir jedenfalls nicht vorstellen.</p>
<p>Ich bin etwas verzweifelt. Ich bin für jede Hilfe dankbar.</p>
<p>Marvin</p>
<p>PS: Die funktionen haben natürlich den __stdcall Modifier.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189660/string-als-rückgabewert-einer-exportierten-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 18:37:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189660.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Aug 2007 14:31:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String als Rückgabewert einer exportierten Funktion on Wed, 15 Aug 2007 14:31:07 GMT]]></title><description><![CDATA[<p>hi</p>
<p>Ich habe mir schon die Finger wund gesucht und habe keine Lösung für mein kleines Problem gefunden. Das Problem ist folgendes:</p>
<p>Ich habe eine C++ dll (Visual C++ 2005). Darin habe ich eine (exportierte) Funktion, die einen String (const char*) zurückgibt. Diese Funktion binde ich nun in VB6 mittels declare function ein. Damit der String in VB6 nicht eine million Zeichen lang ist, verwende ich strdup(), um ihn zu begrenzen. Das funktioniert fast. Leider bleibt der '\0' Terminator im VB6 String erhalten. Ich kann ihn natürlich einfach wieder abschneiden, aber schön ist diese Lösung natürlich auch nicht.</p>
<p>Wenn ich einen const char* als Parameter einer solchen Funktion annehme und ihn direkt wieder zurückgebe, kommt er auch korrekt wieder in VB6 an (kein '\0' Terminator). Daher denke ich mal, dass es eine Möglichkeit geben müsste, einen anderen String so zu formatieren, dass er auch vernünftig ankommt.</p>
<p>Ist das so ein ungewöhnlicher Fall? kann ich mir jedenfalls nicht vorstellen.</p>
<p>Ich bin etwas verzweifelt. Ich bin für jede Hilfe dankbar.</p>
<p>Marvin</p>
<p>PS: Die funktionen haben natürlich den __stdcall Modifier.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345114</guid><dc:creator><![CDATA[Qudus]]></dc:creator><pubDate>Wed, 15 Aug 2007 14:31:07 GMT</pubDate></item><item><title><![CDATA[Reply to String als Rückgabewert einer exportierten Funktion on Wed, 15 Aug 2007 16:10:45 GMT]]></title><description><![CDATA[<p>1. Gib niemals einen eien char * direkt zurück der durch strdup erzeugt. Wer soll den denn freigeben?<br />
2. Schau Dir mal diesen Artikel an: <a href="http://support.microsoft.com/kb/187912/en-us" rel="nofollow">http://support.microsoft.com/kb/187912/en-us</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345172</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 15 Aug 2007 16:10:45 GMT</pubDate></item><item><title><![CDATA[Reply to String als Rückgabewert einer exportierten Funktion on Wed, 15 Aug 2007 16:31:17 GMT]]></title><description><![CDATA[<p>Erstmal vielen Dank für die Antwort und den guten Tip.</p>
<p>Leider arbeitet das Beispiel aus dem Link wieder nach diesem hässlichen buffer-Weg. Den wollteich eigentlich vermeiden. Dann fängt man ja wieder an, den Buffer nach den '\0' char zu durchsuchen und entsprechend zu kürzen.</p>
<p>Gibt es denn nicht einen C++ Weg, bei dem der Speicher automatisch freigegeben wird?</p>
<p>Marvin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345175</guid><dc:creator><![CDATA[Qudus]]></dc:creator><pubDate>Wed, 15 Aug 2007 16:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to String als Rückgabewert einer exportierten Funktion on Wed, 15 Aug 2007 20:02:09 GMT]]></title><description><![CDATA[<p>BSTR arbeitennicht 0 terminiert, sondern Ihre Länge wird vorgegeben. BSTR können selbst auch direkt nur aus \0 Zeichen bestehen!<br />
Ich verstehe Dein Problem nicht ganz. Schau Dir doch mal die BSTR Routinen alle in der MSDN an...<br />
Was stört Dich? Speichermusst Du sowieso allokieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345265</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 15 Aug 2007 20:02:09 GMT</pubDate></item><item><title><![CDATA[Reply to String als Rückgabewert einer exportierten Funktion on Thu, 16 Aug 2007 16:06:35 GMT]]></title><description><![CDATA[<p>War etwas schwer herauszufinden. Aber BSTR war genau das, was ich brauche. Ich hatte sowas schon vorher mal gelesen, hatte aber aufgegeben, da ich nicht genügend Informationen gefunden hatte. Klappt jetzt. Ich muss nur meinen &quot;eigentlichen&quot; String in BSTR konvertieren und schon klappt's.</p>
<p>Ich bin zwar eh schon ein riesen Java-Fan, aber je mehr ich C/C++ verwenden muss, desto mehr liebe ich Java. C ist einfach ne übel gewachsene Scheiß-Sprache.</p>
<p>Naja, wie dem auch sei. Ich danke Dir herzlichst :).</p>
<p>Marvin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345885</guid><dc:creator><![CDATA[Qudus]]></dc:creator><pubDate>Thu, 16 Aug 2007 16:06:35 GMT</pubDate></item></channel></rss>