Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problem de pointeur lors de l'appel d'une fonction d'une DLL [ Archives / J'AI BESOIN D'AIDE !!!! :O ] (astrorico44)

lundi 6 mars 2006 à 00:21:27 | Problem de pointeur lors de l'appel d'une fonction d'une DLL

astrorico44

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;

begin

Pdata_to_write:=@data_to_write;
WriteContinous(Pdata_to_write);

a noter que le fonction C ne renvoie rien mais j'ignore comment l'ecrire en delphi.
Si vous voyez ce qui cloche je suis preneur

Cordialement

Eric

lundi 6 mars 2006 à 01:03:18 | Re : Problem de pointeur lors de l'appel d'une fonction d'une DLL

cirec

Membre Club Administrateur CodeS-SourceS
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

lundi 6 mars 2006 à 22:18:33 | Re : Problem de pointeur lors de l'appel d'une fonction d'une DLL

astrorico44

l'erreur est une access violation at 0x7c974a50: write of address 0x00030d24

idem avec la declaration cdecl....

je suis sur de la declaration de la fonction en C, j'essai d'avoir les sources

y a t'il une autre maniere d'appeler cette fonction en delphi que celle que j'ai utilisé ?

Eric

lundi 6 mars 2006 à 22:26:16 | Re : Problem de pointeur lors de l'appel d'une fonction d'une DLL

cirec

Membre Club Administrateur CodeS-SourceS
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

@+
Cirec

lundi 6 mars 2006 à 23:57:42 | Re : Problem de pointeur lors de l'appel d'une fonction d'une DLL

f0xi

Membre Club Administrateur CodeS-SourceS


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( ... ) { ... }


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.


mardi 7 mars 2006 à 10:09:16 | Re : Problem de pointeur lors de l'appel d'une fonction d'une DLL

astrorico44

voici le source de la fonction ds la DLL

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);
}

ca ne marche pas mieux avec le TStr9 = string[9];

A+
Eric


mardi 7 mars 2006 à 10:55:18 | Re : Problem de pointeur lors de l'appel d'une fonction d'une DLL

cirec

Membre Club Administrateur CodeS-SourceS
Bon alors essaye comme ceci :

Procedure WriteContinous(var  Pdata_to_write:Pchar); stdcall;  external 'atusbhid.dll';
où encore avec le TStr9

@+
Cirec

mardi 7 mars 2006 à 16:52:49 | Re : Problem de pointeur lors de l'appel d'une fonction d'une DLL

f0xi

Membre Club Administrateur CodeS-SourceS
void STDCALL WriteContinuous(unsigned char *buffer)
=
procedure WriteContinuous(buffer : string); stdcall; external 'atusbhid.dll';


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.


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.


mardi 7 mars 2006 à 20:55:49 | Re : Problem de pointeur lors de l'appel d'une fonction d'une DLL

astrorico44

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 est ici



cordialement

Eric

function InitHid():integer;  stdcall; external 'atusbhid.dll';
function FindHidDevice(const VendorID,ProductID:integer):integer; stdcall;  external 'atusbhid.dll' ;
Procedure SetReportContinuous(); stdcall;  external 'atusbhid.dll';
Procedure WriteContinous(var Pdata_to_write:Pchar); stdcall;  external 'atusbhid.dll';
//function ReadContinous(var buffer : string):integer ; stdcall;  external 'atusbhid.dll';



procedure TForm1.Button1Click(Sender: TObject);

const

 VendorID  = $03EB;
 ProductID = $201D;


var
  DllInstance, error:integer;
   Pdata_to_write:Pchar;
  data_to_write:array[0..8] of char;


begin


Pdata_to_write:=@data_to_write;


    InitHid();

    error := FindHidDevice(VendorID,ProductID);
    If (error = 0) then begin
                   showMessage('Device not connected ');
                   end;




     SetReportContinuous();
    data_to_write[0]:='1';
    data_to_write[1]:='1';
    data_to_write[2]:='5';
    data_to_write[3]:='5';
    data_to_write[4]:='1';
    data_to_write[5]:='1';
    data_to_write[6]:='5';
    data_to_write[7]:='5';
    data_to_write[8]:='2';


   WriteContinous(Pdata_to_write);

 end;










Cette discussion est classé dans : fonction, appel, dll, to, write


Répondre à ce message

Sujets en rapport avec ce message

Type d'une fonction d'une DLL [ par sebastienbro ] Voilà, j'aimerais savoir s'il est possible de retourner une auytre valeur que ShortString (String par exemple)Et si oui, comment, parceque dès que je appel dll en C depuis delphi [ par bdv ] quel est le code pour appeler une fonction X dans une dll développée en C? Comment ajouter des param. à l'appel d'une DLL [ par Pierrotmad ] J'ai un prog qui appelle une dll que j'ai réalisé . Dans la dll, j'ai un champ texte, disons pour l'exemple EdtChemin.text . J'aimerai mettre en param Pas de son à l'appel d'une fonction Javascript [ par veuda ] Bonjour,j'ai une question au sujet du composant TWebrowser et de Javascript.J'ai une petite application qui affiche du contenu dans un TWebrowser.Pour prb avec dll et tableau dynamique [ par bd ] actuellement je recois en parametre d'une fonction un tableau de longueur variable. ce tableau est rempli dans la fonction de la dll.au retour dans la Problèmes de DLL [ par LeGuepard ] Bonjour à tous,J'ai quelques petits problèmes de DLL. En fait j'ai remarque que deux de mes dll avait un bug commun, à savoir qu'elles déforme des cha Appel de Fonction de façon "dynamique" [ par cerber943 ] Bonjour,Je souhaite savoir s'il est possible d'appeler une fonction en ayant son nom dans une variable sans pour autant faire une sorte d'interprétteu appel de procedure depuis dll [ par MoveX ] bonsoir les delphistes !comment appeler une procedure presente dans l unite d une form depuis une dll?//procedure dans l unite de la formprocedure TFo Newby vs. dll [ par DeltaFX ] Salut a tous,Je suis un pur newby, et je me retrouve en train d'essayer de pondre une dll avec delphi 7. Jusque là ca va, j'ai suivi des tutos de ci, appel dll delphi depuis code visual basic [ par furax13 ] bonjour,je dois développer une dll en delphi qui sera appelée à la fois depuis un programme delphi et depuis un programme en visual basic.Je n'ai pas


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.