<?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[Problem beim Einbinden einer eigenen DLL]]></title><description><![CDATA[<p>Hallo an alle da draußen,</p>
<p>Ich habe eine eigene DLL geschrieben, die ich auch soweit erfolgreich kompilieren und erstellen konnte. Nun habe ich aber ein großes Problem beim Importieren dieser DLL in meine Windows Andwendung.<br />
Diese DLL beinhaltet einige Klassen, die ich zum Arbeiten in der Windows Anwendung benötige(Anwendung ist ein Win32 API Projekt ). Hier kurz ein der Klassendefinitionen der DLL</p>
<pre><code class="language-cpp">//MyString.h
#pragma once
#include &quot;stdafx.h&quot;

class __declspec(dllexport) MyString
{
public:

	//konstruktoren
	MyString();
	MyString (const char * string) ;

usw.
</code></pre>
<p>Wie gesagt die DLL lässt sich erstellen, das scheint zu funktionieren, die Klasse sollte exportiert werden können.</p>
<p>Nun kurz der Anfangscode der Windows Anwendung</p>
<pre><code class="language-cpp">// TestDLL.cpp : Definiert den Einstiegspunkt für die Anwendung.
//

#include &quot;stdafx.h&quot;
#include &quot;TestDLL.h&quot;
#include &quot;ErrorClass.h&quot;
#include &quot;MyString.h&quot;
#include &quot;RecordField.h&quot;
#include &quot;ScimoreInterface.h&quot;
#include &quot;StringArray.h&quot;

#define MAX_LOADSTRING 100

MyString TestString (TEXT(&quot;Test&quot;));

usw.
</code></pre>
<p>Soweit spuckt der Compiler keinen Fehler aus. Ich kann eine Instanz der Klasse erstellen. Der Header, in der die Klasse MyString deklariert wird, wird auch inkludiert( anstatt __declspec(dllexport) steht an der betreffenden Stelle jetzt ein __declspec(dllimport)). Mit der Importbibliothek dürfte es auch keine Probleme geben, sie sollte ebenfalls inkludiert sein. Ich habe der Instanz schonmal mit dem Debugger hinterhergeschnüffelt, das Objekt wird korrekt initialisiert.<br />
Doch wenn ich jetzt eine Elementfunktion der Instanz diesesr Klasse aufrufen möchte, dann lässt sich der code nicht mehr compilieren.</p>
<pre><code class="language-cpp">// TestDLL.cpp : Definiert den Einstiegspunkt für die Anwendung.
//

#include &quot;stdafx.h&quot;
#include &quot;TestDLL.h&quot;
#include &quot;ErrorClass.h&quot;
#include &quot;MyString.h&quot;
#include &quot;RecordField.h&quot;
#include &quot;ScimoreInterface.h&quot;
#include &quot;StringArray.h&quot;

#define MAX_LOADSTRING 100

MyString TestString (TEXT(&quot;Test&quot;));
TestString.GetString();
</code></pre>
<p>Folgende Fehlermeldung erscheint ( GetString() ist 100% deklariert und implementiert ) :</p>
<pre><code>1&gt;d:\arbeit\c++ programmiertes\flugleiter manager\flugleitermanager\testdll\testdll.cpp(16) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'

1&gt;d:\arbeit\c++ programmiertes\flugleiter manager\flugleitermanager\testdll\testdll.cpp(16) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.

1&gt;d:\arbeit\c++ programmiertes\flugleiter manager\flugleitermanager\testdll\testdll.cpp(16) : error C2371: 'TestString': Neudefinition; unterschiedliche Basistypen

1&gt;        d:\arbeit\c++ programmiertes\flugleiter manager\flugleitermanager\testdll\testdll.cpp(15): Siehe Deklaration von 'TestString'
</code></pre>
<p>Der Compiler scheint mir also sagen zu wollen, dass er mein gerade instantiertes Objekt nicht mehr kennen will, denkt ich will ein neues Objekt erstellen und wirft mir dann vor, dass ich keinen Typenspezifizierer angegeben hätte und meckert, dass ich den Namen ja vorher schonmal vergeben habe.</p>
<p>Ok wo liegt jetzt das Problem ? Hört sich für mich an, dass irgendwelche Deklarationen in der Headerdatei nicht korrekt sind. Da ich diese Klasse aber schon umfassend debuggt habe, dürfte es daran eigentlich nicht liegen. Oder vielleicht doch, oder habe ich die Klasse nicht korrekt exportiert beim Erstellen der DLL ? Muss ich das __declspec(dllexport) auch bei der Implementation der Elementfunktionen anwenden? Ich habe keine Ahnung und würde mich freuen wenn ihr Rat wisst.</p>
<p>Grüße jackis</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244410/problem-beim-einbinden-einer-eigenen-dll</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 04:00:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244410.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Jun 2009 21:54:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim Einbinden einer eigenen DLL on Mon, 29 Jun 2009 21:54:44 GMT]]></title><description><![CDATA[<p>Hallo an alle da draußen,</p>
<p>Ich habe eine eigene DLL geschrieben, die ich auch soweit erfolgreich kompilieren und erstellen konnte. Nun habe ich aber ein großes Problem beim Importieren dieser DLL in meine Windows Andwendung.<br />
Diese DLL beinhaltet einige Klassen, die ich zum Arbeiten in der Windows Anwendung benötige(Anwendung ist ein Win32 API Projekt ). Hier kurz ein der Klassendefinitionen der DLL</p>
<pre><code class="language-cpp">//MyString.h
#pragma once
#include &quot;stdafx.h&quot;

class __declspec(dllexport) MyString
{
public:

	//konstruktoren
	MyString();
	MyString (const char * string) ;

usw.
</code></pre>
<p>Wie gesagt die DLL lässt sich erstellen, das scheint zu funktionieren, die Klasse sollte exportiert werden können.</p>
<p>Nun kurz der Anfangscode der Windows Anwendung</p>
<pre><code class="language-cpp">// TestDLL.cpp : Definiert den Einstiegspunkt für die Anwendung.
//

#include &quot;stdafx.h&quot;
#include &quot;TestDLL.h&quot;
#include &quot;ErrorClass.h&quot;
#include &quot;MyString.h&quot;
#include &quot;RecordField.h&quot;
#include &quot;ScimoreInterface.h&quot;
#include &quot;StringArray.h&quot;

#define MAX_LOADSTRING 100

MyString TestString (TEXT(&quot;Test&quot;));

usw.
</code></pre>
<p>Soweit spuckt der Compiler keinen Fehler aus. Ich kann eine Instanz der Klasse erstellen. Der Header, in der die Klasse MyString deklariert wird, wird auch inkludiert( anstatt __declspec(dllexport) steht an der betreffenden Stelle jetzt ein __declspec(dllimport)). Mit der Importbibliothek dürfte es auch keine Probleme geben, sie sollte ebenfalls inkludiert sein. Ich habe der Instanz schonmal mit dem Debugger hinterhergeschnüffelt, das Objekt wird korrekt initialisiert.<br />
Doch wenn ich jetzt eine Elementfunktion der Instanz diesesr Klasse aufrufen möchte, dann lässt sich der code nicht mehr compilieren.</p>
<pre><code class="language-cpp">// TestDLL.cpp : Definiert den Einstiegspunkt für die Anwendung.
//

#include &quot;stdafx.h&quot;
#include &quot;TestDLL.h&quot;
#include &quot;ErrorClass.h&quot;
#include &quot;MyString.h&quot;
#include &quot;RecordField.h&quot;
#include &quot;ScimoreInterface.h&quot;
#include &quot;StringArray.h&quot;

#define MAX_LOADSTRING 100

MyString TestString (TEXT(&quot;Test&quot;));
TestString.GetString();
</code></pre>
<p>Folgende Fehlermeldung erscheint ( GetString() ist 100% deklariert und implementiert ) :</p>
<pre><code>1&gt;d:\arbeit\c++ programmiertes\flugleiter manager\flugleitermanager\testdll\testdll.cpp(16) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'

1&gt;d:\arbeit\c++ programmiertes\flugleiter manager\flugleitermanager\testdll\testdll.cpp(16) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.

1&gt;d:\arbeit\c++ programmiertes\flugleiter manager\flugleitermanager\testdll\testdll.cpp(16) : error C2371: 'TestString': Neudefinition; unterschiedliche Basistypen

1&gt;        d:\arbeit\c++ programmiertes\flugleiter manager\flugleitermanager\testdll\testdll.cpp(15): Siehe Deklaration von 'TestString'
</code></pre>
<p>Der Compiler scheint mir also sagen zu wollen, dass er mein gerade instantiertes Objekt nicht mehr kennen will, denkt ich will ein neues Objekt erstellen und wirft mir dann vor, dass ich keinen Typenspezifizierer angegeben hätte und meckert, dass ich den Namen ja vorher schonmal vergeben habe.</p>
<p>Ok wo liegt jetzt das Problem ? Hört sich für mich an, dass irgendwelche Deklarationen in der Headerdatei nicht korrekt sind. Da ich diese Klasse aber schon umfassend debuggt habe, dürfte es daran eigentlich nicht liegen. Oder vielleicht doch, oder habe ich die Klasse nicht korrekt exportiert beim Erstellen der DLL ? Muss ich das __declspec(dllexport) auch bei der Implementation der Elementfunktionen anwenden? Ich habe keine Ahnung und würde mich freuen wenn ihr Rat wisst.</p>
<p>Grüße jackis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734792</guid><dc:creator><![CDATA[jackis]]></dc:creator><pubDate>Mon, 29 Jun 2009 21:54:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Einbinden einer eigenen DLL on Fri, 03 Jul 2009 07:00:29 GMT]]></title><description><![CDATA[<p>Die Frage wäre wohl im WinAPI-Forum besser aufgehoben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736394</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Fri, 03 Jul 2009 07:00:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Einbinden einer eigenen DLL on Fri, 03 Jul 2009 07:12:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">MyString TestString (TEXT(&quot;Test&quot;)); 
TestString.GetString();
</code></pre>
<p>Du kannst doch an dieser Stelle keine Funktionen aufrufen!</p>
<p><strong>Edit:</strong><br />
Mit an dieser Stelle meine ich im cpp File irgendwo im Nirvana...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736395</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 03 Jul 2009 07:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Einbinden einer eigenen DLL on Mon, 06 Jul 2009 10:43:06 GMT]]></title><description><![CDATA[<p>Danke nochmal für die Antworten, diese Dämlichkeit meinerseits, ist mir dann irgendwann den nächsten Tag auch aufgefallen. Ich muss ehrlicherweise sagen, dass ich das vorher gar nicht wusste, dass Funktionen nicht außerhalb von WinMain aufgerufen werden dürfen, ich bin aber auch noch nie darüber gestolpert, weil ich es schlichtweg nie ausprobiert habe. Nichtsdestotrotz, die DLL lässt sich natürlich einbinden und läuft auch wie gewollt</p>
<p>Schönen tag noch</p>
<p>jackis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737836</guid><dc:creator><![CDATA[jackis]]></dc:creator><pubDate>Mon, 06 Jul 2009 10:43:06 GMT</pubDate></item></channel></rss>