Blöd oder Blöd gemacht using native c++ Projects in CLI/c++
-
Hallo ich will eigentlich nur cli code und native c++ besser trennen und habe deshalb ein Projekt A was eine windows Form anwendung ist , und will ein zweites Projekt B erstellen was den native c++ Code enthält.
Immer wenn ich auf in mein Projekt A die header der native c++ einbinden will bekomme ich link errors :Verknüpfen... CaptureTest.obj : error LNK2020: Nicht aufgelöstes Token (0600001A) HDRIAnalyser.HDRIAnalyser::.ctor.//keine Ahnung woher wiso weshalb CaptureTest.obj : error LNK2020: Nicht aufgelöstes Token (0600001B) HDRIAnalyser.HDRIAnalyser::.ctor.//keine Ahnung woher wiso weshalb CaptureTest.obj : error LNK2020: Nicht aufgelöstes Token (0600001C) HDRIAnalyser.HDRIAnalyser::~HDRIAnalyser.//ist Methode von meiner klasse CaptureTest.obj : error LNK2020: Nicht aufgelöstes Token (0600001D) HDRIAnalyser.HDRIAnalyser::calHisto.//ist Methode von meiner klasse CaptureTest.obj : error LNK2020: Nicht aufgelöstes Token (0600001E) HDRIAnalyser.HDRIAnalyser::calHisto.//ist Methode von meiner klasse CaptureTest.obj : error LNK2020: Nicht aufgelöstes Token (0600001F) HDRIAnalyser.HDRIAnalyser::scaleHisto.//ist Methode von meiner klasse
wenn ich aber die Dateien .h , .cpp in mein Projekt A einfüge kann ich sie problemlos benutzen.
Was muss ich den einstellen das Projekt A diese dateien benutzen kann???
Ich habe schon gegooglet aber nichts gefunden wäre sehr nett wenn sich jemand die zeit nehmen kann kurz die vorgehensweise zu Posten.
-
Wie bindest Du denn das zweite Projekl B in Dein projekt A ein???
-
Ich habe Ausgewählt unter Projekt A neues ProjektB hinzufügen
usw.
Projekttypen=Visual C++ ; Vorlagen = Klassenbibliothekund diese will ich in mein Projekt A verwenden
Also zb:
#inlude "..\ProjektB\*.h"sollte ich lieber eine andere Vorlage erstellen?
diese c++ Klassen in ProjektB sind so einfach gestrickt das sie vielleicht auch falls nötig nicht nur unter windows laufen könnten deshalb möchte ich sie ausklammen in ein eigenes Projektverzeichnis=ProjektB.
das ProjektB wird zwar erfolgreich erstellt aber wenn ich eine Klsse bezutzen will daraus bekomme ich immer den Link fehler:CaptureTest.obj : error LNK2028: Nicht aufgelöstes Token (0A000037) ""public: __clrcall HDRIAnalyser::Histogram::Histogram(int,int,int)" (??0Histogram@HDRIAnalyser@@$$FQAM@HHH@
-
Und Du hast in Projekt B auch alles, was exportiert werden soll als __declspec(dllexport) angegeben? Und die .lib-Datei, die Projekt B erzeugt, in Projekt A eingefügt?
Mit nativen Bibliotheken ist das Einbinden leider nicht ganz so einfach wie "Verweis hinzufügen"
EDIT: #include "../bla" sieht imho auch nicht so gelungen aus - setze lieber das Include-Verzeichnis von Projekt B als zusätzlichen Includepfad in Projekt A ein.
-
Danke nochmal für das Interesse !!,
Ich habe nicht im Projekt B exportiert mit ____declspec(dllexport)! oder lib
weil ich nicht verstehe warum ich die gleichen Klassen aus Projekt B benutzen kann wenn ich sie in mein Projekt A direct einfüge (die .h und .cpp)!!
Und wenn ich die Klassen auslagere in ein extra Projekt B dann einfach nicht mehr benutzen kann???also meine Klasse sieht so aus:
warum kann ich diese benutzen wenn ich (Histogram.h und Histogram.cpp) in mein Projekt A kopiere ??
und warum kann ich diese Klasse nicht mehr benutzen wenn ich sie auslagere in ein Projekt B??// Histogram.h #pragma once using namespace System; namespace HDRIAnalyser { public class Histogram { private: int rgbMode; int x; int y; int size; int **histoData; public: Histogram(void); Histogram(int ix,int iy,int mode); ~Histogram(void); public: void clearBuffer(); int** calHisto(unsigned char*); int** calHisto(int,int,unsigned char*); int** scaleHisto(int); }; }
Ich bitte mal darum mir zu zeigen was ich ändern muss
-
maze 3000 schrieb:
weil ich nicht verstehe warum ich die gleichen Klassen aus Projekt B benutzen kann wenn ich sie in mein Projekt A direct einfüge (die .h und .cpp)!!
Na, weil dann der Compiler alle Dateien aus Projekt A compiliert und zusammenlinkt, da sind dann auch die o.a. Funktionen bei.
Und wenn ich die Klassen auslagere in ein extra Projekt B dann einfach nicht mehr benutzen kann???
Weil der Compiler, wenn er Projekt A compiliert, nichts von Projekt B weiss. Du musst ihm schon mitteilen, dass Du die Bibliothek von Projekt B benutzen möchtest. Im einfachsten Fall (Projekttyp: statische Bibliothek) fügst Du in den Projekteinstellungen von Projekt A bei "Compiler" unter "zusätzliche Includeverzeichnisse" den Pfad zur .h, bei "Linker" unter "zusätzliche Abhängigkeiten" "projektb.lib" und unter "zusätzliche Bibliothekspfade" den Pfad zu "projektb.lib" ein.
Im schwierigeren Fall (Projekttyp: DLL) ist es noch etwas zusätzlicher Aufwand (mehr dazu aber erst, wenn fest steht, dass Du wirklich eine DLL willst).
-
Danke erst mal für die Erläuterung.
es ist denke ich klar welche Einstellung du meinst ,ich habe die lib von Projekt B
in ProjectA eingebunden die Pfade gesetzt in Compiler und linker
aber es kommt immernoch die gleiche fehlermeldung muß ich doch eine dll erstellen
das ganze ist ja so hässlich zu konfigurieren sagte ich schon das ich vs 2005 benutze ?
ich habe keine Ahnung mehr woran es liegt ??????????????????????
-
hat jemand ein Beispiel Projekt in vc 2005 zu den Thema also win form Anwendung die auf eine native c++ projekt zugreift, oder sollte ich doch lieber wieder java nehmen!