IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

c++ appelle une DLL Delphi: La mémoire ne peut être "written"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par défaut c++ appelle une DLL Delphi: La mémoire ne peut être "written"
    Bonjour tout le monde,

    j'ai un programme C++ qui appelle une DLL écrite en delphi, quand j'essai d'executer mon prog, j'ai une erreur du type:

    ********************************************************
    L'instruction à "0x...." emploie l'adresse mémoire "0x.....". La mémoire ne peut être "written".

    Cliquez sur Ok pour terminer le programme.
    Cliquer sur Annuler pour deboguer le programme.
    *******************************************************

    La même DLL appelée depuis Delphi marche très bien, mais appelée depuis C++ ca crash...
    En plus, si je me met en mode debug en C++, au moment de l'appel de la dLL il me sort une erruer du genre:
    Unhandled excetpion in MonProg.exe (MaDll.dll): 0xC0000005: Access Violation.

    A noter j'utilise Visual C++ 6.0 et que ma dll écrite en delphi fait appel aussi à un exe delphi. Quelqu'un a déjà recontré ce type de blem.
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    On peut avoir un bout de code ?
    Comment utilises-tu la dll ? En faisant un LoadLibrary ou en appelant les méthodes directement en linkant statiquement avec la lib ?

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par défaut
    Citation Envoyé par ep31
    On peut avoir un bout de code ?
    Comment utilises-tu la dll ? En faisant un LoadLibrary ou en appelant les méthodes directement en linkant statiquement avec la lib ?
    le voila mon code c++, j'utilise un loadlibrary
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #include "stdafx.h"
    #include "windows.h"
     
    int main(int argc, char* argv[])
    {
     
      typedef void (_stdcall *ProcDllPtr)(int ExportType, char* Listerefcon, 
    	                                  int DestinationType, bool MajStatuts,
    									  bool choixRepertoire, char* RepertoireCible,
    									  bool CreerUnitaire);
     
      HINSTANCE hInstLibrary = LoadLibrary("ED_DLL.dll");
      if (hInstLibrary == NULL)   {
          FreeLibrary(hInstLibrary);
          return 1;
       }
     
      ProcDllPtr ProcExportDll = (ProcDllPtr) GetProcAddress(hInstLibrary, "ProcExportDll");
     
      if (ProcExportDll == NULL) {
          FreeLibrary(hInstLibrary);
    	  return 2;
       }
     
      ProcExportDll(1, "4031589", 1, true, true, "G:\Nouveau dossier", false);
     
      return 0;
    }
    Je crois qu'il y a une certaine problématique lors de l'appel des fonctions avec des parametres de type string dans delphi, mais je ne crois pas que ca serai la cause de mon erreur!!!
    Merci de ta reponse rapide déjà

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Est-ce que ca plante à la ligne suivante ou non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProcExportDll(1, "4031589", 1, true, true, "G:\Nouveau dossier", false);

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par défaut
    c'est exactement lors de l'execution de cette ligne que ca plante

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Ton cinquième paramètre est incorrect (il manque un \ pour ignorer le \):
    Essaie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProcExportDll(1, "4031589", 1, true, true, "G:\\Nouveau dossier", false);

Discussions similaires

  1. Comment appeler une dll VB6 sous delphi
    Par zanoubya dans le forum Débuter
    Réponses: 6
    Dernier message: 05/10/2009, 18h04
  2. Appel d'une DLL Delphi en C#
    Par joc02 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 14/05/2009, 16h25
  3. Réponses: 5
    Dernier message: 08/08/2008, 14h48
  4. Réponses: 4
    Dernier message: 01/06/2006, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo