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

Delphi Discussion :

erreur stdCall DLL


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 69
    Billets dans le blog
    1
    Par défaut erreur stdCall DLL
    Bonjour,
    je rouvre la discussion car il s'agit d'un problème apparenté.
    Depuis douze ans je fais tourner des serveurs qui appellent sans problème plusieurs centaines de milliers de fois par jour une DLL au travers d'un stdCall.
    Or sur un ordinateur plus récent, ces serveurs plantent. J'ai essayé sur un autre ordinateur récent : même problème. (violation d'accès)
    Je dispose de Delphi 10.2 pour examiner le problème. Mais en mode debug de l'EDI le serveur marche parfaitement. Il n'y a qu'en compilé que le problème se produit. J'ai essayé le mode administrateur sans succès.
    en explorant un peu le code j'en suis arrivé à la conclusion que c'était l'appel à la DLL qui provoquait l'erreur. J'ai alors supprimé le StdCall : l'erreur disparait mais les résultats sont erronés.
    Il semblerait bien que ce soit lié aux ordinateurs récents...
    quelqu'un a une idée ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 638
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par GerardJ Voir le message
    quelqu'un a une idée ?
    Un problème de nombre de Bits 32/64 ?

  3. #3
    Membre confirmé

    Inscrit en
    Novembre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 69
    Billets dans le blog
    1
    Par défaut
    les ordinateurs sur lesquels ça fonctionne sont tous des 64 bits avec des cores I7 de 4ème génération. Un windows 10 famille (après upgrade) et l'autre W7 pro
    Celui sur lequel il y a des problèmes est aussi 64 bits core I7 de 7ème génération. W10 famille

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 093
    Par défaut
    En même temps, en 64bits, il n'y a plus de convention d'appel spécifique, il n'y a plus qu'une seule convention le __fastcall
    Tout ça c'est valable pour les programmes 32Bits qui doivent effectivement conservé le register/pascal en interne et le stdcall/safecall pour l'extérieur
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre confirmé

    Inscrit en
    Novembre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 69
    Billets dans le blog
    1
    Par défaut
    Merci pour vos informations mais ceci n'éclaire pas encore ma lanterne...
    Suite à ton dernier post j'ai essayé de remplacer stdcall par safecall : toujours le même problème. Fastcall n'est pas reconnu par le compilateur.
    La question est pourquoi un programme qui tourne depuis longtemps sur des machines 64 bits cesse de tourner sur des machines plus récentes avec le même type de CPU ?
    Pourquoi le programme tourne sur ces machines plus récentes en mode debug de l'EDI Delphi 10.2 mais pas en compilé ?

    Mon problème est critique : mon site tourne actuellement sur les machines anciennes et si l'une d'elles tombe en panne, je n'ai pas de solution pour continuer...
    Un ami m'a dit qu'intel avait introduit une sécurité supplémentaire dans ses puces : serait-ce là le problème ?

  6. #6
    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
    alors petits rappels

    1) une appli 32 bits, tourne en 32 bits, même sur une OS 64bits (une application 64Bits ne peut pas tourner sur un OS 32bits)

    2) les applis 32 bit ne sont pas compatibles avec les DLL 64bits et vice versa

    3) la convention d'appel ce n'est pas une option qu'on peut changer comme on veux, ce doit être cohérent entre l'appelant et l'appelé, suivant le choix qui est fait, les paramètres sont passés de droite à gauche ou de gauche à droite, via des registres ou sur la pile, en laissant l'appelant nettoyer la pile ou en le faisant après l'appel...donc, sauf cas rares (procédure sans paramètre ou avec un seul paramètre qui passe dans un registre), on ne peux pas mettre n'importe quoi comme convention d'appel, il faut absolument choisir la bonne option. De Delphi à Delphi, il suffit de mettre la même option des deux côtés, de Delphi vers un autre langage, c'est généralement stdcall qui est utilisé sous Windows...mais pas toujours. safecall est utilisé pour remplacer une fonction retournant un HRESULT dans le cadre des appels COM (ActiveX).

    4) la convention d'appel ne change pas en fonction du processeur.

    je recommande l'usage de madExcept pour débuguer les violations d'accès ou fuites de mémoire, c'est un produit excellent ! Il ne permet pas de tout identifier mais pointe souvent dans la bonne direction.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. erreur OCI.dll
    Par sidharta dans le forum Oracle
    Réponses: 3
    Dernier message: 23/12/2005, 17h10
  2. Erreur => LIBMYSQL.dll
    Par wolfjeremy dans le forum Outils
    Réponses: 2
    Dernier message: 22/12/2005, 15h39
  3. erreur avec dll sous winXP sp2 / IIS5.1
    Par totoche dans le forum ASP
    Réponses: 10
    Dernier message: 12/12/2005, 16h27
  4. Erreur compilation DLL dans Eelphi 6
    Par jakouz dans le forum Langage
    Réponses: 2
    Dernier message: 25/05/2005, 16h38
  5. [C#] Erreur mscoree.dll
    Par Damsou dans le forum Windows Forms
    Réponses: 12
    Dernier message: 20/01/2005, 11h56

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