?
ich gebe gerne mehr Informationen, da aber nicht viel im Projekt bis jetzt ist, weiß ich nicht was noch relevant ist. Kannst gerne speziell fragen.
Der Sample-Code wurde mit VisualStudios 2003 erstellt, weshalb ich dazu gezwungen wurde, es in ein VS 2008 Projekt zu konvertieren.
Ich habe mit der stdafx grad bisschen rum gespielt und die includes in den verschiedensten Reihenfolgen probiert, weshalb ich nun genaueres sagen kann (die includes habe ich alle aus dem Beispiel übernommen).
Es wird kein afx.h eingebunden sondern windows.h (habe es mal mit afx.h testweise gemacht, da komme ich zu den gleichen Ergebnissen):
Die stdafx.h sieht wie gefolgt aus:
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN
#endif
#ifndef _WSPIAPI_H_
#define _WSPIAPI_H_
#endif
#ifndef _WINSOCKAPI_
#define _WINSOCKAPI_
#endif
#include <windows.h>
WINBASEAPI BOOL WINAPI TryEnterCriticalSection(IN OUT LPCRITICAL_SECTION lpCriticalSection);
#ifdef _MSC_VER
#pragma warning(disable:4100)
#pragma warning(disable:4512)
#endif
#ifdef _MSC_VER
#pragma warning(disable:4100)
#pragma warning(default:4512)
#endif
#include "HeaderDateiVonEntwicklungsumgebung1.h"
#include "HeaderDateiVonEntwicklungsumgebung2.h"
Fehlermeldungen:
error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) ist bereits in LIBCMTD.lib(typinfo.obj) definiert.
error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) ist bereits in LIBCMTD.lib(typinfo.obj) definiert.
fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
Wenn ich die Zeile #include "HeaderDateiVonEntwicklungsumgebung2.h" weglasse, kann ich kompilieren.
Wenn ich alle includes (+ WINBASEAPI BOOL...) weglasse, bis auf #include "HeaderDateiVonEntwicklungsumgebung2.h" bekomme ich exakt die gleichen Fehlermeldungen wie mit den anderen includes.
Das waren alles versuche mit mfc als statische lib (da das sample-file satische mfc hat geh ich davon aus, dass die anderen damit auch kompiliert werden und wie du schon sagst, muss alles gleich kompiliert werden).
Habe trotzdem mal auf dynamische mfc-lib gestellt.
Dann kompiliert er und er führt es aus - aber nur solange ich keine Klasse verwende. Sobald ich eine Klasse der includes verwende, wird die dll geladen (kamen erst ständig Fehlermeldungen dass die dlls fehlen. Da ich keine Adminrechte habe und den Path auf das Verzeichnis stellen kann, hab ich alle dlls in meinen Ordner kopiert. Und es kam wieder die Fehlermeldung R6034.
Da ich vielleicht irgend was nicht mit rüber geholt hatte warf ich einfach mal den kompletten Inhalt des Debug-Ordners meines Programmes in den Ordner in dem die dlls ursprünglich waren (und von dem sie auch vom Sample-Code eingebunden wurden). Hab die exe Datei ausgeführt und zack, wieder die Fehlermeldung.
Also habe ich mich durch deine Seite gelesen (danke dafür) und bei
if (manifest is in the same folder as the dll)
return TRUE;
bin ich ins überlegen gekommen. Muss jede dll die ich einbinde ein eigenes Manifest haben? Oder reicht es, wenn mein Programm eine richtiges Manifest hat (das von VisualStudios 2008 bei mir erstellt wird).
Wenn das erstere der Fall ist, hab ich folgende Vermutung:
Mit VS 2003 wurde noch nicht immer ein Manifest erstellt - wenn ich mich nicht irre - und da die dlls angeblich mit VS2003 gemacht wurden, haben die sowas nicht.
Jetzt ist meine Vermutung: Ich kann die libs und dlls die mit VS2003 erstellt wurden nicht unter VS2008 verwenden. Wenn doch, wie soll ich am besten vorgehen?
Und zweitens:
Da die mfc ja eigentlich im Sample-Code statisch eingebunden wurde, sollte ich das auch irgend wie machen. Leider weiß ich nicht wie ich bei dem LNK2005 weiter vorgehen soll.
Danke für deine Hilfe!!!