DLL mit Template-Funktionen

Mickeyman

Mitglied
Wie vielleicht schon in meiner Überschrift zu erkennen ist, versuche ich eine Template-Funktion in eine DLL zu packen, um sie später wieder auslesen zu können. Ich benutze "Microsoft Visual Studio 2005Pro" und habe es zwar schon geschafft, die DLL-Datei erfolgreich zu erstellen, aber wenn ich dann aus einem anderen Projekt versuche, die darin enthaltenen Funktionen aufzurufen, meckert er beim Linken. (Die DLLs sind statisch eingebunden) Er meint dann, dass es bei beiden Funktionen unaufgelöste externe Symbole gibt. Mir erscheint es so, als würde er die Definitionen der Funktionen nicht finden. Ich bin mir aber sicher, dass ich die DLL.lib-Datei eingebunden habe.

Hier ist mein Code:

Standart.h - Projekt zur Erstellung der DLL
Code:
#ifdef STDBUECHEREI_EXPORTS
#define Engine_DLL __declspec(dllexport)
#else
#define Engine_DLL __declspec(dllimport)
#endif

long s1 = 1;
long s2 = 1;

template< class Typ >
Typ Engine_DLL get_Zufallszahl(const Typ, const Typ);
void Engine_DLL init_Zufallszahl(const long, const long);

Standart.CPP - Projekt zur Erstellung der DLL
Code:
#include "Standart.h"

template< class Typ >
Typ Engine_DLL get_Zufallszahl(const Typ Min, const Typ Max) {
   ...
}

void Engine_DLL init_Zufallszahl(const long init_s1, const long init_s2) {
   s1 = init_s1;
   s2 = init_s2;
}

main.cpp - Projekt zur Einbindung der DLL (die DLL.h ist im Projekt vorhanden)
Code:
#include <iostream>
#include <conio.h>
#include "Standart.h"

int main(void) {

	init_Zufallszahl(223941, 129344);
	std::cout << "Zahl: " << get_Zufallszahl<int>(-4, 10);

	_getch();
	return 0;
}

Ich hoffe mir kann da jemand helfen.
 
Hi.

Du mußt bereits beim Erzeugen der DLL die Funktionen Templates instanzieren lassen die du später benutzen willst, da nicht referenzierte Template Funktionen nicht kompiliert werden.

C++:
template int Engine_DLL get_Zufallszahl<int>(const int, const int);
template double Engine_DLL get_Zufallszahl<double>(const double, const double);
// usw.
Gruß
 
Danke für die Antwort,
ich glaub da werde ich wohl Templates gleich ganz weglassen. Lohnt sich ja nicht mehr.
Finde ich aber irgendwie schade, dass es da keine andere Möglichkeit gibt, dabei sind Templates doch gerade einer der größten Vorteile von C++.

Gruß Mickeyman.
 

Neue Beiträge

Zurück