<?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[Wie kann ich ein Edit Control mit einem void* füllen?]]></title><description><![CDATA[<p>Hallo,</p>
<p>Weiß jemand wie ich ein Edit Conrol mit dem Wert einer Pointer Variable füllen kann? Ich wollte ein Dialog programmieren mit dem ich Daten über die serielle Schnittstelle senden und empfangen kann. Dazu wollte ich mir die empfangenen Daten in einem Edit Control anzeigen lassen. Ich arbeite mit den WinAPI-Funktionen CreateFile, WriteFile, ReadFile, CloseFile. Das senden funktioniert auch schon so weit ganz gut, nur habe ich mit dem empfangen so meine Probleme. Das liegt allerdings nicht an den API-Funktionen sondern daran, dass ich meine empfangenen Daten nicht in einem Edit Control darstellen kann. Ich weiß nicht wie ich mit dem 2.Parameter von ReadFile (void* ...) umgehen soll das mir die Daten in meinem Edit Control dargestellt werden.</p>
<p>Vielleicht weiß ja jemand bescheid und kann mir mit meinem Problem weiterhelfen.</p>
<p>Ach ja meinem Edit Control habe ich eine CString Variable hinterlegt.</p>
<p>Oder wie stelle ich sonst meine mit der seriellen Schnittstelle erfassten Daten dar?</p>
<p>Oliver</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170158/wie-kann-ich-ein-edit-control-mit-einem-void-füllen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 09:34:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170158.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Jan 2007 11:21:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie kann ich ein Edit Control mit einem void* füllen? on Fri, 12 Jan 2007 12:10:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Weiß jemand wie ich ein Edit Conrol mit dem Wert einer Pointer Variable füllen kann? Ich wollte ein Dialog programmieren mit dem ich Daten über die serielle Schnittstelle senden und empfangen kann. Dazu wollte ich mir die empfangenen Daten in einem Edit Control anzeigen lassen. Ich arbeite mit den WinAPI-Funktionen CreateFile, WriteFile, ReadFile, CloseFile. Das senden funktioniert auch schon so weit ganz gut, nur habe ich mit dem empfangen so meine Probleme. Das liegt allerdings nicht an den API-Funktionen sondern daran, dass ich meine empfangenen Daten nicht in einem Edit Control darstellen kann. Ich weiß nicht wie ich mit dem 2.Parameter von ReadFile (void* ...) umgehen soll das mir die Daten in meinem Edit Control dargestellt werden.</p>
<p>Vielleicht weiß ja jemand bescheid und kann mir mit meinem Problem weiterhelfen.</p>
<p>Ach ja meinem Edit Control habe ich eine CString Variable hinterlegt.</p>
<p>Oder wie stelle ich sonst meine mit der seriellen Schnittstelle erfassten Daten dar?</p>
<p>Oliver</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208610</guid><dc:creator><![CDATA[oliher]]></dc:creator><pubDate>Fri, 12 Jan 2007 12:10:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich ein Edit Control mit einem void* füllen? on Fri, 12 Jan 2007 12:36:17 GMT]]></title><description><![CDATA[<p>Weiß denn keiner einer Antwort?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208665</guid><dc:creator><![CDATA[oliher]]></dc:creator><pubDate>Fri, 12 Jan 2007 12:36:17 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich ein Edit Control mit einem void* füllen? on Fri, 12 Jan 2007 12:37:28 GMT]]></title><description><![CDATA[<p>void* ist ein nicht spezifizierter Zeiger. In was hast Du denn nun die Daten gespeichert? In einem char Array?<br />
Wenn die Daten nun in einem char-Array sind, und Du Deinem Edit Control eine CString Variable zugeordnet hast, dann kannst Du die Daten aus dem char-Array einfach der CString Variable zuweisen und UpdateData aufrufen. Dann werden die Daten dargestellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208668</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 12 Jan 2007 12:37:28 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich ein Edit Control mit einem void* füllen? on Fri, 12 Jan 2007 13:07:25 GMT]]></title><description><![CDATA[<p>Also ich zeig mal einen Ausschnitt meines Programmcodes:</p>
<p>Im Header:</p>
<pre><code class="language-cpp">public:
    char* testChar;
</code></pre>
<p>Im Programmcode:</p>
<pre><code class="language-cpp">void CSerial_006Dlg::OnBnClickedButtonEmpfangen()
{
    ReadData(&amp;testChar,1);
    //UpdateData(TRUE);
    SetDlgItemText(IDC_EDIT_EMPFANGEN,(LPCTSTR)testChar);
    //UpdateData(FALSE);
}

int CSerial_006Dlg::ReadData(void* buffer, int length)
{
    DWORD receive = 0;
    if(hPort != 0 &amp;&amp; length &gt; 0){
        ReadFile(hPort,buffer,length,&amp;receive,NULL);
    }
    if(receive != 0){
        return receive;
    }
    else{
        return 0;
    }
}
</code></pre>
<p>Wenn ich mich im Debug-Modus befinde, dann hat &quot;testChar&quot;, nachdem Daten von der seriellen Schnittstelle eingelesen wurden den Inhalt 0xcccccc67 wenn ich ein 'g' über die serielle Schnittstelle mit einem anderen PC sende. Das ist laut ASCII-Tabelle ja richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208689</guid><dc:creator><![CDATA[oliher]]></dc:creator><pubDate>Fri, 12 Jan 2007 13:07:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich ein Edit Control mit einem void* füllen? on Fri, 12 Jan 2007 13:11:58 GMT]]></title><description><![CDATA[<p>Dein Fehler ist erstens, daß du den Umgang mit Pointern nicht richtig verstanden hast - du füllst die char*-Variable testChar mit einem beliebigen Zahlenwert, der von SetItemDlgText() als Adresse eines char-Arrays verwendet wird, und zweitens die fehlende Null-Terminierung deiner Ausgaben.</p>
<pre><code class="language-cpp">//Ctor und Dtor für die Speicherverwaltung
CSerial_006Dlg::CSerial_006Dlg() : testChar(new char[buflen+1] {}
CSerial_006Dlg::~CSerial_006Dlg() {delete[] testChar;}
/*
alternativ könntest du statt des char* auch ein 'char testChar[buflen+1]' verwenden,
dann erübrigen sich die beiden Funktionen
*/

void CSerial_006Dlg::OnBnClickedButtonEmpfangen()
{
    int rlen=ReadData(testChar,buflen);
    testChar[rlen]='\0';//Abschlußzeichen anhängen
    //UpdateData(TRUE);
    SetDlgItemText(IDC_EDIT_EMPFANGEN,(LPCTSTR)testChar);
    //UpdateData(FALSE);
}

int CSerial_006Dlg::ReadData(void* buffer, int length)
{
    DWORD receive = 0;
    if(hPort != 0 &amp;&amp; length &gt; 0){
        ReadFile(hPort,buffer,length,&amp;receive,NULL);
    }
    if(receive != 0){
        return receive;
    }
    else{
        return 0;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1208700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208700</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 12 Jan 2007 13:11:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich ein Edit Control mit einem void* füllen? on Fri, 12 Jan 2007 13:50:06 GMT]]></title><description><![CDATA[<p>Ich habe versucht den Code entsprechend zu ändern. Wenn ich das Programm dann laufen lasse bekomme ich allerdings eine unbehandelte Ausnahme an der Stelle:</p>
<pre><code class="language-cpp">testChar[rlen] = '\0';
</code></pre>
<p>Ich muss allerdings dazusagen, dass ich nicht genau weiß an welcher Stelle ich den Speicher für mein char-Array wieder freigeben soll, auch wenn das wahrscheinlich jetzt nichts mit der unbehandelten Ausnahme zu tun hat. OK, Normalerweise gibt man den reservierten Speicher im Deskruktor wieder frei, nur wo ist der Destruktor in der Dialogklasse?</p>
<p>Den Speicher für das Array habe ich hier untergebracht:</p>
<pre><code class="language-cpp">CSerial_006Dlg::CSerial_006Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CSerial_006Dlg::IDD, pParent)
    , m_strSenden(_T(&quot;&quot;))
    , m_strEmpfangen(_T(&quot;&quot;))
    , testChar(new char[20+1])
{
    m_hIcon = AfxGetApp()-&gt;LoadIcon(IDI_ICON_EMS);
}
</code></pre>
<p>Statt</p>
<pre><code class="language-cpp">testChar(new char[buflen+1])
</code></pre>
<p>habe ich:</p>
<pre><code class="language-cpp">testChar(new char[20+1])
</code></pre>
<p>Da ich nicht weiß, wo ich die Variable &quot;buflen&quot; anlegen soll. Bitte jetzt nicht steinigen, denn ich bin was die Programmierung angeht noch ziehmlicher Anfänger.</p>
<p>Oliver</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208743</guid><dc:creator><![CDATA[oliher]]></dc:creator><pubDate>Fri, 12 Jan 2007 13:50:06 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich ein Edit Control mit einem void* füllen? on Fri, 12 Jan 2007 13:54:21 GMT]]></title><description><![CDATA[<p>Das Freigeben des Speichers erledigst du am einfachsten im Destruktor der Klasse.</p>
<p>Und eine konstante Angabe von &quot;20+1&quot; kannst du natürlich auch nehmen - allerdings solltest du dann aufpassen, daß du maximal 20 Zeichen von der ReadDate()-Methode anfordern darfst, sonst hat das abschließende '\0' keinen Platz mehr im reservierten Speicherblock (und das benötigst du, wenn du die Daten als C-String weiterverarbeiten willst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208745</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 12 Jan 2007 13:54:21 GMT</pubDate></item><item><title><![CDATA[Reply to Wie kann ich ein Edit Control mit einem void* füllen? on Fri, 12 Jan 2007 14:11:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>also erstmal vielen Dank für deine Hilfe</p>
<p>ich habe eben noch einen Fehler behoben. Somit bekomme ich jetzt auch keine unbehandelte Ausnahme mehr.</p>
<p>Und zwar hatte ich noch den alten Code drin:</p>
<pre><code class="language-cpp">int rlen = ReadData(&amp;testChar,20);
</code></pre>
<p>statt Deinen neuen Code zu nehmen, ohne &amp;:</p>
<pre><code class="language-cpp">int rlen = ReadData(testChar,20);
</code></pre>
<p>Jetzt bekomme ich auch Zeichen allerdings nicht die Zeichen, die ich gesendet habe.<br />
Sondern:</p>
<p>lauter Vierecke <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>Vielleicht sollte ich noch dazu sagen, das ich auf der Senden-Seite also mit dem anderen PC das Programm &quot;Hyperterminal&quot; verwende. Das Betriebssystem ist auf beiden Rechnern XP.</p>
<p>Oliver</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208754</guid><dc:creator><![CDATA[oliher]]></dc:creator><pubDate>Fri, 12 Jan 2007 14:11:31 GMT</pubDate></item></channel></rss>