Export class via dll probleme (cpp)?

cheroua Messages postés 2 Date d'inscription lundi 8 mai 2006 Statut Membre Dernière intervention 24 août 2006 - 24 août 2006 à 16:46
Itsuki2 Messages postés 13 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 23 juin 2007 - 25 août 2006 à 10:33
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

Itsuki2 Messages postés 13 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 23 juin 2007
24 août 2006 à 17:07
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;
}
0
cheroua Messages postés 2 Date d'inscription lundi 8 mai 2006 Statut Membre Dernière intervention 24 août 2006
24 août 2006 à 17:16
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?
0
Itsuki2 Messages postés 13 Date d'inscription jeudi 24 mars 2005 Statut Membre Dernière intervention 23 juin 2007
25 août 2006 à 10:33
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;
}
0
Rejoignez-nous