<?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[Stl String zu BSTR konvertieren in Win32Dll]]></title><description><![CDATA[<p>Hi,<br />
ich habe eine andere Frage Dlls betreffend.<br />
Ich habe eine Win32Dll erstellt die ich in einem Vb Projekt verwende.<br />
Ein Funktion dieser Dll gibt mir einen Int nach VB zurück, das klappt, nun werden in meiner Funktion in der Dll noch zusätzlich string Operationen durchgeführt, als Rückgabewert habe ich ebenfalls einen Stl String.</p>
<p>Da dies jedoch keine so gute Idee ist:</p>
<pre><code>Grundsätzlich solltest Du niemals std:string's über DLL Grenzen hinweg weitergeben. 
Diese Objekte sind direkt von der Compilerversion und der verwendeten CRT abhängig. Sie eignen sich in keiner Weise zum Datenaustausch zwischen Modulen. Du solltest auf PODs oder BSTR zurückgreifen.
</code></pre>
<p>wollte ich BSTR nutzen, aber die Dll wehrt sich tapfer !</p>
<p>Was muss ich denn includen und wie muss die Konvertierung aussehen<br />
ich hab der Einfachheit halber eine kleine Bsp.Fnkt erstellt</p>
<pre><code class="language-cpp">WIN32DLL02_API const char* fnWin32DLL02(void) 
{ 
string test; 
test = &quot;abc&quot;; 

return test; 
} 	
C/C++ Code:
WIN32DLL02_API const char* fnWin32DLL02(void) 
{ 
    string test; 
    test = &quot;abc&quot;; 

    return  test; 
}
</code></pre>
<p>wenn ich const char* und test.c_str() nutze frißt das die dll zwar aber ich bekomm ne Zahl zurück !</p>
<p>vielen Dank für Eure Mühe<br />
ShadowEater</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201817/stl-string-zu-bstr-konvertieren-in-win32dll</link><generator>RSS for Node</generator><lastBuildDate>Mon, 29 Jun 2026 01:13:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201817.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Jan 2008 12:41:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stl String zu BSTR konvertieren in Win32Dll on Fri, 04 Jan 2008 12:41:08 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe eine andere Frage Dlls betreffend.<br />
Ich habe eine Win32Dll erstellt die ich in einem Vb Projekt verwende.<br />
Ein Funktion dieser Dll gibt mir einen Int nach VB zurück, das klappt, nun werden in meiner Funktion in der Dll noch zusätzlich string Operationen durchgeführt, als Rückgabewert habe ich ebenfalls einen Stl String.</p>
<p>Da dies jedoch keine so gute Idee ist:</p>
<pre><code>Grundsätzlich solltest Du niemals std:string's über DLL Grenzen hinweg weitergeben. 
Diese Objekte sind direkt von der Compilerversion und der verwendeten CRT abhängig. Sie eignen sich in keiner Weise zum Datenaustausch zwischen Modulen. Du solltest auf PODs oder BSTR zurückgreifen.
</code></pre>
<p>wollte ich BSTR nutzen, aber die Dll wehrt sich tapfer !</p>
<p>Was muss ich denn includen und wie muss die Konvertierung aussehen<br />
ich hab der Einfachheit halber eine kleine Bsp.Fnkt erstellt</p>
<pre><code class="language-cpp">WIN32DLL02_API const char* fnWin32DLL02(void) 
{ 
string test; 
test = &quot;abc&quot;; 

return test; 
} 	
C/C++ Code:
WIN32DLL02_API const char* fnWin32DLL02(void) 
{ 
    string test; 
    test = &quot;abc&quot;; 

    return  test; 
}
</code></pre>
<p>wenn ich const char* und test.c_str() nutze frißt das die dll zwar aber ich bekomm ne Zahl zurück !</p>
<p>vielen Dank für Eure Mühe<br />
ShadowEater</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430572</guid><dc:creator><![CDATA[ShadowEater]]></dc:creator><pubDate>Fri, 04 Jan 2008 12:41:08 GMT</pubDate></item><item><title><![CDATA[Reply to Stl String zu BSTR konvertieren in Win32Dll on Fri, 04 Jan 2008 13:14:06 GMT]]></title><description><![CDATA[<p>Hmm überleg mal was mit Objekten passiert, wenn ihr Scope verlassen wird(in dem Fall die Funktion) und was mit Zeigern auf diese passiert ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430604</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 04 Jan 2008 13:14:06 GMT</pubDate></item><item><title><![CDATA[Reply to Stl String zu BSTR konvertieren in Win32Dll on Fri, 04 Jan 2008 14:07:34 GMT]]></title><description><![CDATA[<p>oh ich hab 2 mal das gleiche gepostet <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>Mit BSTR wird jetzt ein Buchstabe zurückgegeben !</p>
<p>Danke<br />
ShadowEater</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430623</guid><dc:creator><![CDATA[ShadowEater]]></dc:creator><pubDate>Fri, 04 Jan 2008 14:07:34 GMT</pubDate></item><item><title><![CDATA[Reply to Stl String zu BSTR konvertieren in Win32Dll on Fri, 04 Jan 2008 14:33:13 GMT]]></title><description><![CDATA[<p>ShadowEater schrieb:</p>
<blockquote>
<p>oh ich hab 2 mal das gleiche gepostet <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>Mit BSTR wird jetzt ein Buchstabe zurückgegeben !</p>
</blockquote>
<p>Das wird an der fehlerhaften Deklaration der DLL-Funktion in VB liegen.<br />
In jedem Fall ist Deine Funktion aber so einer Katastrophe geweiht, denn Du scheist einen Zeiger auf einen nicht mehr existierenden Speicherbereich zurückzugeben.</p>
<p>Das Arbeiten mit BSTRs ist ein wenig komplizierter. Ich finde es einfacher, wenn VB die Arbeit übernimmt, den notwendigen Speicher anzufordern und C++ diesen nur befüllt, dadurch spart man sich eine Menge Ärger. Man muss freilich darauf achten, dass man in VB genügend Speicher reserviert. Dann übergibt man diesen Speicher einfach als <code>char*</code> an die API-Funktion und kopiert dann den String dort hinein:</p>
<pre><code class="language-cpp">WINAPI void BeispielMitString(char* str) {
    // Gefährliche Annahme: 'str' zeigt auf genügend Speicher.
    std::string ret = &quot;Test&quot;;
    std::copy(ret.begin(), ret.end(), str);
}
</code></pre>
<p>Und Deklaration / Aufruf in VB6:</p>
<pre><code>Declare Sub BeispielMitString Lib &quot;wasweißich.dll&quot; (ByVal str As String)

' …

Dim MeinString As String
MeinString = Space$(4)
Call BeispielMitString(MeinString)
</code></pre>
<p>Falls Du mit <a href="http://VB.NET" rel="nofollow">VB.NET</a> arbeitest, kann man sich die Arbeit Dank Marshalling verringern und einfach nen StringBuilder verwenden:</p>
<pre><code>Declare Sub BeispielMitString Lib &quot;wasweißich.dll&quot; (ByVal str As StringBuilder)

' …

Dim MeinString As New StringBuilder(4)
BeispielMitString(MeinString)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1430643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430643</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 04 Jan 2008 14:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to Stl String zu BSTR konvertieren in Win32Dll on Sat, 05 Jan 2008 09:33:15 GMT]]></title><description><![CDATA[<p>Hi Konrad Rudolph,</p>
<p>danke für die schnelle Antwort, Space$(4) war der Fehler, jetzt liefer die DLL den gewünschten String an VB. Hab die Sache jetzt auf BSTR umgestellt.</p>
<p>Wie funktioniert die Übergabe eines Strings von Basic an die DLL mit BSTR kennst DU / IHR ein gutes ATL Tutorial? <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 bin dabei die DLL für nen VB Programmierer zu schreiben nicht für mich und da ich mich in VB nicht soooo gut auskenne... isses ab und zu n' bissl pfriemelig <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="😞"
    /> <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>Danke nochmal und schönes Wochenende<br />
ShadowEater <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1430978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430978</guid><dc:creator><![CDATA[ShadowEater]]></dc:creator><pubDate>Sat, 05 Jan 2008 09:33:15 GMT</pubDate></item><item><title><![CDATA[Reply to Stl String zu BSTR konvertieren in Win32Dll on Sat, 05 Jan 2008 13:15:55 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-403.html" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-8.html" rel="nofollow">Rund um die Programmierung</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431089</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sat, 05 Jan 2008 13:15:55 GMT</pubDate></item></channel></rss>