begin process at 2012 02 08 23:14:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Pb d'appel de fonctions dans une dll c++


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

Pb d'appel de fonctions dans une dll c++

dimanche 11 mai 2008 à 21:15:35 | Pb d'appel de fonctions dans une dll c++

psychospire

Bonjour à tous, je vous expose mon problème.
J'essaye de créer une dll en c++ qui sera appelée à partir d'un programme en vb.

Le truc, c'est que j'aimerais appeler à partir de vb une des fonctions de la dll qui elle meme appellera une autre fonction de cette dll.

Pour faire clair, voici en gros ma dll :

extern "C"
{
   ____declspec(dllexport) void Fonction1()
   {
      Fonction2();
   }

   ____declspec(dllexport) intFonction2()
   {
      return 1;
   }
}

Or, à la compilation, j'ai ce beau message :
Fonction2 : undeclared identifier
Fonction2 : redefinition; different type modifiers

Quelqu'un aurait une idée?

dimanche 11 mai 2008 à 21:33:32 | Re : Pb d'appel de fonctions dans une dll c++

SAKingdom

Membre Club
Réponse acceptée !
Si tu veux utiliser fonction2 dans fonction1, il faut que fonction2 soit définit avant fonction1 ou que son prototype soit déclaré:

extern "C"
{
    __declspec(dllexport) int Fonction2();

   __declspec(dllexport) void Fonction1()
   {
      Fonction2();
   }

   __declspec(dllexport) intFonction2()
   {
      return 1;
   }
}

P.S. __declspec prend, normalement 2 _ en préfixe pas 4.


C++ (@++)

dimanche 11 mai 2008 à 22:10:05 | Re : Pb d'appel de fonctions dans une dll c++

psychospire

Effectivement ca marche, c'était tout simple en fait lol merci à toi.
En fait, je demandais ca car j'ai un problème un peu plus compliqué :
Dans ma fonction 1, j'ai une fonction 3 qui prend pour paramètre la fonction 2 :

extern "C"
{
__declspec(dllexport) intFonction2()
   {
      return 1;
   }
   __declspec(dllexport) void Fonction1()
   {
      Fonction3(Fonction2);
   }
}

Cette fonction3 est appelée à partir d'une bibliothèque extérieure et j'ai pas moyen de savoir comment elle marche (je pense qu'elle utilise des pointeurs).

Bref, quand j'appelle la fonction 1 à partir de vb, ce dernier me dit :
Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.

Une idée d'où cela peut venir ? Merci d'avance.

dimanche 11 mai 2008 à 22:13:54 | Re : Pb d'appel de fonctions dans une dll c++

SAKingdom

Membre Club
Quel est le prototype de Fonction3 ?

C++ (@++)

dimanche 11 mai 2008 à 22:24:57 | Re : Pb d'appel de fonctions dans une dll c++

psychospire

Qu'entends-tu par prototype?
dimanche 11 mai 2008 à 22:29:21 | Re : Pb d'appel de fonctions dans une dll c++

psychospire

Je précise qu'avec le programme c++ de base, ma fonction 3 marche tres bien..
dimanche 11 mai 2008 à 23:03:29 | Re : Pb d'appel de fonctions dans une dll c++

SAKingdom

Membre Club
Le prototype inclut le type de retour, le nom de la fonction, ses paramètres et autres petites choses (comme les conventions d'appel par exemple) si il y a lieu.

__declspec(dllexport) void Fonction1();

Ceci est le prototype de Fonction1.
Quel est celui de Fonction3 ?

C++ (@++)

dimanche 11 mai 2008 à 23:11:11 | Re : Pb d'appel de fonctions dans une dll c++

BruNews

Administrateur CodeS-SourceS
La convention d'appel doit être réglée direct au niveau du compilo pour ne pas faire d'erreurs (oubli de préciser ou autre), surtout si cette dll sera exploitée par différents langages.
32 bits : __stdcall
64 bits : __fastcall
La dll sera ainsi au standard de l'API Windows.

ciao...
BruNews, MVP VC++
dimanche 11 mai 2008 à 23:23:03 | Re : Pb d'appel de fonctions dans une dll c++

psychospire

-> Sakingdom : je ne connais rien de cette fonction, c'est ce qui est un peu embetant...

-> Brunews : je dois rajouter __stdcall à chaque fonction de ma dll ou seulement à celles que j'exporte?
Je l'ai ajouté à la fonction1 (celle que j'exporte) et mon erreur à changé : il me dit maintenant qu'il n'arrive pas à trouver le point d'entrée de ma fonction 1.

J'ai écrit :
extern "C"

    intFonction 2()
   {
      return 1;
   }
   __declspec(dllexport) void __stdcall Fonction1()
   {
      Fonction3(Fonction2);
   }
}

Une idée?

dimanche 11 mai 2008 à 23:32:49 | Re : Pb d'appel de fonctions dans une dll c++

SAKingdom

Membre Club
Tu ne connais même pas ses paramètres ? Comment fais tu pour l'utiliser. Si tu y va au pif, c'est un jeu risqué.

Ajoute __stdcall pour les fonctions exportées. On est ainsi être sûr de la façon de les appeler à partir de l'extérieur.

C++ (@++)


1 2

Cette discussion est classée dans : pb, partir, appel, dll, fonctions


Répondre à ce message

Sujets en rapport avec ce message

Appel dll VB6 à partir de C++ [ par stof35 ] Bonjour,Je dois réaliser l'intégration d'une DLL écrite en VB6 par un prestataire externe dans un projet C++. J'ai essayé par des moyens classiques ma appel des fonctions d'un fichier dll [ par hattabfethi ] [C++] pb au niveau d'un .lib [ par Famidoo ] Bonjour, je souhaite générer une DLL.Pour cela ma DLL nécessite un certain nombre de fonctions présentent dans 3 .lib différentes que j'ai créé. Ainsi appel d'une fonction sous dev c++ (fftw) [ par gbreux ] Bonjour,je réalise une dll sous dev c++. J'arrive à créer une dll seulement je fais appel à des fonctions contenue dans des dlls autres qui se situe d Appel d'une DLL à partir d'un code en C ? [ par hitachicm615 ] Bonjour à vous,J'ai un programme que j'ai codé en C.J'ai une carte d'experimentation livrée avec une DLL et je voulais savoir comment l'appeller dans Appel DLL C++ depuis NSDK [ par wislam2007 ] Salut les amis, franchement dans la merde! avec une dll c++. Je doit appelé une methode de cette DLL depuis une environnement NSDK, Sachant que cette chargement dll c# depuis c++ [ par wislam2007 ] Salut, quand je test sur mon poste l'appel d'une dll c++ qui appel une dll (.tlb) c# ça fonctionne sans probleme, par contre quand je passe a un aut Compilation dll avec appelle de fonctions externes [ par pingosso ] Bonjour, Je travaille en ce moment sur un projet qui rassemble du C du VB.NET et du fortran. EN fait j'ai un problème pour faire communiquer le simu C:Plantage du programme lors de l'utilisation de fonctions contenues dans une dll [ par snoussia ] Bonjour,Je suis actuellement en cours de développement d' projet en c sous VS2003  qui utilise des fonctions de communication via les sockets que j'ai Utiliser les fonctions contenues dans des classes d'une DLL [ par romauto750 ] Bonjour à tous,Je me tourne vers vous car je dois utiliser les fonctions d'une dll. Le problème c'est que dans cette dll, il y a plusieurs classes. Je


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 2,980 sec (3)

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