<?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[Frage zur Speicherzuweisung ...]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich einen Pointer erzeuge, hat dieser z.B. die Adresse<br />
0x0012fd68 gespeichert. Wird diese Adressenangabe nun auf den<br />
gesamten Speicher von Windows bezogen, oder nur auf einen Bruchteil,<br />
der dem Programm zugewiesen wurde ?</p>
<p>Wenn zweiteres:<br />
Wie übergebe ich dann einen Pointer von einer DLL ins Hauptprogramm ?<br />
Da müsste der Adresswert ja irgendwohin zeigen ? und nicht auf den richtigen<br />
Wert ...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/85638/frage-zur-speicherzuweisung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 02:47:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/85638.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Sep 2004 11:02:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Speicherzuweisung ... on Sat, 11 Sep 2004 11:02:55 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich einen Pointer erzeuge, hat dieser z.B. die Adresse<br />
0x0012fd68 gespeichert. Wird diese Adressenangabe nun auf den<br />
gesamten Speicher von Windows bezogen, oder nur auf einen Bruchteil,<br />
der dem Programm zugewiesen wurde ?</p>
<p>Wenn zweiteres:<br />
Wie übergebe ich dann einen Pointer von einer DLL ins Hauptprogramm ?<br />
Da müsste der Adresswert ja irgendwohin zeigen ? und nicht auf den richtigen<br />
Wert ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/604465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/604465</guid><dc:creator><![CDATA[thenoname]]></dc:creator><pubDate>Sat, 11 Sep 2004 11:02:55 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherzuweisung ... on Sat, 11 Sep 2004 11:49:04 GMT]]></title><description><![CDATA[<p>thenoname schrieb:</p>
<blockquote>
<p>wenn ich einen Pointer erzeuge, hat dieser z.B. die Adresse<br />
0x0012fd68 gespeichert. Wird diese Adressenangabe nun auf den<br />
gesamten Speicher von Windows bezogen, oder nur auf einen Bruchteil,<br />
der dem Programm zugewiesen wurde ?</p>
</blockquote>
<p>Der Zeiger zeigt auf den &quot;Bruchteil&quot;, den Windows dir zugeteilt hat. Dieser &quot;Bruchteil&quot; kann aber bis zu 2GB (manchmal auch 3GB) groß werden.</p>
<blockquote>
<p>Wenn zweiteres:<br />
Wie übergebe ich dann einen Pointer von einer DLL ins Hauptprogramm ?<br />
Da müsste der Adresswert ja irgendwohin zeigen ? und nicht auf den richtigen<br />
Wert ...</p>
</blockquote>
<p>Das wurde von Windows bereits gelöst. Die DLL landet im selben Adressbereich wie die exe, deswegen sind Pointer austauschbar.<br />
Anders sieht es aus, wenn du mit SendMessage o.ä. einem anderen Programm einen Pointer schickst. Dann erhält das Programm meist einen ungültigen Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/604504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/604504</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 11 Sep 2004 11:49:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherzuweisung ... on Sat, 11 Sep 2004 12:07:50 GMT]]></title><description><![CDATA[<p>nun habe ich folgendes Problem:<br />
ein Pointer auf DWORD funktioniert<br />
ein Pointer auf ein DWORD array [3]<br />
ergibt nach der Übergabe wirre Zuordnungen ? und andere Werte.</p>
<p>In der DLL selbst läuft die Abfrage der Werte reibungslos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/604513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/604513</guid><dc:creator><![CDATA[thenoname]]></dc:creator><pubDate>Sat, 11 Sep 2004 12:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherzuweisung ... on Sat, 11 Sep 2004 12:32:12 GMT]]></title><description><![CDATA[<p>Aber der Speicherbereich wird nicht lokal reserviert, sondern ist zum Zeitpunkt des Zugriffs aus der DLL noch gültig?! Evtl. hilft auch ein wenig Code <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/604535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/604535</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Sat, 11 Sep 2004 12:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherzuweisung ... on Sat, 11 Sep 2004 13:08:39 GMT]]></title><description><![CDATA[<p>Zwar habe ich schon unter Spiele diesen Code stehen, trotzdem nochmal hier:</p>
<p>DLL:</p>
<pre><code>zum sharen der Struktur: (DIEFFECT ist eine Struktur aus DirectInput)

#pragma bss_seg (&quot;shared&quot;)   //bss_seg für nicht initiallisierte Variablen
DIEFFECT diEffect;
#pragma bss_seg()
#pragma comment(linker,&quot;/SECTION:shared,RWS&quot;)

weiter unten:

	ZeroMemory( &amp;diEffect, sizeof(diEffect) );
	DWORD Axes[2] = { DIJOFS_X, DIJOFS_Y };
	LONG Direction[2] = { 90 * DI_DEGREES, 90 * DI_DEGREES };
	diConstant.lMagnitude			= DI_FFNOMINALMAX;
	diEffect.dwSize					= sizeof(DIEFFECT);
	diEffect.dwFlags				= DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS;
	diEffect.dwDuration				= (DWORD)(2 * DI_SECONDS);
	diEffect.dwGain					= DI_FFNOMINALMAX;
	diEffect.rglDirection			= Direction;
	diEffect.dwTriggerButton		= DIEB_NOTRIGGER;
	diEffect.dwTriggerRepeatInterval= 0;
	diEffect.cAxes					= 2;
	diEffect.rgdwAxes				= Axes;
	diEffect.cbTypeSpecificParams	= sizeof(DICONSTANTFORCE);
	diEffect.lpvTypeSpecificParams	= &amp;diConstant;

(an dieser Stelle lassen sich diEffect.rgdwAxes und diEffect.rglDirection abfragen)

Dann Übergaberoutine in DLL:

DIEFFECT getEffect (void)
{
    return diEffect;
}
</code></pre>
<p>DIJOFS_X ist 0 und DIJOFS_Y ist 4 als Offset.</p>
<p>Ich lasse mir nun im Hauptprogramm die Struktur im Debugger anzeigen und statt<br />
der 0 auf die der Pointer noch in der DLL zeigt stehen dort andere Werte,<br />
die sich auch noch abwechseln. Dementsprechen nimmt die Auslesevariable natürlich<br />
diesen wirren Wert an.<br />
Alle anderen Pointer der Struktur funktionieren Tadellos !!!</p>
<p>Ich könnt jetzt natürlich eine Routine speziell zum auslesen der Pointer<br />
schreiben, die vorher in der DLL richtig gelesen werden. Dies ist aber<br />
irgendwie nicht so mein Stil ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/604565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/604565</guid><dc:creator><![CDATA[thenoname]]></dc:creator><pubDate>Sat, 11 Sep 2004 13:08:39 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherzuweisung ... on Sat, 11 Sep 2004 13:19:18 GMT]]></title><description><![CDATA[<p>thenoname schrieb:</p>
<blockquote>
<pre><code class="language-cpp">zum sharen der Struktur: (DIEFFECT ist eine Struktur aus DirectInput)

#pragma bss_seg (&quot;shared&quot;)   //bss_seg für nicht initiallisierte Variablen
DIEFFECT diEffect;
#pragma bss_seg()
#pragma comment(linker,&quot;/SECTION:shared,RWS&quot;)
</code></pre>
</blockquote>
<p>Es ist nicht nötig die Variable in ein extra Segment zu stecken.<br />
Das brauchst du nur, wenn du erreichen willst, dass auf diEffect von verschiedenen Programmen zugegriffen werden kann. In deinem Fall könnte das shared-segment Fehler verursachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/604570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/604570</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 11 Sep 2004 13:19:18 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherzuweisung ... on Sat, 11 Sep 2004 13:23:26 GMT]]></title><description><![CDATA[<p>ja, ich greife von verschiedenen Programmen darauf zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/604574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/604574</guid><dc:creator><![CDATA[thenoname]]></dc:creator><pubDate>Sat, 11 Sep 2004 13:23:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherzuweisung ... on Sat, 11 Sep 2004 18:01:19 GMT]]></title><description><![CDATA[<p>Wenn du DWORD Axes[2] deklarierst und dann in diEffect.rgdwAxes Axes angibst, so gibst du (im Gegensatz zur Deklaration als DWORD Axes) nur einen Pointer auf DWORD an. Da Axes aber nicht im shared-Memory Bereich liegt, kannst du nachher auch nicht mehr darauf zugreifen. Also einfach DWORD Axes[2] = {0} in den shared-Bereich <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/604744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/604744</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Sat, 11 Sep 2004 18:01:19 GMT</pubDate></item></channel></rss>