<?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[lnk2005 bei vorkompilierten headern]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>ich bin gerade auf visual studio 2012 umgestiegen und kann dort nicht mehr mit vorkompilierten headern (vh) arbeiten. in 2010 funktionierte noch alles tadellos, seitdem habe ich nichts am quellcode verändert. eine dll kompiliert fehlerfrei ohne vh, mit bekomme ich einige dieser fehler:</p>
<pre><code>error LNK2005: &quot;enum libdf::TDefectCode __cdecl libdf::defectCodeFromDFormat(unsigned char)&quot; (?defectCodeFromDFormat@libdf@@YA?AW4TDefectCode@1@E@Z) ist bereits in defectcodes.obj definiert.
</code></pre>
<p>in der defectcodes.h steht:</p>
<pre><code>#ifndef __DEFECTCODES_H__
#define __DEFECTCODES_H__

namespace libdf {

typedef enum {
	DC_I1 = 100, //!&lt; 10% innen
	DC_I2,       //!&lt; 20% innen
	DC_I3,       //!&lt; 30% innen
	DC_NONE      //!&lt; kein Code vergeben, sozusagen nicht initialisiert
} TDefectCode;

/** liefert zu einem DefectCode einen String, der den lesbaren
 * Code enthält.
 * @param defectCode zu konvertierender Code
 * @return lesbarer Code
 */
__declspec(dllexport) wxString defectCodeToString(TDefectCode defectCode);

}

#endif
</code></pre>
<p>und in der defectcodes.cpp</p>
<pre><code>#include &quot;defectcodes.h&quot;

__declspec(dllexport) wxString libdf::defectCodeToString( TDefectCode defectCode )
{
	int dep;
	char classes[] = &quot;-&quot; &quot;O&quot; &quot;P&quot; &quot;X&quot; &quot;S&quot; &quot;B&quot; &quot;D&quot; &quot;N&quot; 
		&quot;R&quot; &quot;T&quot; &quot;W&quot; &quot;Z&quot; &quot;V&quot; &quot;!&quot; &quot;?&quot;;

	switch(defectCode) {
	case DC_I1:
	case DC_I2:
	case DC_I3:
		dep = (int) defectCode - 100 + 1;
		if(dep == 10) dep = 0;
		return wxString::Format(_(&quot;%dI&quot;), dep);
	case DC_NONE: //kein Code vergeben, sozusagen nicht initialisiert
		return wxString::Format(_T(&quot;%c&quot;), classes[(int) defectCode - 300]);
	}
	return wxEmptyString;
}
</code></pre>
<p>wie kann ich den lnk2005 beheben?<br />
danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313923/lnk2005-bei-vorkompilierten-headern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 19:23:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313923.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Feb 2013 11:47:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to lnk2005 bei vorkompilierten headern on Thu, 14 Feb 2013 11:47:52 GMT]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>ich bin gerade auf visual studio 2012 umgestiegen und kann dort nicht mehr mit vorkompilierten headern (vh) arbeiten. in 2010 funktionierte noch alles tadellos, seitdem habe ich nichts am quellcode verändert. eine dll kompiliert fehlerfrei ohne vh, mit bekomme ich einige dieser fehler:</p>
<pre><code>error LNK2005: &quot;enum libdf::TDefectCode __cdecl libdf::defectCodeFromDFormat(unsigned char)&quot; (?defectCodeFromDFormat@libdf@@YA?AW4TDefectCode@1@E@Z) ist bereits in defectcodes.obj definiert.
</code></pre>
<p>in der defectcodes.h steht:</p>
<pre><code>#ifndef __DEFECTCODES_H__
#define __DEFECTCODES_H__

namespace libdf {

typedef enum {
	DC_I1 = 100, //!&lt; 10% innen
	DC_I2,       //!&lt; 20% innen
	DC_I3,       //!&lt; 30% innen
	DC_NONE      //!&lt; kein Code vergeben, sozusagen nicht initialisiert
} TDefectCode;

/** liefert zu einem DefectCode einen String, der den lesbaren
 * Code enthält.
 * @param defectCode zu konvertierender Code
 * @return lesbarer Code
 */
__declspec(dllexport) wxString defectCodeToString(TDefectCode defectCode);

}

#endif
</code></pre>
<p>und in der defectcodes.cpp</p>
<pre><code>#include &quot;defectcodes.h&quot;

__declspec(dllexport) wxString libdf::defectCodeToString( TDefectCode defectCode )
{
	int dep;
	char classes[] = &quot;-&quot; &quot;O&quot; &quot;P&quot; &quot;X&quot; &quot;S&quot; &quot;B&quot; &quot;D&quot; &quot;N&quot; 
		&quot;R&quot; &quot;T&quot; &quot;W&quot; &quot;Z&quot; &quot;V&quot; &quot;!&quot; &quot;?&quot;;

	switch(defectCode) {
	case DC_I1:
	case DC_I2:
	case DC_I3:
		dep = (int) defectCode - 100 + 1;
		if(dep == 10) dep = 0;
		return wxString::Format(_(&quot;%dI&quot;), dep);
	case DC_NONE: //kein Code vergeben, sozusagen nicht initialisiert
		return wxString::Format(_T(&quot;%c&quot;), classes[(int) defectCode - 300]);
	}
	return wxEmptyString;
}
</code></pre>
<p>wie kann ich den lnk2005 beheben?<br />
danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298836</guid><dc:creator><![CDATA[mael15]]></dc:creator><pubDate>Thu, 14 Feb 2013 11:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to lnk2005 bei vorkompilierten headern on Thu, 14 Feb 2013 12:53:26 GMT]]></title><description><![CDATA[<p>Das ist kein C++ Problem.</p>
<p>Es wird die Funktion defectCodeFromDFormat bemängelt, die kommt in deinen Codeschnipseln nicht vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298850</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 14 Feb 2013 12:53:26 GMT</pubDate></item><item><title><![CDATA[Reply to lnk2005 bei vorkompilierten headern on Thu, 14 Feb 2013 13:00:12 GMT]]></title><description><![CDATA[<p>hab den quellcode auf das wesentliche reduziert, die fehlermeldung lautet dem code entsprechend</p>
<blockquote>
<p>error LNK2005: &quot;class wxString __cdecl libdf::defectCodeToString(enum libdf::TDefectCode)&quot; (?defectCodeToString@libdf@@YA?AVwxString@@W4TDefectCode@1@@Z) ist bereits in defectcodes.obj definiert.</p>
</blockquote>
<p>wenn es kein c++ problem ist, dann eins von visual studio?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298855</guid><dc:creator><![CDATA[mael15]]></dc:creator><pubDate>Thu, 14 Feb 2013 13:00:12 GMT</pubDate></item><item><title><![CDATA[Reply to lnk2005 bei vorkompilierten headern on Thu, 14 Feb 2013 13:32:48 GMT]]></title><description><![CDATA[<p>mael15 schrieb:</p>
<blockquote>
<p>wenn es kein c++ problem ist, dann eins von visual studio?</p>
</blockquote>
<p>Da es laut deiner Aussage ohne pch fehlerfrei funktioniert, ja!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298868</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 14 Feb 2013 13:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to lnk2005 bei vorkompilierten headern on Thu, 14 Feb 2013 14:51:27 GMT]]></title><description><![CDATA[<p>Was micht hier etwas wundert ist der Inhalt der Header-Datei. Wenn das eine Schnittstelle für eine DLL sein soll, hätte ich so etwas wie das hier erwartet:</p>
<pre><code class="language-cpp">#ifndef LIBDF_H_INCLUDED
#define LIBDF_H_INCLUDED

#include &lt;string&gt;

#ifdef BUILD_LIBDF
  #define LIBDFDECL __declspec(dllexport)
#else
  #define LIBDFDECL __declspec(dllimport)
#endif

LIBDFDECL std::string defectCodeToString(int code);

#endif
</code></pre>
<p>Denn beim Erzeugen der DLL ist es wichtig, die Funktionen zu markieren, die man nach außen Hin sichtbar haben will (dllexport) und beim Verwenden einer solchen Funktion ist es wichtig, zu sagen, dass es sich um eine Funktion handelt, die in irgendeiner DLL steckt (dllimport). Soweit reicht zumindest mein Windows/DLL Verständnis.</p>
<p>Und wenn man diesen Header vorkompiliert, könnte das schon Probleme machen, weil ja einmal BUILD_LIBDF definiert und einmal nicht definiert sein würde. Aber ich muss gestehen, dass ich dieses PCH-Zeug nicht durchblicke, es nie verwende und immer mit einem komplett leeren Projekt anfange.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298886</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 14 Feb 2013 14:51:27 GMT</pubDate></item><item><title><![CDATA[Reply to lnk2005 bei vorkompilierten headern on Thu, 14 Feb 2013 14:51:55 GMT]]></title><description><![CDATA[<p>jup, dieses konstrukt verwende ich auch. da der fehler derselbe ist wenn ich direkt nur __declspec(dllexport) dort stehen habe, habe ich es der lesbarkeit wegen rausgelassen.<br />
ist immer so ein ding mit dem vereinfachen... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2298888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298888</guid><dc:creator><![CDATA[mael15]]></dc:creator><pubDate>Thu, 14 Feb 2013 14:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to lnk2005 bei vorkompilierten headern on Thu, 14 Feb 2013 15:27:55 GMT]]></title><description><![CDATA[<p>mael15 schrieb:</p>
<blockquote>
<p>jup, dieses konstrukt verwende ich auch. da der fehler derselbe ist wenn ich direkt nur __declspec(dllexport) dort stehen habe, habe ich es der lesbarkeit wegen rausgelassen.<br />
ist immer so ein ding mit dem vereinfachen... <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>
</blockquote>
<p>Ok, dann könnte das auch das Problem sein. Du brauchst ja im Prinzip zwei Header: Einmal zum Builden der DLL und einmal zum Verwenden. Die Ausgabe des Vorkompilierens ist sehr wahrscheinlich von den definierten Makros dann abhängig und das Definieren oder Weglassen von BUILD_LIBDF hätte dann gar keinen Einfluss mehr. Zum Beispiel: Der, der die den Header und die DLL verwenden will, liest die für das DLL-Building erzeugte und vorkompilierte Version, in der BUILD_LIBDF definiert war und sieht dann ein dllexport was eigentlich ein dllimport hätte sein müssen. Das ist jetzt Spekulation, weil ich mich mit dem PCH-Kram, wie gesagt, nicht auskenne.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298895</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 14 Feb 2013 15:27:55 GMT</pubDate></item><item><title><![CDATA[Reply to lnk2005 bei vorkompilierten headern on Thu, 14 Feb 2013 19:48:00 GMT]]></title><description><![CDATA[<p>das problem ist gelöst.<br />
es sieht so aus, als hätte visual studio 2010 eine grundeinstellung gehabt, die präkompilierte header ermöglichte, ohne dass ich das jemals hätte einstellen müssen. bei vs 2012 war das nun nicht mehr der fall, ich musste also nur basic einstellungen für präkompilierte header nach folgender anleitung erstellen:<br />
<a href="http://manski.net/2011/11/09/precompiled-headers/#compiling_the_header" rel="nofollow">http://manski.net/2011/11/09/precompiled-headers/#compiling_the_header</a></p>
<p>erstaunlicherweise lief es vorher jahrelang ohne stdafx.h. <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="😕"
    /><br />
danke für eure ideen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298949</guid><dc:creator><![CDATA[mael15]]></dc:creator><pubDate>Thu, 14 Feb 2013 19:48:00 GMT</pubDate></item></channel></rss>