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 :

Problème de dll


Sujet :

Langage Delphi

  1. #1
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut Problème de dll
    Salut,

    J'ai crée une dll en C++ sous VC, dont j'export une fonction.Voici la déclaration de cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #define DLLIMPORT __declspec(dllexport)
     
    extern "C" { 
    	DLLIMPORT char * maFonction(int , int ,int , int , char *); 
    }
    J'utilise la convention d'appel cdecl.

    La dll fonctione avec une application C++.

    Maintenant quand j'essay d'appeler la dll à partir d'une application Delphi j'obtient une exception externe C000001D mais des fois une violation d'accés (elle change en fonction du dérnière argument ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function maFonction(un:integer; deux:integer; trois:integer; quatre:integer; cinq:pchar):pchar ;cdecl; external 'decoder_dll.DLL';
    En fait ma fonction analyse une Bitmap et renvoy une chaine de caractére. Le dérniére argument et suposer passer un pointeur sur le premier pixel de l'image.

    Voici comment j'emploi la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var
       res : pchar;
    begin
    res := maFonction(bmp.Width, bmp.Height, bmp.Width * bmp.Height * 3, 0,pchar(bmp.ScanLine[0]));
    cette appel génére donc l'exception externe. en remplacant le dernier arguement par un pchar('blabla'), j'obtient une violation d'acces.

    La fonction ne fait rien. j'ai enlever tout traitement pour être sur que l'erreur vient du passge de pramétre. tout ce qu'elle fait c'est de renvoyé un pointeur sur une chaine de caractére.

    donc merci pour toute aide.

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par etranger Voir le message
    En fait, si ton DIB est "bottom-up", ce qui est le plus souvent le cas, l'image se construit à l'envers. Et donc ce que tu veux c'est Bmp.ScanLine[LineCount-1].

    Citation Envoyé par etranger Voir le message
    en remplacant le dernier arguement par un pchar('blabla'), j'obtient une violation d'acces.
    Ben oui mais là tu donnes une chaîne beaucoup trop courte par rapport à ce qu'attend ta procédure. Donc forcément tu vas lire trop loin et ça plante.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut
    en fait non, puisque je ne lis rien dans ma fonction (j'ai commenté tout le code actif).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {
     
    char * result ="bad";
     
    return result;
    }

  4. #4
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut
    personne à une idée, parceque je suis vraiment bloqué.

  5. #5
    Membre actif Avatar de etranger
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 333
    Points : 268
    Points
    268
    Par défaut
    Sa fonctionne. Comme un imbessile je ne me suis pas appercu que je détruisait l'image avant d'appeler ma fonction et en plus il falait écrire scanline[Linecount - 1] comme l'a dit sjrd.

    Donc merci et désolé pour ce dérangement.

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

Discussions similaires

  1. Problème utilisation DLL
    Par Tub-95 dans le forum MFC
    Réponses: 4
    Dernier message: 02/11/2005, 12h00
  2. conteneur de la STL (problème avec DLL et COM)
    Par moldavi dans le forum MFC
    Réponses: 8
    Dernier message: 25/07/2005, 22h43
  3. Problème de dll à l'execution
    Par gege2061 dans le forum Windows
    Réponses: 3
    Dernier message: 11/03/2005, 11h22
  4. problème execution dll
    Par semenzato dans le forum MFC
    Réponses: 15
    Dernier message: 19/12/2003, 16h40
  5. Problème de DLL.
    Par Lunedor dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/11/2003, 10h17

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