Salut,
J'ai crée une dll en C++ sous VC, dont j'export une fonction.Voici la déclaration de cette fonction
J'utilise la convention d'appel cdecl.
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 *); }
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 ):
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.
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';
Voici comment j'emploi la fonction :
cette appel génére donc l'exception externe. en remplacant le dernier arguement par un pchar('blabla'), j'obtient une violation d'acces.
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]));
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.
Partager