Export class via dll probleme (cpp)?

Signaler
Messages postés
2
Date d'inscription
lundi 8 mai 2006
Statut
Membre
Dernière intervention
24 août 2006
-
Messages postés
13
Date d'inscription
jeudi 24 mars 2005
Statut
Membre
Dernière intervention
23 juin 2007
-
salut,


Voici la classe à partir de laquelle je genère une dll...


J'utilise une méthode explicite pour importer la dll avec LoadLibrary

J'ai essayé de construire l'interface qui permet d'assurer la
passerelle entre la dll (issue de la classe) et l'application mais le
fait que j'utilise des types classes me pose problème


Pourriez-vous m'aider à finaliser mon interfaçe


voila la class :

class Param

{


Param();

~Param();


Param operator+(Param&);


void SetValue(double*);


Vector<double> GetValue();


vector <string> GetPath();


private :

vector <double*> _Value;

vector <string> _Path;

}


class Interface


class Param

{


virtual Param operator+(Param&);


virtual void SetValue(double*)=0;


virtual Vector<double> GetValue();


virtual vector <string> GetPath();


}


Merci d'avance ...

3 réponses

Messages postés
13
Date d'inscription
jeudi 24 mars 2005
Statut
Membre
Dernière intervention
23 juin 2007

Hi ho, c'est quoi comme erreur que tu as ?

/// Fichier Header
#ifdef ITSUKI2_EXPORTS
#define ITSUKI2_API __declspec(dllexport)
#else
#define ITSUKI2_API __declspec(dllimport)
#endif


class ITSUKI2_API CItsuki2
{
   public:
      CItsuki2(void);
};

/// Fichier Source
CItsuki2::CItsuki2()

   return;
}
Messages postés
2
Date d'inscription
lundi 8 mai 2006
Statut
Membre
Dernière intervention
24 août 2006

le linker donne plusieur erreur au niveau de linkeur;
lors de chargement de la dll avec votre méthode, en implicite ou explicite, les variables entrées dans la classe sont perdu (adresse mémoire donne n'importe quoi?
Messages postés
13
Date d'inscription
jeudi 24 mars 2005
Statut
Membre
Dernière intervention
23 juin 2007

Tiens, moi je fais ca comme ca, c'est plus simple je trouve.

// Source DLL ///////////////////////////////////////////////////////
#include "stdafx.h"
#include "Dll.h"
#include <string.h>


BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    return TRUE;
}
CDll :: CDll(void)
{
 strcpy(chaine, "hi ho");
 return;
}
DLL_API CDll *initialise(void)
{
 CDll *Temp = new CDll();
 return Temp;
}

//HEADER DLL ///////////////////////////////////////////////////////
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif


class DLL_API CDll
{
 public:
  CDll(void);
  char chaine[256];
};


DLL_API CDll *initialise(void);

// Main ///////////////////////////////////////////////////////
#include "stdafx.h"
#include <windows.h>


#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif


class DLL_API CDll
{
 public:
  CDll(void);
  char chaine[256];
};


#include <stdio.h>


int main(int argc, char* argv[])
{
 HMODULE module = LoadLibrary("Dll.dll");
 CDll* (*ok)(void) = NULL;
 ok = (CDll*(*)(void)) GetProcAddress(module, "[mailto:?initialise@@YAPAVCDll@@XZ ?initialise@@YAPAVCDll@@XZ]");
 CDll *maclasse = (*ok)();
 printf("%s", maclasse->chaine);
 return 0;
}