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 violation douteuse


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Points : 31
    Points
    31
    Par défaut DLL violation douteuse
    Salutation

    un petit problème douteux.
    dans mon programme delphi j'utilise des DLL avec FastShareMem.
    Jusque la, pas de problème.

    L'une des DLL a besoin de WHTTP.dll
    et c'est la que ca pose problème.
    le chargement dynamique plante avec

    Violation d'accès à l'adresse 009D7404. Lecture de l'adresse 009D7404

    bon ok je test en statique : ca marche une fois et apres ca replante tout le temps...


    Il faut savoir que le programme que je développe était a l'origine un gros CGI que j'ai découpé en DLL pour l'optimiser. Il utilise en dynamique WHTTP.dll mais bien sûr, lui n'a pas ce problème.

    c'est pourquoi je me demande si le fait qu'une dll soit appelée par une autre puisse provoquer ce genre de violation d'accès ???

    merci

  2. #2
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    Dans la FAQ Fastmm, il est dit:
    Q: How do I get my DLL and main application to share FastMM so I can safely pass long strings and dynamic arrays between them?
    A: The easiest way is to define ShareMM, ShareMMIfLibrary and AttemptToUseSharedMM in FastMM4.pas and add FastMM4.pas to the top of the uses section of the .dpr for both the main application and the DLL.
    De même pour FastShareMem:
    The FastSharemem code comes into play only when each Delphi DLL or EXE is loaded into memory. After that, FastSharemem is no longer involved. Each memory allocation, in both EXE and DLL's, now work just as they do when there are no DLLs--unlike Sharemem/Borlndmm.dll, there is no "memory middleman". Your application functions exactly as it does when only a single .EXE is involved. This improves performance, and eliminates many bugs.
    A priori, il s'agit de partager de la mémoire entre les exe et les dll faites en Delphi en utilisant ce méchanisme. Est ce que WHTTP.dll que tu appelles implémente aussi ce mécanisme ?

    Disons qu'une raison majeure d'utiliser FastShareMem, c'est de partager un espace mémoire entre l'exe et les dlls.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    j'utilise FastShareMem pour les autres DLL.
    WHTTP.dll n'en a pas besoin, il demande des PChar

    mais comme la DLL qui appelle WHTTP.dll utilise FastShareMem, peut être ya t'il un conflit.

  4. #4
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    Citation Envoyé par FM_UA Voir le message
    j'utilise FastShareMem pour les autres DLL.
    WHTTP.dll n'en a pas besoin, il demande des PChar

    mais comme la DLL qui appelle WHTTP.dll utilise FastShareMem, peut être ya t'il un conflit.
    Mémoire partagé(exe&dlls)+ thread(WHTTP), est ce que ça fait bon ménage, c'était juste une réflexion, je sais pas si ça t'aidera. C'est le genre de casse tête dont personne ne voudrait avoir affaire .

    A la limite, si tu mettrais ton code de la dll dans l'exe qui appelle WHTTP, qu'est ce que ça donne ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    Bon ca avance, j'ai retrouvé la source de la DLL WHTTP, mais c'est du delphi 7 et j'utilise du delphi 6 donc j'aimerais bien ne pas y toucher

    sinon l'erreur semble venir d'un parametre totalement bidon :
    la fonction de la DLL attend un PChar, je lui donne Nil.
    Elle compire le Pchar a nil et agit en conséquence.

    Sur la version non découpée, la DLL reconnait le nil et fonctionne bien.
    Sur la version découpée en DLL, la fonction renvoie l'erreur.
    Si je met un string a la place du Nil, ca marche ...... mais ca change le fonctionnement de la fonction vu qu'elle compare le parametre avec Nil

    je vais continuer a chercher

    NIL de delphi 6 différent de Nil de delphi7 ?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    Bon j'ai fait des tests.
    Et c'est encore plus étrange...

    En lançant la fonction de la dll WHTTP.dll a partir:
    _de l'exe : ça marche.
    _à partir de la fonction exportée de la DLL intermédiaire : ça marche.
    _à sa place dans la procédure appelée par la fonction exportée de la DLL intermédiaire : ça marche pas

    Qu'est-ce qui se passe ?


    EDIT: it's magic En mettant en commentaire une ligne de code (Session.free), ça plante pas. Le problème c'est que la procédure n'utilise pas Session... Et que Session.free ne provoque pas d'erreur dans les autres DLL....

Discussions similaires

  1. Problème Acces Violation dans une DLL d'envoi de mail
    Par Avisseau dans le forum Delphi
    Réponses: 1
    Dernier message: 25/10/2006, 17h48
  2. erreur Eaccess violation dans module ntdll.dll
    Par cilies38 dans le forum Langage
    Réponses: 1
    Dernier message: 05/05/2006, 21h12
  3. [DLL] Violation d'acces dans msvbvm60.dll
    Par SubZero2 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 10/04/2006, 14h46
  4. Message de violation d'accès dans la dcc50.dll
    Par cchatelain dans le forum EDI
    Réponses: 17
    Dernier message: 29/11/2005, 19h28
  5. Violation d'accès du module msado15.dll
    Par kobe dans le forum Bases de données
    Réponses: 4
    Dernier message: 19/08/2005, 11h57

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