<?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[[sry falsches forum] Funktion zur typsicheren Eingabe in dll]]></title><description><![CDATA[<p>Hallo, ich habe mir gerade eine Funktion geschrieben die die Eingabe von falschen Datentypen verhinerdn soll (also zB dass char in eine int-variable eingegeben wird).</p>
<p>hier mal der Code zur Funktion:</p>
<pre><code class="language-cpp">template&lt;class T&gt;  void safe_cin(T&amp; Zielvariable) 
{  
    do
    {
		cin&gt;&gt;Zielvariable;
        if(cin.fail())
        {
            cin.clear();   //fail-state vergessen
            cin.ignore(); //Zeichen im Stream vergessen
            cout&lt;&lt;&quot;Fehleingabe, bitt erneut eingeben!\n&quot;;
        }
    }
    while(cin.fail());
}
</code></pre>
<p>wenn ich die ganz normal in der main.cpp einer Konsolenanwendung definiere und aufrufe funktioniert sie perfekt <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>
<p>aber wenn ich die Funktion jetzt völlig unverändert in eine dll kopiere, mit der folgenden Zeile in meien Konsolenanwendung importiere:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
 __declspec(dllimport) void safe_cin(T&amp; Zielvariable);
</code></pre>
<p>und dann ganz normal aufrufe bringt der Compiler (MS Visual C++ 2008 EE) die folgende Fehlermeldung:</p>
<p>Microsoft Visual C++ 2008 Express Edition schrieb:</p>
<blockquote>
<p>1 nicht aufgelöste externe Verweise</p>
</blockquote>
<p>(natürlich habe ich die dll und lib entsprechend gelinkt und ins richtige verzeichnis kopiert,außerdem findet der compiler andere funktionen aus derselben dll ja auch, daran liegts also nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> )</p>
<p>in der dll dekleriere ich die Funktion so:</p>
<pre><code class="language-cpp">template&lt;class T&gt; 
 __declspec(dllexport) void safe_cin(T&amp; Zielvariable) 
{
//siehe oben
}
</code></pre>
<p>woran liegt das mit der Fehlermeldung und was muss ich anders machen?</p>
<p>danke schonmal,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265095/sry-falsches-forum-funktion-zur-typsicheren-eingabe-in-dll</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 09:50:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265095.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Apr 2010 07:47:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [sry falsches forum] Funktion zur typsicheren Eingabe in dll on Sun, 18 Apr 2010 07:52:23 GMT]]></title><description><![CDATA[<p>Hallo, ich habe mir gerade eine Funktion geschrieben die die Eingabe von falschen Datentypen verhinerdn soll (also zB dass char in eine int-variable eingegeben wird).</p>
<p>hier mal der Code zur Funktion:</p>
<pre><code class="language-cpp">template&lt;class T&gt;  void safe_cin(T&amp; Zielvariable) 
{  
    do
    {
		cin&gt;&gt;Zielvariable;
        if(cin.fail())
        {
            cin.clear();   //fail-state vergessen
            cin.ignore(); //Zeichen im Stream vergessen
            cout&lt;&lt;&quot;Fehleingabe, bitt erneut eingeben!\n&quot;;
        }
    }
    while(cin.fail());
}
</code></pre>
<p>wenn ich die ganz normal in der main.cpp einer Konsolenanwendung definiere und aufrufe funktioniert sie perfekt <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>
<p>aber wenn ich die Funktion jetzt völlig unverändert in eine dll kopiere, mit der folgenden Zeile in meien Konsolenanwendung importiere:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
 __declspec(dllimport) void safe_cin(T&amp; Zielvariable);
</code></pre>
<p>und dann ganz normal aufrufe bringt der Compiler (MS Visual C++ 2008 EE) die folgende Fehlermeldung:</p>
<p>Microsoft Visual C++ 2008 Express Edition schrieb:</p>
<blockquote>
<p>1 nicht aufgelöste externe Verweise</p>
</blockquote>
<p>(natürlich habe ich die dll und lib entsprechend gelinkt und ins richtige verzeichnis kopiert,außerdem findet der compiler andere funktionen aus derselben dll ja auch, daran liegts also nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> )</p>
<p>in der dll dekleriere ich die Funktion so:</p>
<pre><code class="language-cpp">template&lt;class T&gt; 
 __declspec(dllexport) void safe_cin(T&amp; Zielvariable) 
{
//siehe oben
}
</code></pre>
<p>woran liegt das mit der Fehlermeldung und was muss ich anders machen?</p>
<p>danke schonmal,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1884462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1884462</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Sun, 18 Apr 2010 07:52:23 GMT</pubDate></item><item><title><![CDATA[Reply to [sry falsches forum] Funktion zur typsicheren Eingabe in dll on Sun, 18 Apr 2010 07:52:45 GMT]]></title><description><![CDATA[<p>upps falsches forum xD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1884464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1884464</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Sun, 18 Apr 2010 07:52:45 GMT</pubDate></item><item><title><![CDATA[Reply to [sry falsches forum] Funktion zur typsicheren Eingabe in dll on Sun, 18 Apr 2010 08:21:35 GMT]]></title><description><![CDATA[<p>Du hast dir keine Funktion geschrieben, sondern eine Funktionsvorlage. Die muss erst vom Compiler zu einer Funktion konkretisiert werden, wenn der weiß, für welche Template-Parameter er das tun muss.</p>
<p>Dementsprechend kannst du sie nicht aus einer DLL exportieren. Lass das __declspec-Gedöns weg, und pack die Definition der Funktionsvorlage mit in den Header, wo der Compiler sie finden kann, wenn er sie braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1884475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1884475</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 18 Apr 2010 08:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to [sry falsches forum] Funktion zur typsicheren Eingabe in dll on Sun, 18 Apr 2010 13:13:40 GMT]]></title><description><![CDATA[<p>soll ich die funktionsvorlage in eine headerdatei der dll oder in eine der konsolenanwendung packen?</p>
<p>also zB so?:</p>
<p>dllheader.h</p>
<pre><code class="language-cpp">template&lt;class T&gt; void safe_cin(T&amp;);
</code></pre>
<p>dllmain.cpp:</p>
<pre><code class="language-cpp">template&lt;class T&gt; void safe_cin(T&amp;)
{
//code aus funktion
}
</code></pre>
<p>oder kann ich die gar nicht in die dll packen und muss sie in eine heraderdatei der Konsolenanwendung stecken?</p>
<p>mfg,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1884609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1884609</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Sun, 18 Apr 2010 13:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to [sry falsches forum] Funktion zur typsicheren Eingabe in dll on Sun, 18 Apr 2010 17:25:35 GMT]]></title><description><![CDATA[<p>Wo du die Headerdatei hinpackst, ist ziemlich gleichgültig, aber der Compiler muss die komplette Definition der Vorlage kennen, sonst kann er sie nicht konkretisieren. Das heißt</p>
<pre><code class="language-cpp">// header.hh

template&lt;class T&gt; void safe_cin(T&amp;) {
  //code aus funktion
}
</code></pre>
<p>Was du da hast, ist noch keine Funktion, also kannst du es auch nicht als Symbol aus einer DLL exportieren. Du kannst, wenn dir das ausreicht, explizite Konkretisierungen aus der DLL exportieren, aber dann kannst du die Vorlage auch nur mit den Typen verwenden, für die du sie explizit konkretisiert hast. Das geht dann etwa so:</p>
<pre><code class="language-cpp">// header.hh

template&lt;class T&gt; void safe_cin(T&amp;);
</code></pre>
<pre><code class="language-cpp">template&lt;class T&gt; void safe_cin(T&amp;) {
  // code
}

template void __declspec(dllexport) safe_cin(int&amp;);
template void __declspec(dllexport) safe_cin(double&amp;);
// ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1884698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1884698</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 18 Apr 2010 17:25:35 GMT</pubDate></item></channel></rss>