<?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[VS2010 - DLL Erstellung und Verwendung]]></title><description><![CDATA[<p>Hallo Gemeinde,</p>
<p>ich habe ein Problem mit der Erstellung und Verwendung einer DLL. Es ist mein erster Versuch und ich blicke einfach nicht richtig durch, im Internet habe ich mehrere Ansetze gefunden, aber den gemeinsamen Nenner konnte ich nicht finden.</p>
<p>Ich habe eine Registry geschrieben, welche alle Informationen von meiner *.ini Config-File enthält. Da ich den Code nun für andere Programme benötige dachte ich mir DLL ist eine gute Lösung. Hier habe ich eine abgespeckte form meiner Klasse.</p>
<p><strong>registry.hpp</strong></p>
<pre><code class="language-cpp">#ifndef G5_CONF_REGISTRY_HPP
#define G5_CONF_REGISTRY_HPP

#ifdef DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif

#include &lt;string&gt;
#include &lt;vector&gt;

using namespace std;

namespace g5 {
namespace conf {

struct entry
{
    string name;
    string value;
};

struct category
{
    string name;
    vector&lt;entry&gt; entries;
};

typedef vector&lt;category&gt; category_list;

class DECLDIR registry
{
    category_list category_list_;
    int crt_category_;
    int crt_entry_;
private:
    int category_is_valid();
    int entry_is_valid();
public:
    registry();
    void clear_all();
    string get_entry_name();
</code></pre>
<p>Wenn ich die DLL nun verwenden will, bekomme ich folgenden compiler Fehler. Ich habe keine Ahnung wie ich den lösen kann.</p>
<pre><code>main.obj : error LNK2019: unresolved external symbol &quot;__declspec(dllimport) public: class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; __thiscall g5::conf::registry::get_entry_name(void)&quot; (__imp_?get_entry_name@registry@conf@g5@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) referenced in function &quot;void __cdecl print_ini_file(class g5::conf::registry &amp;)&quot; (?print_ini_file@@YAXAAVregistry@conf@g5@@@Z)
</code></pre>
<p>So richtig verstehe ich das nicht mit dem __declspec(dllexport) oder __declspec(dllimport).<br />
Hat jemand ein HowTo oder einen Artikel zu dem Thema?</p>
<p>Danke für die Hilfe</p>
<p>so long</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290399/vs2010-dll-erstellung-und-verwendung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 14:20:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290399.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Jul 2011 21:25:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to VS2010 - DLL Erstellung und Verwendung on Mon, 25 Jul 2011 21:25:45 GMT]]></title><description><![CDATA[<p>Hallo Gemeinde,</p>
<p>ich habe ein Problem mit der Erstellung und Verwendung einer DLL. Es ist mein erster Versuch und ich blicke einfach nicht richtig durch, im Internet habe ich mehrere Ansetze gefunden, aber den gemeinsamen Nenner konnte ich nicht finden.</p>
<p>Ich habe eine Registry geschrieben, welche alle Informationen von meiner *.ini Config-File enthält. Da ich den Code nun für andere Programme benötige dachte ich mir DLL ist eine gute Lösung. Hier habe ich eine abgespeckte form meiner Klasse.</p>
<p><strong>registry.hpp</strong></p>
<pre><code class="language-cpp">#ifndef G5_CONF_REGISTRY_HPP
#define G5_CONF_REGISTRY_HPP

#ifdef DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif

#include &lt;string&gt;
#include &lt;vector&gt;

using namespace std;

namespace g5 {
namespace conf {

struct entry
{
    string name;
    string value;
};

struct category
{
    string name;
    vector&lt;entry&gt; entries;
};

typedef vector&lt;category&gt; category_list;

class DECLDIR registry
{
    category_list category_list_;
    int crt_category_;
    int crt_entry_;
private:
    int category_is_valid();
    int entry_is_valid();
public:
    registry();
    void clear_all();
    string get_entry_name();
</code></pre>
<p>Wenn ich die DLL nun verwenden will, bekomme ich folgenden compiler Fehler. Ich habe keine Ahnung wie ich den lösen kann.</p>
<pre><code>main.obj : error LNK2019: unresolved external symbol &quot;__declspec(dllimport) public: class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; __thiscall g5::conf::registry::get_entry_name(void)&quot; (__imp_?get_entry_name@registry@conf@g5@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) referenced in function &quot;void __cdecl print_ini_file(class g5::conf::registry &amp;)&quot; (?print_ini_file@@YAXAAVregistry@conf@g5@@@Z)
</code></pre>
<p>So richtig verstehe ich das nicht mit dem __declspec(dllexport) oder __declspec(dllimport).<br />
Hat jemand ein HowTo oder einen Artikel zu dem Thema?</p>
<p>Danke für die Hilfe</p>
<p>so long</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2097815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2097815</guid><dc:creator><![CDATA[Lindsey]]></dc:creator><pubDate>Mon, 25 Jul 2011 21:25:45 GMT</pubDate></item><item><title><![CDATA[Reply to VS2010 - DLL Erstellung und Verwendung on Mon, 25 Jul 2011 21:44:55 GMT]]></title><description><![CDATA[<p>Beim Kompilieren der DLL musst du Klassen und Funktionen exportieren, dazu dient <code>__declspec(dllexport)</code> . Wenn du hingegen die DLL-Datei in einem Projekt verwendest, musst du ihre Symbole importieren, was mit <code>__declspec(dllimport)</code> erreicht werden kann.</p>
<p>Stelle sicher, dass das Makro <code>DLL_EXPORT</code> beim Erzeugen der dynamischen Bibliothek definiert ist, beim Verwenden aber nicht. Und natürlich muss <code>get_entry_name()</code> eine Definition haben.</p>
<p>Für genauere Informationen zu dynamischen Bibliotheken könntest du dir einmal <a href="http://msdn.microsoft.com/en-us/library/1ez7dh12.aspx" rel="nofollow">MSDN</a> anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2097823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2097823</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 25 Jul 2011 21:44:55 GMT</pubDate></item></channel></rss>