<?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[Klassen in DLL exportieren mit static Variablen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin über ein Problem beim Exportieren von Klassen mit static Variablen gestolpert und weiß nicht wie ich es lösen soll... ich hab mal schnell ein einfach Programm mit dem selben Problem gebaut.</p>
<p>Ich habe eine DLL die sieht wie folgt aus:</p>
<p>TestClass.h</p>
<pre><code class="language-cpp">#pragma once

class __declspec(dllexport) CTestClass
{
private:
	static int	i;
public:
	CTestClass(void);
	~CTestClass(void);

	void Init();

	static int GetI() { return i; }
};
</code></pre>
<p>TestClass.cpp</p>
<pre><code class="language-cpp">#include &quot;TestClass.h&quot;

int	CTestClass::i = 0;

CTestClass::CTestClass(void)
{
}

CTestClass::~CTestClass(void)
{
}

void CTestClass::Init()
{
	i = 20;
}
</code></pre>
<p>dllmain.cpp</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

#include &quot;TestClass.h&quot;

BOOL APIENTRY DllMain( HMODULE hModule,
					  DWORD  ul_reason_for_call,
					  LPVOID lpReserved
					  )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}
</code></pre>
<p>Das Programm hierzu sieht wie folgt aus (link gegen die dll):</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;..\DLL\TestClass.h&quot;

int	CTestClass::i = 0;

int main()
{
	CTestClass testClass;
	testClass.Init();

	std::cout &lt;&lt; CTestClass::GetI();

	return 0;
}
</code></pre>
<p>Wenn ich die Zeile int CTestClass::i = 0; weglasse dann compeliert er natürlich nicht.<br />
Aber wenn ich sie drin lasse dann ist i == 0.<br />
Wie kann ich das umgehen?</p>
<p>Danke schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/211727/klassen-in-dll-exportieren-mit-static-variablen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 10:18:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211727.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Apr 2008 16:07:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen in DLL exportieren mit static Variablen on Sat, 26 Apr 2008 16:07:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin über ein Problem beim Exportieren von Klassen mit static Variablen gestolpert und weiß nicht wie ich es lösen soll... ich hab mal schnell ein einfach Programm mit dem selben Problem gebaut.</p>
<p>Ich habe eine DLL die sieht wie folgt aus:</p>
<p>TestClass.h</p>
<pre><code class="language-cpp">#pragma once

class __declspec(dllexport) CTestClass
{
private:
	static int	i;
public:
	CTestClass(void);
	~CTestClass(void);

	void Init();

	static int GetI() { return i; }
};
</code></pre>
<p>TestClass.cpp</p>
<pre><code class="language-cpp">#include &quot;TestClass.h&quot;

int	CTestClass::i = 0;

CTestClass::CTestClass(void)
{
}

CTestClass::~CTestClass(void)
{
}

void CTestClass::Init()
{
	i = 20;
}
</code></pre>
<p>dllmain.cpp</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

#include &quot;TestClass.h&quot;

BOOL APIENTRY DllMain( HMODULE hModule,
					  DWORD  ul_reason_for_call,
					  LPVOID lpReserved
					  )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}
</code></pre>
<p>Das Programm hierzu sieht wie folgt aus (link gegen die dll):</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;..\DLL\TestClass.h&quot;

int	CTestClass::i = 0;

int main()
{
	CTestClass testClass;
	testClass.Init();

	std::cout &lt;&lt; CTestClass::GetI();

	return 0;
}
</code></pre>
<p>Wenn ich die Zeile int CTestClass::i = 0; weglasse dann compeliert er natürlich nicht.<br />
Aber wenn ich sie drin lasse dann ist i == 0.<br />
Wie kann ich das umgehen?</p>
<p>Danke schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1498627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498627</guid><dc:creator><![CDATA[Der_Knob]]></dc:creator><pubDate>Sat, 26 Apr 2008 16:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL exportieren mit static Variablen on Sat, 26 Apr 2008 19:10:33 GMT]]></title><description><![CDATA[<p>also ich würd sagen, dass du nur in der DLL-cpp &quot;int CTestClass::i = 0;&quot;<br />
schreiben musst..</p>
<p>außerdem .. wird bei dir bei der Klasse aich mal &quot;__declspec(dllimport)&quot; benutzt ????<br />
vieleicht liegt es daran ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1498707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498707</guid><dc:creator><![CDATA[DataByte]]></dc:creator><pubDate>Sat, 26 Apr 2008 19:10:33 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL exportieren mit static Variablen on Sun, 27 Apr 2008 10:35:02 GMT]]></title><description><![CDATA[<p>wenn ich das int CTestClass::i = 0; in der main.cpp weglasse dann bekomm ich einen Linkfehler:</p>
<p>1&gt;main.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;private: static int CTestClass::i&quot; (?i@CTestClass@@0HA)&quot;.</p>
<p>Nur zur Info: die TestClass.cpp hab ich nicht im Test Programm included, sondern nur die Header Datei.</p>
<p>Hab mal das __declspec(dllexport) herausgenommen kommt aber trotzdem der Linkfehler von oben. Außerdem brauch ich ja das __declspec(dllexport) um die Klasse zu exportieren, oder nicht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1498917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498917</guid><dc:creator><![CDATA[Der_Knob]]></dc:creator><pubDate>Sun, 27 Apr 2008 10:35:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in DLL exportieren mit static Variablen on Sun, 27 Apr 2008 10:43:39 GMT]]></title><description><![CDATA[<p>Du musst dir einfach ein makro machen:</p>
<pre><code class="language-cpp">#ifdef DLL_EXPORTS 
#define DLL_API __declspec(dllexport) 
#else 
#define DLL_API __declspec(dllimport) 
#endif
</code></pre>
<p>Dann musst du in den Projekt-Eigenschaften der DLL nur noch &quot;DLL_EXPORTS&quot;<br />
definieren ...<br />
Wennn du jetzt die DLL kompilierst, wird &quot;__declspec(dllexport)&quot; benutzt<br />
und wenn du dein hauptprogramm kompilierst wird &quot;__declspec(dllimport)&quot;<br />
benutzt und dann müsste es funktionieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1498923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498923</guid><dc:creator><![CDATA[DataByte]]></dc:creator><pubDate>Sun, 27 Apr 2008 10:43:39 GMT</pubDate></item></channel></rss>