<?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[Objektzugriff und DLL&#x27;s]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin ziemlich neu in der Materie C/C++ und<br />
hab mal eine Frage bezügl. folgenden Problems:</p>
<p>Ich habe eine Klasse Matrix definiert und implementiert,<br />
die u.A. die Methoden</p>
<p>__declspec (dllexport) Matrix* Matrix::add(Matrix&amp; summand){...}</p>
<p>und</p>
<p>__declspec (dllexport) Matrix::Matrix(int zeilen, int spalten)</p>
<p>enthält.</p>
<p>Also einen Konstruktor und eine Methode zum Addieren zweier Matritzen,<br />
wobei - und das ist so ein bisschen mein Problem - die Addition auf ein<br />
Matrix-Objekt in der Form</p>
<p>Matrix* A = new Matrix(4,4);<br />
...<br />
Matrix* B = new Matrix(4,4);<br />
...</p>
<p>Matrix* Summe = A-&gt;add(*B);</p>
<p>angewendet werden soll.</p>
<p>Der ganze Quatsch steht also in einer DLL drinne.<br />
Wenn ich jetzt mit VC++ das Matrix-DLL-Projekt in ein anderes Anwendungs-<br />
projekt importiere und die Abhängigkeiten einstelle, dann funktioniert<br />
die Addition so wie oben beschrieben auch im Anwendungsprojekt.</p>
<p>Mein Problem ist aber, wenn ich das ganze dynamisch machen will,<br />
also mit loadlibrary nur die DLL lade, dann weiß ich nicht so genau,<br />
wie ich das umsetzen soll.<br />
Ich habe dann da z.B. eine auf add(Matrix&amp; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> gelinkte Funktion addMatrix<br />
(Matrix&amp; B), kann das aber ja nicht ausführen weil add(...) an ein Matrix - Objekt gebunden ist, welches die DLL nicht kennt.</p>
<p>Die einfachste Möglichkeit wäre natürlich die Addition z.B. so umzuschreiben,<br />
dass beide Matrizen an die DLL-Funktion übergeben werden.</p>
<p>Genau das wil ich aber nicht, da es ja statisch auch funktioniert (wenn VC<br />
es übernimmt).<br />
Ich hoffe ihr versteht mein Problem und könnt mir da weiterhelfen,<br />
ist bestimmt irgend was ganz dummes.</p>
<p>Viele Grüße,</p>
<p>Cool</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/83979/objektzugriff-und-dll-s</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 15:43:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/83979.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Aug 2004 23:24:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Wed, 25 Aug 2004 23:24:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin ziemlich neu in der Materie C/C++ und<br />
hab mal eine Frage bezügl. folgenden Problems:</p>
<p>Ich habe eine Klasse Matrix definiert und implementiert,<br />
die u.A. die Methoden</p>
<p>__declspec (dllexport) Matrix* Matrix::add(Matrix&amp; summand){...}</p>
<p>und</p>
<p>__declspec (dllexport) Matrix::Matrix(int zeilen, int spalten)</p>
<p>enthält.</p>
<p>Also einen Konstruktor und eine Methode zum Addieren zweier Matritzen,<br />
wobei - und das ist so ein bisschen mein Problem - die Addition auf ein<br />
Matrix-Objekt in der Form</p>
<p>Matrix* A = new Matrix(4,4);<br />
...<br />
Matrix* B = new Matrix(4,4);<br />
...</p>
<p>Matrix* Summe = A-&gt;add(*B);</p>
<p>angewendet werden soll.</p>
<p>Der ganze Quatsch steht also in einer DLL drinne.<br />
Wenn ich jetzt mit VC++ das Matrix-DLL-Projekt in ein anderes Anwendungs-<br />
projekt importiere und die Abhängigkeiten einstelle, dann funktioniert<br />
die Addition so wie oben beschrieben auch im Anwendungsprojekt.</p>
<p>Mein Problem ist aber, wenn ich das ganze dynamisch machen will,<br />
also mit loadlibrary nur die DLL lade, dann weiß ich nicht so genau,<br />
wie ich das umsetzen soll.<br />
Ich habe dann da z.B. eine auf add(Matrix&amp; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> gelinkte Funktion addMatrix<br />
(Matrix&amp; B), kann das aber ja nicht ausführen weil add(...) an ein Matrix - Objekt gebunden ist, welches die DLL nicht kennt.</p>
<p>Die einfachste Möglichkeit wäre natürlich die Addition z.B. so umzuschreiben,<br />
dass beide Matrizen an die DLL-Funktion übergeben werden.</p>
<p>Genau das wil ich aber nicht, da es ja statisch auch funktioniert (wenn VC<br />
es übernimmt).<br />
Ich hoffe ihr versteht mein Problem und könnt mir da weiterhelfen,<br />
ist bestimmt irgend was ganz dummes.</p>
<p>Viele Grüße,</p>
<p>Cool</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591452</guid><dc:creator><![CDATA[coldAsIce]]></dc:creator><pubDate>Wed, 25 Aug 2004 23:24:01 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 08:13:54 GMT]]></title><description><![CDATA[<p>Ich weiß nicht, wie das gehen sollte, wenn du nicht einen Haufen Wrapperfunktionen schreiben willst. Du könntest die DLL aber auf delay-load stellen, wenn dir das was nützt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591572</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Thu, 26 Aug 2004 08:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 08:40:53 GMT]]></title><description><![CDATA[<p>coldAsIce schrieb:</p>
<blockquote>
<p>Ich hoffe ihr versteht mein Problem und könnt mir da weiterhelfen,<br />
ist bestimmt irgend was ganz dummes.</p>
</blockquote>
<p>Dein Problem ist, dass Klassen und DLLs sich nicht gut vertragen. DLLs sollten unabhängig von der Programmiersprache benutzbar sein. Das ist bei deiner DLL aber überhaupt nicht der Fall, du könntest also genausogut eine statische LIB benutzen.</p>
<p>Mit LoadLibrary/GetProcAddress kannst du Member-Funktionen nur sehr umständlich laden.<br />
Du musst mit dem Dependency Walker die richtigen Namen der Funktionen herausfinden und mit reinterpret_cast konvertieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591599</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Thu, 26 Aug 2004 08:40:53 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 12:14:43 GMT]]></title><description><![CDATA[<p>und vielen Dank schon mal für die schnellen Antworten.</p>
<p>Ich kann mir schon vorstellen, dass das was ich vorhabe<br />
sehr umständlich ist, aber ich bin noch dabei mich mit<br />
c++ vertraut zu machen.</p>
<p>Wie funktioniert denn das was cd9000 da gesagt hat mit diesem<br />
reinterpret_cast?</p>
<p>Kann mir das vielleicht mal jemand anhand von einem Beispiel erklären<br />
oder kann mir jemand sagen wo es code gibt, der zeigt, wie man Memberfunktionen<br />
und den this* - Zeiger mit DLL's handeln kann.</p>
<p>Das normale Matrix* C = B-&gt;addMatrix(*A) funktioniert ja natürlich nicht,<br />
weil die von Klasse Matrix definierte Funktion ja add(Matrix&amp; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> heißt,<br />
die von der DLL exportierte und auf add(...) gelinkte Funktion aber den Namen addMatrix(...) hat.</p>
<p>Vielen Dank schonmal,<br />
Cool</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591803</guid><dc:creator><![CDATA[coldAsIce]]></dc:creator><pubDate>Thu, 26 Aug 2004 12:14:43 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 12:18:48 GMT]]></title><description><![CDATA[<p>ich hab das mit getProcAdress etc. auch alles gemacht und auch<br />
die richtigen Funktionsnamen mit dem Dependency Walker herausgesucht,<br />
mein Problem ist dass ich nicht weiß wie ich von außen auf die Memberfunktionen<br />
zugreifen soll.</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591814</guid><dc:creator><![CDATA[coldAsIce]]></dc:creator><pubDate>Thu, 26 Aug 2004 12:18:48 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 12:21:31 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=3630" rel="nofollow">Gerard</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=4" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" 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/591820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591820</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 26 Aug 2004 12:21:31 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 12:49:22 GMT]]></title><description><![CDATA[<p>Ich glaub, du musst dir eine Funktion schreiben, z.B. MYCLASS* CreateMyClass();, die dir einen Zeiger auf eine erstellte Instanz der Klasse zurückgibt. Die lädst du dann mit GetProcAddress und bekommst beim Aufruf eine Instanz der Klasse. Am besten gibst du der Dll dann auch noch eine void FreeMyClass(MYCLASS*); -Funktion um die Instanz wieder zu löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591856</guid><dc:creator><![CDATA[D*niel *chumann]]></dc:creator><pubDate>Thu, 26 Aug 2004 12:49:22 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 13:25:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>eine Funktion createMyClass hab ich,<br />
es ist ja der Konstruktor Matrix(int zeilen, int spalten)!<br />
Dieser wird beim Aufruf der DLL gelinkt als<br />
Matrix(int, int) und gibt wie erwartet einen Zeiger auf<br />
ein Matrix-Objekt zurück.<br />
Das ist ja logisch.</p>
<p>Mein Problem ist wirklich, dass ich nicht weiß,<br />
wie ich der DLL klarmachen soll, das der Funktionsaufruf von<br />
addMatrix(Matrix&amp; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> auf ein Matrix-Objekt ausgeführt werden muß,<br />
weil addMatrix(...) einen Funktionszeiger auf die Memberfunktion add(...)<br />
der Klasse Matrix zurückgibt (die ja in der DLL gekapselt ist).</p>
<p>Irre ich mich oder ist dies vielleicht gar nicht möglich, ist es<br />
evtl. nur möglich die Methode add als add(Matrix&amp; A, Matrix&amp; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> zu implementieren (und dementsprechend die Methoden Matrix::getZeilen(void)<br />
nur als static Matrix::getZeilen(*Matrix A) und Matrix::print(void) als<br />
static Matrix::print(*Matrix A)) ?</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591910</guid><dc:creator><![CDATA[coldAsIce]]></dc:creator><pubDate>Thu, 26 Aug 2004 13:25:06 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 14:21:39 GMT]]></title><description><![CDATA[<p>Du inkludierst die Header-Datei deiner Klasse in deinem Anwendungsprojekt. Dort rufst du GetProcAddress mit &quot;CreateMyClass&quot; auf und erhältst so einen Zeiger auf die Funktion, die dir eine Instanz der Klasse zurückgibt. Mit der Instanz kannst du dann das machen, was du schon als allererstes geschrieben hast:</p>
<pre><code class="language-cpp">Matrix* A = CreateMyClass(4,4); 
//... 
Matrix* B = CreateMyClass(4,4); 
//... 

Matrix* Summe = A-&gt;add(*B);
</code></pre>
<p>CreateMyClass ist in der Dll und sieht z.B. so aus:</p>
<pre><code class="language-cpp">Matrix* CreateMyClass(int a, int b){
    return new Matrix(a, b);
}
</code></pre>
<p>Müsste doch so gehen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/591992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/591992</guid><dc:creator><![CDATA[D*niel *chumann]]></dc:creator><pubDate>Thu, 26 Aug 2004 14:21:39 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 14:54:16 GMT]]></title><description><![CDATA[<p>Also so ähnlich hab ichs ja probiert,</p>
<p>das ist genau mein Problem, dass es so nicht geht.</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/592040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/592040</guid><dc:creator><![CDATA[coldAsIce]]></dc:creator><pubDate>Thu, 26 Aug 2004 14:54:16 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 16:15:52 GMT]]></title><description><![CDATA[<p>Das geht aber nur, wenn jede Methode virtuell ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/592161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/592161</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Thu, 26 Aug 2004 16:15:52 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 21:11:59 GMT]]></title><description><![CDATA[<p>Was bedeuted virtuell?</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/592572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/592572</guid><dc:creator><![CDATA[coldAsIce]]></dc:creator><pubDate>Thu, 26 Aug 2004 21:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Thu, 26 Aug 2004 21:22:32 GMT]]></title><description><![CDATA[<p>coldAsIce schrieb:</p>
<blockquote>
<p>Was bedeuted virtuell?</p>
</blockquote>
<p>Wenn &quot;virtual&quot; vor der Methode steht, ist sie virtuell.<br />
Das bedeutet, dass du über Basisklassenzeiger Methoden einer abgeleiteten Klasse aufrufen kannst. Bsp.:</p>
<pre><code class="language-cpp">class A
{
  public:
    virtual void foo() { cout &lt;&lt; &quot;a&quot;; };
};
class B : public A
{
  public:
    void foo() { cout &lt;&lt; &quot;b&quot;; }; // virtual muss man hier nicht wiederholen
}

void bar()
{
  B b;
  A* a = &amp;b;
  a-&gt;foo(); // gibt &quot;b&quot; aus, obwohl es ein A* ist.
}
</code></pre>
<p>p.s.: Was virtual bedeutet, solltest du IMHO aber wissen, bevor du dich mit der WinAPI befasst. Das ist C++-Grundwissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/592581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/592581</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Thu, 26 Aug 2004 21:22:32 GMT</pubDate></item><item><title><![CDATA[Reply to Objektzugriff und DLL&#x27;s on Fri, 27 Aug 2004 15:26:15 GMT]]></title><description><![CDATA[<p>Na ja,</p>
<p>müsste ich vielleicht wissen.<br />
Komme aber von Java und da gibt es<br />
dieses Schlüsselwort nicht.<br />
Ich will mich ja auch nur etwas mit<br />
den verschiedenen Möglichkeiten, die c++ bietet,<br />
vertraut machen (wegen Diplomarbeit), darum auch das ganze als<br />
DLL mit dynamischer Bindung.<br />
Ich sehe trotzdem immer noch nicht den Vorteil bei<br />
meinem Beispiel mit diesem Schlüsselwort zu arbeiten, da<br />
ich überhaupt nichts vererbe.</p>
<p>Ich denke fast, es geht nur wenn ich die Methoden so umschreibe,<br />
dass ich Zeiger auf beide Matrixobjekte übergebe.<br />
Ist zwar kein Problem, aber es muß auch anders gehen.<br />
Wie gesagt, wenn ich das DLL-Projekt mit VC in das zugreifende<br />
Projekt lade, geht es ja auch.<br />
Ich verwende dann allerdings nicht loadlibrary.</p>
<p>Falls doch noch jemandem was einfällt wäre ich froh, wenn er<br />
hier posten würde.</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/593305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/593305</guid><dc:creator><![CDATA[coldAsIce]]></dc:creator><pubDate>Fri, 27 Aug 2004 15:26:15 GMT</pubDate></item></channel></rss>