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

API, COM et SDKs Delphi Discussion :

[DLL] Violation d'acces dans msvbvm60.dll


Sujet :

API, COM et SDKs Delphi

  1. #1
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut [DLL] Violation d'acces dans msvbvm60.dll
    Bonjour,

    J'ai développé une DLL en vb avec 1 fonction comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function GetMasse(Ext As String) As String
      GetMasse = "OK"
    End Function
    Et je veux appeler cette fonction depuis mon programme Deplhi et je fais comme ça :

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
       msg: string;
       HandleDLL: THandle;
       GetMasse : function (Ext: Variant): Variant;  stdcall;
    begin
       GetMasse := nil;
       //Chargement de la DLL
       HandleDLL := LoadLibrary(pAnsiChar('DLLSample.dll'));
     
       //Si la DLL n'est pas chargée on ne continue pas
       if HandleDLL = 0 then Exit;
     
       //Récupération de l'adresse de la fonction nommée 'Somme'
       GetMasse := GetProcAddress(HandleDLL, pAnsiChar('GetMasse'));
     
       //Appel de la fonction si on a bien récupéré son adresse
       if Assigned(Fonction) then
           MessageDlg('Youpiiiiii', mtWarning, [mbOK], 0);
     
       msg := GetMasse('.ASM');
       MessageDlg(msg, mtWarning, [mbOK], 0);
    end;
    Ma fonction VB est bien exportée ( j'ai verfiié avec tdump, elle se charge bien ( j'ai mon MessageDlg qui apparait ) mais dés que je l'appelle, j'ai une violation d'accés dans le module msvbvm60.dll ...

    Quelqu'un aurait-il une idée ? Merci d'avance

  2. #2
    rbh
    rbh est déconnecté
    Membre confirmé Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Points : 473
    Points
    473
    Par défaut
    Salut
    je ne suis pas sûr mais j'ai peut-être une piste.
    Cela s'applique à l'utilisation de DLL utilisant des chaines de caractères mais pas spécialement VB.
    Citation Envoyé par L'aide delphi
    Sous Windows, si une DLL exporte des routines qui transmettent des chaînes longues ou des tableaux dynamiques comme paramètres ou comme résultat de fonction, que ce soit directement ou à l'intérieur d'enregistrements ou d'objets, la DLL et ses applications client (ou DLL) doivent toutes utiliser l'unité ShareMem. Cela s'applique également si une application ou une DLL alloue avec New ou GetMem de la mémoire qui est désallouée par l'appel de Dispose ou FreeMem dans un autre module. Quand elle est utilisée, l'unité ShareMem doit toujours être la première unité énumérée dans la clause uses du programme ou de la bibliothèque l'utilisant.

    ShareMem est l'unité d'interface du gestionnaire de mémoire BORLANDMM.DLL qui permet à des modules de partager de la mémoire allouée dynamiquement. BORLANDMM.DLL doit être déployé avec les applications et les DLL qui utilisent l'unité ShareMem. Quand une application ou une DLL utilise ShareMem, son gestionnaire de mémoire est remplacé par celui contenu dans BORLANDMM.DLL..
    Mais cela dit, ici il parle de DLLs créer avec Delphi qui doivent avoir "Sharemem" en première clause uses du DPR, tout comme l'application.
    Je ne vois pas comment le faire en VB mais il doit y avoir quelque chose à faire.

    PS:
    En plus je vois que ta fct° VB renvoie une chaine et tu l'utilise dans delphi avec des variants, je ne trouve pas ça très joli.

  3. #3
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Merci pour votre temps !
    Effectivement, les variant sont pas tres jolis, mais ce n'est que le resultat de pultiple test de passage de parametres ...

    Je vais fouiller du coté de Sharemem !

    Merci !

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    A mon avis l'utilisation de PChar serait plus judicieuse mais dans ce cas il faudrait que le String de VB soit un TSTR ou variante natives. Vérifie aussi que VB exporte ses fonctions avec la convention stdcall.

  5. #5
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    comment puis-je savoir si VB export ses fonction a la convention stdcall ?

    MErci

Discussions similaires

  1. [WS 2008 R2] Violation d'accès module rtutils.dll
    Par franck1001 dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 28/11/2012, 21h41
  2. Violation d'adresse dans user32.dll
    Par JP.NUAGE dans le forum Langage
    Réponses: 1
    Dernier message: 30/07/2012, 09h36
  3. Chemin d'accès dans une dll
    Par The_link dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 15/05/2008, 19h14
  4. Violation d'accès sur oleaut.dll
    Par colorid dans le forum Delphi
    Réponses: 6
    Dernier message: 20/01/2007, 11h32
  5. Message de violation d'accès dans la dcc50.dll
    Par cchatelain dans le forum EDI
    Réponses: 17
    Dernier message: 29/11/2005, 18h28

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