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 :

Allocation memoire dans une dll c++


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club Avatar de JakRenegade
    Homme Profil pro
    Etudiant en Informatique
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Etudiant en Informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Points : 39
    Points
    39
    Par défaut Allocation memoire dans une dll c++
    Bonjour a tous
    voici mon problème.

    J'ai une dll écrite en c++ (dont je ne connais pas le code). Je récupère correctement les fonctions de cette dll. Le soucis est pour une de ces fonctions.

    cette fonction doit allouer de la mémoire puis me retourner l'id de la zone mémoire allouer dans mon programme delphi.

    Le soucis, c'est une exception EAccessViolation.

    Voici le code qui me permet de faire appel a cette fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ReserveMemoryBuffer : function(iSize : integer;   iBufferNumber : pWord):word;
    ReserveMemoryBuffer(iTaille, BufferId)
    pWord est un type ^word. BufferId est de type pWord et iTaille est un integer.

    J'ai deja essayer en allouant ou non BufferId

    sachant que la méthode a pour entête en c++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned short ReserveMemoryBuffer(size_t size, unsigned short* BufferNumber)

    Est e que je fais les bonnes choses? Il y a t il une chose a respecter dans le cas d'allocation mémoire depuis une dll C++?

    Je sèche depuis un moment et j'attends donc vos réponses avec impatience

    Merci d'avance

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 875
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    6
    Par défaut
    On peut passer le BufferNumber (Word) en paramètre var : c'est id à un pWord. Par contre, à vérifier que la convention d'appel soit OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReserveMemoryBuffer : function(iSize : integer;  var iBufferNumber : Word): Word; StdCall; // ou cdecl, ou convention qui va bien !
    le type size_t est-il bien compatible avec un integer ?

  3. #3
    Nouveau membre du Club Avatar de JakRenegade
    Homme Profil pro
    Etudiant en Informatique
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Etudiant en Informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Points : 39
    Points
    39
    Par défaut
    D'abord, merci

    En ayant regarder sur le net, le type size_t est normalement compatible avec integer. Je reverifie pour etre sur.

    Je vais suivre tes conseils et revenir pour donner le resultat.

    -----------------------------------------------------------------------------------------
    Apres changement de convention d'appel, tentative d'ecrire en brute la taille, et tentative d'ajouter fastShareMem en uses, pas de reussite...

    Mais je me dis que le soucis vient peut etre de la transmission de pointeur entre la dll et le programme. cependantn je n'entrevois pas de solution.

    Ou serait ce un probleme d'echange de buffer? Puisque la methode ReserveMemoryBuffer va creer un buffer utilisable dans le exe...

    --------------------------------------------------------------------------------------
    Apres plusieurs essais, j'ai enfin cible le problème. apperement, le systeme ne supporte pas que je passe en parametre un pointeur et prefere une variable prefixe avec var. Il fallait aussi que je mette la convention d'appel que j'avais oubliee.

    Donc en gros, j'ai remis ma variable en parametre de methode en var et ajouter stdcall et ca fonctionne... Merci a toi de m'avoir guidé

    Peut etre reviendrai je bientot avec un nouveau soucis


    Bonne journee

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

Discussions similaires

  1. Allocation dynamique d'une variable dans une dll -> Crash
    Par Rominitch dans le forum Langage
    Réponses: 2
    Dernier message: 04/04/2014, 21h18
  2. [D7] - Allocation dynamique dans une DLL
    Par david_chardonnet dans le forum Delphi
    Réponses: 6
    Dernier message: 05/07/2006, 15h28
  3. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36
  4. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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