<?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[Aus Winapi String beschreiben]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich habe bisher nur mit char* gearbeitet und würde gern auf string umstellen. Ich habe versucht dieses Beispiel nachzubauen:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1201322.html#1201322" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1201322.html#1201322</a></p>
<p>Hier mein Beispiel. Es soll die Serial der Festplatte ausgelesen werden. Dafür muß ich einen char Buffer der WinApi übergeben.</p>
<pre><code class="language-cpp">class ComputerData1 {
public:
	string m_sHDSerial;
	GetHdSerial();
}

ComputerData1::GetHdSerial() {
	DWORD lVolSerialNbr=0;
	char *cTemp=0;

	GetVolumeInformation( &quot;C:\\&quot;, 0, 0, &amp;lVolSerialNbr, 0, 0, 0, 0);
	cTemp = new char[20]; // C String erstellen
	ultoa(lVolSerialNbr, cTemp, 10); // Befüllen lassen

	m_sHDSerial = new string(strlen(cTemp)); // C++ String erstellen
	m_sHDSerial-&gt;copy(cTemp, sizeof(cTemp)); // C String in den C++ String kopieren.
	delete[] cTemp;
}
</code></pre>
<p>Die Fehlermeldungen:</p>
<blockquote>
<p>t:\vs6\asdf\computerdata1.cpp(164) : error C2664: '__thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;(const class std::al<br />
locator&lt;char&gt; &amp;)' : cannot convert parameter 1 from 'unsigned int' to 'const class std::allocator&lt;char&gt; &amp;'<br />
Reason: cannot convert from 'unsigned int' to 'const class std::allocator&lt;char&gt;'<br />
No constructor could take the source type, or constructor overload resolution was ambiguous<br />
t:\vs6\asdf\computerdata1.cpp(165) : error C2819: type 'std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;' does not have an overloaded member 'operator -&gt;'<br />
t:\vs6\asdf\computerdata1.cpp(165) : error C2227: left of '-&gt;copy' must point to class/struct/union</p>
</blockquote>
<p>Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176945/aus-winapi-string-beschreiben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 16:43:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176945.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 26 Mar 2007 15:49:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aus Winapi String beschreiben on Mon, 26 Mar 2007 15:49:58 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich habe bisher nur mit char* gearbeitet und würde gern auf string umstellen. Ich habe versucht dieses Beispiel nachzubauen:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1201322.html#1201322" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1201322.html#1201322</a></p>
<p>Hier mein Beispiel. Es soll die Serial der Festplatte ausgelesen werden. Dafür muß ich einen char Buffer der WinApi übergeben.</p>
<pre><code class="language-cpp">class ComputerData1 {
public:
	string m_sHDSerial;
	GetHdSerial();
}

ComputerData1::GetHdSerial() {
	DWORD lVolSerialNbr=0;
	char *cTemp=0;

	GetVolumeInformation( &quot;C:\\&quot;, 0, 0, &amp;lVolSerialNbr, 0, 0, 0, 0);
	cTemp = new char[20]; // C String erstellen
	ultoa(lVolSerialNbr, cTemp, 10); // Befüllen lassen

	m_sHDSerial = new string(strlen(cTemp)); // C++ String erstellen
	m_sHDSerial-&gt;copy(cTemp, sizeof(cTemp)); // C String in den C++ String kopieren.
	delete[] cTemp;
}
</code></pre>
<p>Die Fehlermeldungen:</p>
<blockquote>
<p>t:\vs6\asdf\computerdata1.cpp(164) : error C2664: '__thiscall std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;::std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;(const class std::al<br />
locator&lt;char&gt; &amp;)' : cannot convert parameter 1 from 'unsigned int' to 'const class std::allocator&lt;char&gt; &amp;'<br />
Reason: cannot convert from 'unsigned int' to 'const class std::allocator&lt;char&gt;'<br />
No constructor could take the source type, or constructor overload resolution was ambiguous<br />
t:\vs6\asdf\computerdata1.cpp(165) : error C2819: type 'std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt;' does not have an overloaded member 'operator -&gt;'<br />
t:\vs6\asdf\computerdata1.cpp(165) : error C2227: left of '-&gt;copy' must point to class/struct/union</p>
</blockquote>
<p>Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1253118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253118</guid><dc:creator><![CDATA[ZubX]]></dc:creator><pubDate>Mon, 26 Mar 2007 15:49:58 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Winapi String beschreiben on Mon, 26 Mar 2007 16:19:01 GMT]]></title><description><![CDATA[<p>m_sHDSerial ist kein Pointer (string* m_sHDSerial!).<br />
string(strlen(cTemp)) geht nicht, da kein Konstruktor für size_t (unsigned int) vorhanden ist. Mach' einfach m_sHDSerial = new string(cTemp);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1253141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253141</guid><dc:creator><![CDATA[Hähla]]></dc:creator><pubDate>Mon, 26 Mar 2007 16:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Winapi String beschreiben on Mon, 26 Mar 2007 17:06:22 GMT]]></title><description><![CDATA[<p>hmm nee das hat hier wenig mit cpp zu tun jungs ...</p>
<pre><code class="language-cpp">#if !defined(COMPUTER_DATA_H__INCLUDED)
#define COMPUTER_DATA_H__INCLUDED

#include &lt;windows.h&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;

class ComputerData 
{
public:
	bool			fill_hdd_serial();

private:
	std::string		m_hddserial;
};

#endif // COMPUTER_DATA_H__INCLUDED
</code></pre>
<pre><code class="language-cpp">#include &quot;ComputerData.h&quot;

bool ComputerData::fill_hdd_serial() 
{
	unsigned long dwVolSerial = 0;
	if (GetVolumeInformationA(&quot;C:\\&quot;, NULL, 0, &amp;dwVolSerial, NULL, 0, NULL, 0) == FALSE) // da wir std::string (ANSI) nehmen, müssen wir auch sichergehen, ads wir auch die ANSI-Funktion nehmen ...
		return false;

	std::ostringstream ss;
	ss &lt;&lt; dwVolSerial;
	m_hddserial = ss.str();

	return true;
}
</code></pre>
<p>... so ist das C++ und korrekt <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/1253173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253173</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 26 Mar 2007 17:06:22 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Winapi String beschreiben on Tue, 27 Mar 2007 10:36:18 GMT]]></title><description><![CDATA[<p>Ich bin tatsächlich dabei von C auf C++ umzusteigen. Vielen Dank (D)Evil</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1253689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253689</guid><dc:creator><![CDATA[ZubX]]></dc:creator><pubDate>Tue, 27 Mar 2007 10:36:18 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Winapi String beschreiben on Tue, 27 Mar 2007 11:04:44 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>so ist das C++ und korrekt <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>
</blockquote>
<p>Na ja. Wenn Du jetzt noch den komischen Erfolgs-Rückgabewert weglässt und stattdessen mit Ausnahmen arbeitest, ist es *richtiges* C++. <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/1253705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253705</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 27 Mar 2007 11:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Winapi String beschreiben on Tue, 27 Mar 2007 13:09:07 GMT]]></title><description><![CDATA[<p>Jetzt auch noch den Rückgabewert weglassen. Ihr verlangt wirklich viel *g*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1253836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253836</guid><dc:creator><![CDATA[ZubX]]></dc:creator><pubDate>Tue, 27 Mar 2007 13:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Winapi String beschreiben on Tue, 27 Mar 2007 13:41:49 GMT]]></title><description><![CDATA[<p>Gibt es keine Möglichkeit zu dem Befehl in dem Catchblock zurückzukehren wo die Exception geworfen wurde? Sowas wie unter VB: &quot;Resume&quot; oder &quot;Resume Next&quot;<br />
<a href="http://tutorial.schornboeck.net/exceptions.htm" rel="nofollow">http://tutorial.schornboeck.net/exceptions.htm</a></p>
<p>Wenn das nicht geht, was das Tutorial nahelegt, sollte man für behandelbare Fehler vielleicht doch den Rückgabewert und eine if() Klausel in der aufrufenden Funktion verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1253868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253868</guid><dc:creator><![CDATA[ZubX]]></dc:creator><pubDate>Tue, 27 Mar 2007 13:41:49 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Winapi String beschreiben on Tue, 27 Mar 2007 14:02:21 GMT]]></title><description><![CDATA[<p>ZubX schrieb:</p>
<blockquote>
<p>Gibt es keine Möglichkeit zu dem Befehl in dem Catchblock zurückzukehren wo die Exception geworfen wurde? Sowas wie unter VB: &quot;Resume&quot; oder &quot;Resume Next&quot;</p>
</blockquote>
<p>Nein. Generell ergibt es auch keinen Sinn, in die Situation vor dem Fehler zurückkehren zu wollen. In VB6 habe ich zwar auch oft 'Resume Next' eingesetzt, aber außerhalb von VB6 habe ich es eigentlich noch nie gebraucht.</p>
<blockquote>
<p>Wenn das nicht geht, was das Tutorial nahelegt, sollte man für behandelbare Fehler vielleicht doch den Rückgabewert und eine if() Klausel in der aufrufenden Funktion verwenden?</p>
</blockquote>
<p>Nein. Generell weiß eine aufgerufene Routine nie, wo Fehler, die sie auslöst, behandelt werden sollen/können. Ein Rückgabewert ist daher selten sinnvoll, denn der müssgte sonst durchgereicht werden.</p>
<p>-- Wozu brauchst Du denn 'Resume Next'?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1253883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253883</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 27 Mar 2007 14:02:21 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Winapi String beschreiben on Tue, 27 Mar 2007 14:09:43 GMT]]></title><description><![CDATA[<p>Nach dem Schema von FillHDSerial wollte ich mehrere Funktionen bauen die bestimmte Werte ermitteln. Wenn ein Fehler auftritt soll in der Catch Kalusel ein cout gemacht werden und mit der nächsten Anweisung fortgefahren werden.</p>
<p>Am besten ich lasse das mit Try/Catch wieder.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1253892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253892</guid><dc:creator><![CDATA[ZubX]]></dc:creator><pubDate>Tue, 27 Mar 2007 14:09:43 GMT</pubDate></item></channel></rss>