<?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[Pointer als property]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich würde gerne in einer Komponenete einen Pointer als<br />
property declarieren.</p>
<pre><code class="language-cpp">private:
unsigned char *PData;
__published:
	__property unsigned char *Data = {read=PData,write=PData};
</code></pre>
<p>Leider gibt es da die Fehlermeldung Kein zulässiger Typ.<br />
Ist das überhaupt möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/126307/pointer-als-property</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 18:47:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/126307.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Nov 2005 10:35:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer als property on Mon, 14 Nov 2005 10:35:20 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich würde gerne in einer Komponenete einen Pointer als<br />
property declarieren.</p>
<pre><code class="language-cpp">private:
unsigned char *PData;
__published:
	__property unsigned char *Data = {read=PData,write=PData};
</code></pre>
<p>Leider gibt es da die Fehlermeldung Kein zulässiger Typ.<br />
Ist das überhaupt möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/917133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/917133</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Mon, 14 Nov 2005 10:35:20 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Mon, 14 Nov 2005 11:30:59 GMT]]></title><description><![CDATA[<p>Möglich ja, aber schau dir mal genau deinen Code an <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>Allerdings verstehe ich nicht, warum du eine char*-Property verwenden willst. Was spricht denn z.B. gegen AnsiString?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/917163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/917163</guid><dc:creator><![CDATA[Reyx]]></dc:creator><pubDate>Mon, 14 Nov 2005 11:30:59 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Mon, 14 Nov 2005 21:13:36 GMT]]></title><description><![CDATA[<blockquote>
<p>Allerdings verstehe ich nicht, warum du eine char*-Property verwenden willst. Was spricht denn z.B. gegen AnsiString?</p>
</blockquote>
<p>Ich möchte der Componente einen Pionter auf ein unsigned char Array für<br />
die Datenspeicherung übergeben, es wird auch noch eine Eigenschaft<br />
DataCount geben.<br />
Meine Idee ist, eine Componente zur Datencommunication via Comport mit einem Controller.<br />
In dieser Componente gibt es ein Thread Object welches von der<br />
Componente intervalmässig instanziert wird.<br />
In diesem Thread werden dann n-Daten vom Com Port in das char Array dessen<br />
Pointer übergeben wurde gelesen, ist dieses geschehen wird es der Componente über ein Event mitgeteilt<br />
Draufhin wird ein Event OnData ausgelöst.</p>
<blockquote>
<p>Möglich ja, aber schau dir mal genau deinen Code an</p>
</blockquote>
<p>Wieso, ich instanziere einen unsigned char Pointer PData.<br />
Dann gibt es die Property des gleichen Typs.<br />
__property unsigned char *Data = {read=PData,write=PData};<br />
Was ist den da falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/917875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/917875</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Mon, 14 Nov 2005 21:13:36 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Tue, 15 Nov 2005 08:07:34 GMT]]></title><description><![CDATA[<p>aus der hilfe:</p>
<blockquote>
<p>Hinweis:</p>
<p>In einem __published-Abschnitt sind weder Konstruktoren noch Destruktoren erlaubt. Dagegen sind Eigenschaften, intrinsische Pascal-Elemente oder von der VCL oder CLX abgeleitete Datenelemente, Elementfunktionen und Closures zulässig. Felder, die in einem __published-Abschnitt definiert werden, müssen von einem Klassentyp sein. Eigenschaften, die in einem __published<br />
-Abschnitt definiert werden, können <strong>keine Array-Eigenschaften</strong> sein. Der Typ einer Eigenschaft, die in einem __published-Abschnitt definiert wird, muß ein ordinaler Typ, ein Real-Typ, ein String-Typ, ein kleiner Mengentyp, ein Klassentyp oder ein Methodenzeigertyp sein.</p>
</blockquote>
<p>d.h. mache die eigenschaft doch <strong>private</strong> und stelle im <strong>public</strong> teil deiner kompo eine set/get-funktion bereit um den zugriff zu gewähren. deinen <strong>OnData</strong>-event kannst dann den zeiger auf diese daten übergeben und der user kann sie auslesen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/918150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/918150</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Tue, 15 Nov 2005 08:07:34 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Tue, 15 Nov 2005 08:29:22 GMT]]></title><description><![CDATA[<p>Was Du hingegen schon machen kannst wäre:</p>
<pre><code class="language-cpp">__published:
        __property int DataCount = {read = getDataCount};
        __property unsigned char Data[int Index] = {read = getData, write = setData};
private:
        int getDataCount();
        unsigned char getData();
        void setData(unsigned char Value);
</code></pre>
<p>Wie Du die Daten dann tatsächlich speicherst, ist Deine Sachen.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/918181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/918181</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Tue, 15 Nov 2005 08:29:22 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Tue, 15 Nov 2005 09:34:52 GMT]]></title><description><![CDATA[<p>das ist natürlich auch ne möglichkeit...</p>
<p>allerdings wird dann bei jedem element zugriff (bei jeden einzelnen zeichen) auf das array immer die get/set-funktion aufgerufen, was sich extrem auf die geschwindigkeit niederschlägt und deinen ganzen programmablauf verlangsamt.</p>
<p>das wird z.b. sehr schön bei der <strong>Pixels</strong>-Eigenschaft von <strong>TCanvas</strong> deutlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/918249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/918249</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Tue, 15 Nov 2005 09:34:52 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Tue, 15 Nov 2005 09:42:34 GMT]]></title><description><![CDATA[<p>Beim COM-Port spielt die Geschwindigkeit vielleicht nicht dieselbe Rolle wie bei Grafikoperationen.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/918260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/918260</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Tue, 15 Nov 2005 09:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Tue, 15 Nov 2005 09:55:14 GMT]]></title><description><![CDATA[<p>Hier könnte man die Get/Set-Methoden inline machen. Da dürften dann auch keine Geschwindigkeitsnachteile auftreten.<br />
GetPixel ist hier eher ein schlechtes Beispiel, da hier ein wenig mehr gemacht wird als nur auf ein Pixel zuzugreifen (es wird auch auf Windows::GetPixel zugegriffen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/918273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/918273</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 15 Nov 2005 09:55:14 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Tue, 15 Nov 2005 19:55:46 GMT]]></title><description><![CDATA[<p>Oder so:</p>
<pre><code class="language-cpp">typedef unsigned char *TPData;

private: 
  TPData PData; 
__public: 
    __property TPData Data = {read=PData,write=PData};
</code></pre>
<p>Aber Vorsicht!!!</p>
<p>- im Constructor PData = NULL;</p>
<p>- vor schreiben in PData testen, ob der Zeiger gültig ist!!!<br />
Sonst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>- Wehe, wnn der Puffer zu klein ist!!!</p>
<p>NIMM LIEBER AnsiString</p>
]]></description><link>https://www.c-plusplus.net/forum/post/918621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/918621</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Tue, 15 Nov 2005 19:55:46 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Tue, 15 Nov 2005 22:25:51 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">typedef unsigned char *TPData;

private:
  TPData PData;
__public:
    __property TPData Data = {read=PData,write=PData};
</code></pre>
</blockquote>
<p>Dafür brauche ich aber nicht vorher einen Datentyp unsigned char *TPData definieren, das geht auch direkt.</p>
<pre><code class="language-cpp">private:
unsigned char *Pdata;
TTimer *Timer;
void __fastcall TimerEvent(TObject *Sender);
protected:
public:
	__property unsigned char *data = {read=Pdata,write=Pdata};
	__fastcall TThreadCom(TComponent* Owner);
__published:
</code></pre>
<blockquote>
<p>Hier könnte man die Get/Set-Methoden inline machen.<br />
Da dürften dann auch keine Geschwindigkeitsnachteile auftreten.</p>
</blockquote>
<p>Was genau bedeutet inline und warum wird wird das ganze dann schneller?</p>
<pre><code class="language-cpp">__inline void __fastcall SetIMPosValue(int NewPosValue); //Setter

//---------------------------------------------------------------------------
__inline void __fastcall TInstrument::SetIMPosValue(int NewPosValue)
{
     IMPosValue = NewPosValue;
     Repaint();
}
</code></pre>
<p>Gibt beim erzeugen keine Fehlermeldung, benutze ich die Komponenete<br />
kommt -unresolved externel-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/918720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/918720</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Tue, 15 Nov 2005 22:25:51 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Thu, 17 Nov 2005 09:13:36 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Lass einfach die Unterstriche vor inline weg. Alternativ kann man auch auf inline ganz verzichten und einfach auch die Definition der Funktion in den Header schreiben. All dies ist allerdings keine Garantie dafür, dass die Funktion wirklich inline wird. Das entscheidet dann der Compiler.<br />
In deinem Fall macht es aber wenig Sinn die Funktion inline zu machen, da du Repaint() aufrufst. Diese Funktion braucht soviel Zeit, dass der eventuelle Geschwindigkeitsgewinn einer inline-Funktion vernachlässigbar ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/919822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/919822</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 17 Nov 2005 09:13:36 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer als property on Thu, 17 Nov 2005 11:13:10 GMT]]></title><description><![CDATA[<p>Da die Funktion Repaint() soviel Zeit verbraucht, spricht dann was dagegen<br />
meine Funktion die z.B. die Grafik neu zeichnet direkt vom Setter auszuführen<br />
anstatt über die Methode Paint.<br />
Funktioniert dann auch DoubleBuffered noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/919912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/919912</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Thu, 17 Nov 2005 11:13:10 GMT</pubDate></item></channel></rss>