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

Outils Delphi Discussion :

Utilisation dll innosetup


Sujet :

Outils Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut Utilisation dll innosetup
    Bonjour à tous,

    j'utilise une dll pour récupérer l'adresse d'un serveur.
    mais j'ai une erreur à la fin de l'installation.

    message d'erreur :
    access violation at adress
    read of address

    merci de votre aide



    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
     
     
    [Files]
    Source: serverIP.dll; Destdir: {tmp}; flags: dontcopy
     
    [Registry]
    Root: HKCU; SubKey: Software\MonProgramme\PROJECT1; ValueType: string; ValueName: Build; ValueData: {code:GetIPServer}
     
     
    Code
    function getServer (drive1: PChar) : AnsiString; 
    external 'getServer@files:serverIP.dll stdcall  setuponly';
     
     
    function GetIPServer(param : string) : String;
    begin
      result := getServer('c:\'); 
    end;

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,

    Le fait que la fonction exportée renvoie un AnsiString pourrait me laisser penser que la dll en question a été développée avec Delphi. Est ce le cas ?
    Avez vous le prototype de la fonction exportée et les conventions d'appel ?
    Avez vous testé le fonctionnement de la dll depuis un programme Delphi "basique" ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut
    Bonjour Philippe,

    merci de t'être penché sur mon problème.

    Le fait que la fonction exportée renvoie un AnsiString pourrait me laisser penser que la dll en question a été développée avec Delphi. Est ce le cas ?

    //oui mais nous n'avons pas les sources.


    Avez vous le prototype de la fonction exportée et les conventions d'appel ?
    //non

    Avez vous testé le fonctionnement de la dll depuis un programme Delphi "basique" ?

    //Oui depuis delphi aucun problème.

    merci

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par dymyver Voir le message
    Le fait que la fonction exportée renvoie un AnsiString pourrait me laisser penser que la dll en question a été développée avec Delphi. Est ce le cas ?
    //oui mais nous n'avons pas les sources.

    Avez vous le prototype de la fonction exportée et les conventions d'appel ?
    //non

    Avez vous testé le fonctionnement de la dll depuis un programme Delphi "basique" ?

    //Oui depuis delphi aucun problème.
    Quelle version de Delphi ?
    Quel est le gestionnaire de mémoire utilisé avec Delphi ? ShareMem et BorlndMM.dll ? FastMM ?
    Puisque testé depuis un programme Delphi, peut-on voir comment est déclarée la fonction et comment elle est appelée ? avec la convention stdcall ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut
    Bonjour Philippe,

    ma version de delphi 2010
    FastMM


    merci
    code delphi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    const
      DLLName = 'serverIP.dll';
     
      function getServer (drive1: PChar) : AnsiString;  stdcall; external DLLName;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.btn1Click(Sender: TObject);
    begin
      ShowMessage(getServer('c:\'));
    end;

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,

    Le programme basique Delphi fonctionne car lui et la dll doivent s'appuyer sur l'unité FastShareMem et permettre le partage de ressources dont les string.
    Innosetup n'utilise pas ce partage d'une part et d'autre part il est développé avec une autre version de Delphi (2, 5 ou 2009 pour unicode). Ils n'utilisent donc pas le même tas (=heap) et l'erreur doit se produire lorsqu'Innosetup essaie de libérer la mémoire qui ne lui appartient pas...

    Sans pouvoir modifier les sources de la dll qui propose la fonction initiale, je ne vois qu'une solution alambiquée : créer une dll qui va encapsuler cet appel initial (ceci suivant les mêmes règles que le programme basique) et en proposer le résultat sous une forme exploitable par Innosetup, par exemple function GetServerIP(Drive1, ServerIP: PChar; LenServerIp: Integer): Integer;.
    Côté Innosetup, il faudra initialiser une chaine de caractères et en transmettre le pointeur et la taille à la fonction . Cette chaine sera remplie à concurrence de LenServerIP caractères (Ansichar) par la fonction appelée qui renverra également le nb de caractères réellement utiles...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation DLL créée sous VB6
    Par Dertron dans le forum Access
    Réponses: 12
    Dernier message: 05/04/2006, 14h54
  2. Problème utilisation DLL
    Par Tub-95 dans le forum MFC
    Réponses: 4
    Dernier message: 02/11/2005, 12h00
  3. [VB6] Utiliser dll .Net dans VB6
    Par sokette dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 31/03/2005, 14h34
  4. Utiliser Dll Delphi
    Par smyley dans le forum MFC
    Réponses: 9
    Dernier message: 12/03/2005, 18h21
  5. [D8] Utilisation dll D7 sous D8
    Par smyley dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 01/11/2004, 11h28

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