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

Langage Delphi Discussion :

DLL : passage d'une version delphi N-1 à une autre plus récente


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par défaut DLL : passage d'une version delphi N-1 à une autre plus récente
    Bonjour,
    j'ai une DLL créée en delphi 3, j'essaie de la passer en delphi 7.
    A la compilation : pas de pb. (La dll compilée avec D7 fait qd même 200ko de + que la dll compilée avec D3).
    Par contre lorsque le prog exe appelle la DLL : plantage : 'access violation...'.

    Y-a-t-il qqe chose à faire en particulier ?

    Merci

  2. #2
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    Je ne me souviens plus si Delphi 3 travaillait encore avec des ShortString (255 caractères maximum) ou si on était déjà passé aux chaînes de caractères étendues.

    S'il travaillait avec des shortstring, maintenant les chaînes de caractères sont gérées différemments.

    Pour utiliser ce type de chaînes comme paramètre dans une fonction d'une DLL (ou comme valeur de retour...), il faut que la DLL et l'application cliente fassent appel à l'unité ShareMem. Cette dernière doit se trouver en premier dans la liste des uses du projet.

    Fait une recherche dans l'aide en ligne sur ShareMem.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par défaut
    j'ai essayé mais ça ne vient pas de là....
    Dans mes fonctions exportées de la dll, j'ai des types 'PChar'.
    Non je ne vois vraiment pas ce qu'il ne va pas.

  4. #4
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    En dehors des strings, il y a le même problème si la DLL et l'appli s'échangent des blocs mémoires.

    Je veux dire par là, si l'un alloue le bloc et que l'autre le libère, ou que la DLL utilise des tableaux dynamiques (enfin je ne crois pas que ça existait déjà en D3).

    Sinon ben il reste à déboguer pour trouver ce qui provoque l'AV : Essaie de faire une nouvelle fonction dans la DLL avec la même signature mais qui ne fait rien et regarde si tu as déjà l'AV.

    Si ce n'est pas le cas, ben y plus qu'à trouver ce qui provoque l'AV dans la fonction appelée. Essaie de tout mettre en commentaire et réactive le code petit bout par petit bout...

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    le "long" string sont arrivées avec Delphi 2

    est-ce que ta DLL utilise des objets, des tableaux ou des string en paramètre ? utilise-t-elle ShareMem ?

    si tu peux répondre non à toutes ces questions, elle ne devrait pas poser de pb de compatibilité.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 139
    Par défaut
    mes fonctions de la dll sont comme la suivante :

    Function fct1(Com : PChar; FileIn : PChar; FileOut : PChar;
    var Line :integer; var Obs : LongBool): LongBool; export;

    Petite précision : ça plante dès que je lance l'appli. Je ne peux même pas suivre pas à pas dans le code pour voir où ça plante. Même en mettant un point d'arrêt au niveau le + haut du prog.
    En utilisant la DLL compilé en D3, ça marche.
    En cherchant sur le net, j'ai pê trouvé qqe chose : est-ce que ça ne viendrait pas d'un composant active X a installé sur ma DLL compilé en D7 ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/07/2012, 16h53
  2. Réponses: 2
    Dernier message: 21/10/2010, 10h15
  3. Réponses: 5
    Dernier message: 08/11/2007, 23h21
  4. Une version de linux pour une machine assez ancienne.
    Par Muesko dans le forum Distributions
    Réponses: 8
    Dernier message: 06/07/2006, 17h37

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