Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1827 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Erreur suite à la création d'une DLL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur suite à la création d'une DLL

n°1893213
Arry
Posté le 09-06-2009 à 14:51:00  profilanswer
 

Bonjour à tous.

 

Je suis bloqué sur un petit problème depuis ce matin... Je me tourne finalement vers vous pour connaitre votre avis.
Je vais essayer d'être le plus clair possible :
Voilà mes fichiers:

Code :
  1. // fichier base.hpp
  2. namespace core {
  3. [...]
  4.     class Base{
  5.     public:
  6.         virtual bool Init( wstring& filename ) =0;
  7.     };
  8. [...]
  9. }


Code :
  1. //fichier derive.dll
  2. #include "base.hpp"
  3. using namespace core;
  4. [...]
  5. class Derive : public Base {
  6. public:
  7.     virtual bool Init( wstring& filename ) {
  8.     wcout << filename << endl;
  9.     }
  10. };
  11. extern "C" __declspec(dllexport) Base* _stdcall create() {
  12.     Derive* newObject = new Derive;
  13.     return newObject;
  14. }


Code :
  1. // main.cpp
  2. [...]
  3. #include "base.hpp"
  4. using namespace core;
  5. extern "C" __declspec(dllimport) Base* __stdcall create();
  6. int main (...) {
  7.     Base* object = create();  // Jusque là ça marche
  8.     object.Init(L"TEST" );      // TEST devrait être affiché
  9. }
 

Après debug, je découvre que filename est un <Bad ptr> mais alors je ne sais pas comment ça se fait...
Si quelqu'un a une idée je suis preneur :)

 

Merci de m'avoir lu !

 


EDIT : J'ai oublié de préciser que le code marchait parfaitement avant le passage de derive.h et derive.cpp en derive.dll :)


Message édité par Arry le 10-06-2009 à 13:05:28

---------------
Mon Feed-Back
mood
Publicité
Posté le 09-06-2009 à 14:51:00  profilanswer
 

n°1893463
Arry
Posté le 10-06-2009 à 10:04:27  profilanswer
 

Après de nouveau test, si je passe en argument dans object.Init(  ) un pointeur sur des char, ça fonctionne.
En fait, tant que je passe en argument un type de variable connu en C, ça fonctionne.

 

Le soucis est maintenant décalé à ceci :

Code :
  1. //fichier derive.dll
  2. #include "base.hpp"
  3. using namespace core;
  4. class Derive : public Base {
  5. private:
  6.     char* buffer;
  7. public:
  8.     virtual bool Init( char* filename ) {
  9.         cout << filename << endl;
  10.         this->buffer = new char[640*480];  // à ce moment là le pointeur est bien alloué,
  11.                                            // cependant si je veux l'utiliser
  12.                                            // dans une autre fonction de la classe
  13.                                            // le debugueur le voit comme NULL.
  14.     }
  15. };
  16. extern "C" __declspec(dllexport) Base* _stdcall create() {
  17.     Derive* newObject = new Derive;
  18.     return newObject;
  19. }
 

Merci de m'avoir lu ! :)


Message édité par Arry le 10-06-2009 à 13:05:47

---------------
Mon Feed-Back
n°1893551
Joel F
Real men use unique_ptr
Posté le 10-06-2009 à 11:54:31  profilanswer
 

Derive newObject = new Derive;

 

tu sais que tu es pas en java hein, cette ligne, et toutes ces semblables est fausse.

 

Derive* newObject = new Derive;

 

est correct


Message édité par Joel F le 10-06-2009 à 11:54:45
n°1893592
Arry
Posté le 10-06-2009 à 13:04:26  profilanswer
 

Pardon, erreur de frappe lors de l'écriture de l'exemple.
Le pointeur est bien définit comme tu l'as décris dans mon code

 

edit : c'est corrigé dans les exemples.


Message édité par Arry le 10-06-2009 à 13:06:49

---------------
Mon Feed-Back
n°1893614
Joel F
Real men use unique_ptr
Posté le 10-06-2009 à 13:53:53  profilanswer
 

ok :jap:
 
de mémoire je me demadne is on peut passer des objets ou des pointeurs d'objets à des fonctions extern "C". Cela expliquerai peut etre ceci

n°1893794
Arry
Posté le 10-06-2009 à 18:20:54  profilanswer
 

J'ai changer mon mode de passage en DLL : j'utilise maintenant un .def comprenant une table d'export de fonctions.

 

Mon code fonctionne maintenant parfaitement :)

 

Merci pour tes indications ! :jap:


Message édité par Arry le 10-06-2009 à 18:21:53

---------------
Mon Feed-Back

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Erreur suite à la création d'une DLL

 

Sujets relatifs
Création moteur de recherche alternatifErreur avec setTimeout dans javascript externe
Problème d'envoi de formulaire malgré une erreur jsErreur Nonetype sur une regexp pourtant reconnue [résolu]
Soucis d'utilisation d'une DLL sous php avec objet COMErreur requête SQL en VBA dans Excel
Erreur d'exécution '53': Fichier introuvable[Résolu] Erreur incompréhensible...
Quel est le coût de la création d'un objet ne contenant pas de donnée 
Plus de sujets relatifs à : Erreur suite à la création d'une DLL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR