begin process at 2012 02 11 02:08:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

pb DLL et template


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pb DLL et template

mardi 30 octobre 2007 à 16:18:39 | pb DLL et template

axiagame

Bonjour, je suis en train de tenter de créer une DLL, mais malheureusement je suis heurté à un problème :

Je souhaite créer une fonction en template qui renvoie un pointeur vers T, mais j'ai une erreur de compilation :

la fonction
template<typename T> T __declspec(dllexport) nouveau(T* ptr, char* file, int line);
fonctionne à la compilation,

mais la fonction
template<typename T> T* __declspec(dllexport) nouveau(T* ptr, char* file, int line);
ne fonctionne pas, le compilateur me dit "erreur de synthaxe : __declspec(dllexport)";

je comprends pas ce qu'il se passe, si je fais avec int et int* c'est le même problème


pouvez-vous m'aider?
mardi 30 octobre 2007 à 16:59:18 | Re : pb DLL et template

juju12

Le code template est généré uniquement à la compilation autrement dit le code générique que tu écris au-dessus n'existe que virtuellement; ainsi tu ne peux pas exporter de templates.
Y a tout de même un mot-clé prévu pour fair ca  dans la norme C++, export, mais il n'est supporté par aucun compilateur à ma connaissance pour l'instance.

Ton erreur vient de la position de __declspec(dllexport), faut le mettre avant le type.
La question serait plutôt : comment ca se fait que ca compile? Franchement j'en sais rien.
mardi 30 octobre 2007 à 17:32:09 | Re : pb DLL et template

axiagame

la réponse a ta question est que je développe avec visual studio 2005...

il faut mettre le declspec avant le type tu dis??? c'est bizarre je l'ai toujours mis après et ca a toujours marché... enfin j'essaye et je te tiens au courant

merci
mardi 30 octobre 2007 à 17:40:57 | Re : pb DLL et template

juju12

Bon tu m'as inquiété j'ai vérifié, je le mets toujours avant (pour les fonctions du moins  les classes c'est une autre affaire). Non le truc que je trouve étrange c'est que normalement on ne peut pas exporter une fonction template, et là ca compile parfaitement... peut-être que ca ne marche pas après.
mardi 30 octobre 2007 à 17:55:05 | Re : pb DLL et template

axiagame

eh bien je vais vérifier tout cela...
vendredi 2 novembre 2007 à 01:48:31 | Re : pb DLL et template

KeniiyK

Membre Club
Il faut surclasser :

class XXXX;

// fonction exportée de la DLL
__declspec( dllexport ) const XXXX* GetNewXXXXInstance()
{
    return new XXXXDLL<ZYYYY>();
}

avec XXXXDLL qui derive de XXX, avec une XXXXDLL bien "branlée" (excuses !) il ne reste que du  ZYYYY comme si c'était l'objet.

:D
dimanche 4 novembre 2007 à 14:05:20 | Re : pb DLL et template

axiagame

auh... désolé, mais peux-tu être plus clair stp, je ne saisis pas ce que tu expliques...

juju12 :
en fait effectivement, cela se compile, car dans la DLL il pourrait y avoir des fonctions qui utiliseraient la fonction template. Mais si je génère mon exécutable avec la DLL et que j'utilise un template, ça plante. Avec du recul ca me paraîssait logique :S

J'avais un autre problème, c'est que quand j'utilisai iostream la génération de la DLL plantait car j'étais obligé de mettre une option multithread et non DLL de débogage multithread (moteur graphique oblige) et les fonctions malloc et calloc ne pouvaient être résolues. Ce problème est réglé car le .h du moteur contient ces fonctions adaptées.

Dernier détail : y a t-il moyen d'appeler le constructeur d'une classe sans faire de new ou sans déclarer un objet de cette classe?

ex :
ma_classe * ptr;
ptr = (ma_classe*)malloc(sizeof(ma_classe));
// appel du constructeur sur ptr


Cette discussion est classée dans : int, dll, template, declspec, dllexport


Répondre à ce message

Sujets en rapport avec ce message

Appel de fonctions dans une dll [ par sena ] Bonjour,j'ai un pb un peu bizarre.j'ai créer des fonctions dans une dll.j'utilise __declspec(dllexport) pour dire qu'il faut exporter ces fonctions.Ex DLL [ par neophenix83 ] Bonjour,j'ai un fichier C qui contient des fonctions déclarées comme ceci :MY_DLLEXPORT int fonction1( )avec #if defined(BUILD_PHAPI_DLL)#define MY_DL Dll import Bonjour,, mais comment qu'on fait ???!!! [ par RV2931 ] bonjour,ça fait une heure que je cherche partout différentes manières de charger dynamiquement une librairie dll sans le .lib, j'ai essayé tout plein dll renvoie tableau 2D [ par kokocha ] Bonjour,J'ai une dll que j'ai créee et qui compile sans problème. Seulement voila, même en mettant le dllexport, elle ne m exporte aucune fonction.Je pointeur sur une fonction [ par pasty ] Bonjour,J'appelle une fonction f(int *,int *,int) dont le code  est dans un DLL depuis le programme principal main.cpp Je déclare la fonction dans m Classe contenant vecteur template [ par val3113 ] Bonjour,Je suis sur un programme cpp sous linux. J'ai créé une classe template "Vecteur" qui est censée pouvoir recevoir plusieurs types dont des clas Utilisation d'une Dll [ par sandy27 ] Bonjour,Je vais essayer d'être claire et aussi brève que possible. J'ai réçu d'un fournisseur un code C sous forme de Dll, contenant:- un .lib- un .dl Pb de syntaxe avec une methode template d'une classe template. [ par gaspos ] Bonjour,voici une classe template dont l'une des méthode a un type template en plus :template struct foo    {    // première methode sans type templa Créer une dll en C avec Code::Blocks [ par seb5 ] Salut à tous,Je souhaite placer certaines de mes fonctions dans une dll pour pouvoir les réutilisé dans plusieurs programmes. Je programme en C sous W exemple de creation et utilisation d'un simple dll . [ par bonapart002 ] Bonjour:je suis débutant en c++ .je travail  avec Borland C++ 5.01.je veux créer une dll puis l'utiliser dans un programme .pour cela j'ai crée  un pr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales