Klassen in DLLS

FSA

Erfahrenes Mitglied
Hallo ich schreibe gerade ein DLL und bisher hat auch alles geklappt nun wollte ich noch etwas ändern und habe 2 Datein hinzugefügt Ver.h und Ver.cpp in Ver.h steht das:
C++:
#include <string> 

using namespace std;

//string g_sDatentyp;
//bool b_OK;

class ver_ent
{
public:
	string ver();
	string ent();
};
und in Ver.cpp:
C++:
#include <Ver.h>

string ver_ent::ver()
{
	Beep(200,200);
}
nun habe ich ein projekt mit der DLL Datei gemacht ich konnte auch alles verwenden bis auf die Klasse Ver funktion ver!
Was mache ich falsch****
Danke MFG
 
Zuletzt bearbeitet von einem Moderator:
In einer andere Datei
Der aufbau der Dll ist der hier:
TestDLL.cpp = Eingie wichtige sachen
TestDLL.h = declspec ( also noch mehr mit Präprozesoor usw) danach kommen noch einige includes:
C++:
#pragma once

#ifdef TEST_EXPORTS
#define TEST_API __declspec( dllexport )
#else
#define TEST_API __declspec( dllimport )
#endif
//Präprozessor ist richtig!
...
...
...
#include "Ver.h"
Und in meine Testprogramm ist dann nur die libs gelinkt usw und halt #include<TestDLL.h> wo dann auch direkt nach #pragma once declspec kommt
MFG Danke
 
Zuletzt bearbeitet von einem Moderator:
In einer anderen Datei... :rolleyes:
C++:
#ifdef TEST_EXPORTS
#define TEST_API __declspec( dllexport )
#else
#define TEST_API __declspec( dllimport )
#endif
Ist dir klar, was dieser Block tut?
Solange du nirgends TEST_API und TEST_EXPORTS hinschreibst, tut der gar nichts.

Du musst vor
C++:
class ver_ent
schon TEST_API schreiben.
Wie hast du denn das Ganze bisher mit klassenlosen Funktionen gemacht?

Und falls du es noch nicht hast: In den Projekteinstellungen der DLL muss TEST_EXPORT definiert werden.

Gruß
 
Oh hehe stimmt :D
Aber jetzt habe ich es ergänzt:
Ver.h
C++:
class TEST_API ver_ent
{
public:
string ver();
};
Ver.cpp keine änderung
und trotzdem bekomme ich: ver nichtdeklarierter bezeichner!
Danke

EDIT:
Test Exports ist definiert also der untere Code abschnitt ist ausgeblendet (in msvc++ 2010)
 
Zuletzt bearbeitet von einem Moderator:
Hallo
Eigentlich fehlt kein return bei anderen gings ja auch!
ver_ent verwende ich in Main.cpp(ist ein anderes projekt wo die Dll hinzugelinkt ist) und dort einfach den #include um alle Headerdateien einzubinden und dann einfach ver();
und ver ist in Ver.cpp als string ver();
Danke
 
Als zip ist das ganze zu groß denn die komplette DLL hängt noch von einer GameEngine ab nunja und die hat schon bissl code!
MFG
 
Eigentlich fehlt kein return bei anderen gings ja auch!
Es fehlt definitiv ein return, da die Methode einen std::string zurückgeben muß.
ver_ent verwende ich in Main.cpp(ist ein anderes projekt wo die Dll hinzugelinkt ist) und dort einfach den #include um alle Headerdateien einzubinden und dann einfach ver();
und ver ist in Ver.cpp als string ver();
Was schwafelst du da? :mad:

Ist es denn zuviel verlangt 3 Zeilen Code zu zeigen? :mad: Statt Code zu posten wo man nur mal kurz draufblicken muß, schreiben alle Esays wo dann niemand wirklich weiß wie der Code aussieht. Von der folgenden Diskussion warum das alles schon OK wäre und der Code ja gar nicht fehlerhaft sein kann ganz zu schweigen.

http://www.tty1.net/smart-questions_de.html

Du machst vermutlich einfach etwas falsch.

Gruß
 
Zurück