Problem de pointeur lors de l'appel d'une fonction d'une DLL
astrorico44
Messages postés4Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention 7 mars 2006
-
6 mars 2006 à 00:21
astrorico44
Messages postés4Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention 7 mars 2006
-
7 mars 2006 à 20:55
Bonjour,
j'essai d'appeler une fonction d'une DLL ecrite en C en delphi
les premieres fonctions de la DLL fonctionnent mais je n'arrive pas a
appeler la suivante en delphi.
appel en C: WriteContinuous(leds); (avec unsigned char leds[9];)
En delphi et chargement statique de la DLL
J'ai essayer pas mal de truc mais sans succes
function WriteContinous(var Pdata_to_write:Pchar):integer; stdcall; external 'atusbhid.dll';
var
Pdata_to_write:Pchar;
data_to_write:array[0..8] of char;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 6 mars 2006 à 01:03
Salut,
c'est quoi l'erreur ?
donne le massage
as-tu la source de la dll ?
es-tu sur de la déclaration de la fonction ?
si non essaye Cdecl à la place de StdCall Extrait de l'aide Delphi :
La convention cdecl est utile pour les appels de fonctions à partir de bibliothèques partagées écrites en C ou en C++
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 6 mars 2006 à 22:26
Non je ne crois pas qu'il y ait une autre manière d'appeler une fonction où procedure depuis une Dll.
Mais si tu arrives à avoir la source on pourra vérifier la syntaxe
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 6 mars 2006 à 23:57
function WriteContinous(Leds : Pchar) : integer;
a condition qu'en c++ elle soit ecrite (c++) :
int WriteContinous( ... ) { ... }
je pense que vus ce que tu dis plus haut il faudrait l'ecrire :
type
TStr9 = string[9];
procedure WriteContinous(Leds : TStr9);
pour (c++) :
void WriteContinous( ... ) { ... }
<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Vous n’avez pas trouvé la réponse que vous recherchez ?
c++ char* = delphi string
c++ void ident(){} = delphi procedure ident();
c++ type ident(){} = delphi function ident() : type;
donc
void STDCALL WriteContinuous(unsigned char *buffer)
{
unsigned char OutputReport[9];
OutputReport[0] = 0;
for (int c = 0; c < REPORTSIZE; c++)
OutputReport[c + 1] = buffer[c];
WriteReport(OutputReport);
}
=
procedure WriteContinuous(buffer : string);
var OutputReport : array[0..9] of char;
C : integer;
begin
OutputReport[0] := #00;
for c := 1 to REPORTSIZE do OutputReport[C] := Buffer[C];
WriteReport(OutputReport);
end;
si je ne fais pas d'erreur.
<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
astrorico44
Messages postés4Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention 7 mars 2006 7 mars 2006 à 20:55
Bonsoir...o desespoire elle ne veux toujours rien savoir cette .....perie de DLL
avec tous les exemples ci dessus ds tous les sens
ci-joint mon code si quelqu'un veut essayer la DLL estici