|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 807 ![]() |
Bonjour,
Je suis en train de développer une unité pour utiliser la librairie libacarsd.dll dans mon programme. J'ai réalisé, pour le moment, ce morceau de code : Code :
Code :
Je pense que ma conversion est bonne : Code c :
Qu'en pensez-vous ? La documentation de la DLL est consultable en ligne à cette adresse : http://www.acarsd.org/docu.html Merci pour votre aide, ZiP |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : avril 2002 Messages : 2 275 ![]() |
Le champ crc dans le record ACD est de type unsigned short, j'aurais plutôt mis Byte en correspondance plutôt que Word. Pour les tableaux, je sais pas si ca a vraiment une incidence, mais en C les tableaux commencent à 0, tu devrais peut-être les faire commencer à 0 aussi.
__________________
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal |
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 807 ![]() |
Bonjour,
Pour les types, je me suis basé sur ça : http://wiki.freepascal.org/Pascal_for_C_users Je viens de redémarrer Lazarus et en fait, c'est cette erreur là que j'ai : ![]() Merci, ZiP |
|
|
00
|
|
|
#4 | |
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 807 ![]() |
Voici la liste des fonctions de ma DLL extraites avec DLL Export Viewer :
Citation:
Code :
function acarsd_init(const buf: Integer; const sample: Integer; const pass: Integer): P_libacarsd; external 'libacarsd.dll' name 'acarsd_init@12'; Code :
function acarsd_init(const buf: Integer; const sample: Integer; const pass: Integer): P_libacarsd; cdecl; external 'libacarsd.dll' name 'acarsd_init@12'; Code :
function acarsd_init(const buf: Integer; const sample: Integer; const pass: Integer): P_libacarsd; stdcall; external 'libacarsd.dll' name 'acarsd_init@12'; J'ai également essayé des tableaux commençant à 0. Même problème. Cordialement, ZiP |
|
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() ![]() |
Bonjour,
Je commencerais déjà par nommer les fonctions appelées correctement, cad soit par leur nom littéral, soit par leur index, mais pas les 2... Et en respectant la convention d'appel C puis que cette dll est écrite apparemment en C. Soit : Code :
__________________
Philippe. |
||
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 807 ![]() |
Bonjour,
J'ai corrigé et je vous propose le projet de test ci-joint. C'est plus facile pour tester. J'ai toujours cette erreur : ![]() Si je mets ça : Code :
function acarsd_init(const buf: Integer; const sample: Integer; const pass: Integer): P_libacarsd; cdecl; external NomDLL name 'acarsd_init@12'; Code :
function acarsd_init(const buf: Integer; const sample: Integer; const pass: Integer): P_libacarsd; cdecl; external NomDLL index 12; Merci pour votre aide, ZiP |
|
|
00
|
|
|
#7 | ||||
|
Expert Confirmé
![]() ![]() |
Bonjour,
J'ai regardé votre projet. Les fonctions sont bien nommées telles que vous les aviez notées dans le 1° message. Mea Culpa ! Par contre, je suis allé récupérer le fichier libacars.h qui décrit les fonctions exportées : prototype et convention d'appel. On a : Code c :
On a donc : Code :
__________________
Philippe. |
||||
|
|
10
|
|
|
#8 |
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 807 ![]() |
Bonsoir,
Merci d'avoir pris le temps de regarder ! Je vais corriger ce point tout de suite. J'ai également avancé de mon côté, en fait, le crash est causé par le débogueur, si je lance mon programme à l'extérieur de Lazarus, il fonctionne correctement. Il y a donc un problème au niveau du débogueur, surement à cause de mon Windows 7 qui est en 64 bits alors que le reste (Lazarus, mon programme et ma DLL) est en 32bits. Merci, ZiP |
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() Inscription : septembre 2009 Messages : 980 ![]() |
Code :
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ] Ma messagerie n'est pas la succursale du forum... merci! |
||
|
|
20
|
|
|
#10 |
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 807 ![]() |
Bonjour Dr.Who,
Merci pour votre travail à cette heure si tardive ! ZiP |
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() ![]() |
Ouais, mais peu importe l'heure ou le jour, le Dr Who dispose du Tardis !
![]() Plus sérieusement, pour la contribution !
__________________
Philippe. |
|
|
00
|
|
|
#12 | ||||
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 807 ![]() |
Bonjour,
Savez-vous comment transcrire ça : Code c :
J'ai essayé ça : Code :
En effet, ça ne semble pas être des fonctions mais des constantes... Une idée ? Merci, ZiP |
||||
|
|
00
|
|
|
#13 |
![]() ![]() Yves LemaireBiologiste ; Progr(amateur) Inscription : mars 2005 Messages : 1 684 ![]() |
Tu as une piste dans ce post ; tout le thread est intéressant
__________________
Delphi 5 Pro et Code Typhon 2.80 sous Win 7 64 bits - Code Typhon 2.70 / Ubuntu 12.04 64 bits |
|
|
00
|
|
|
#14 |
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 807 ![]() |
Bonsoir,
Merci, je vais lire le thread complet. ZiP |
|
|
00
|
|
|
#15 | |||
|
Expert Confirmé
![]() ![]() |
Bonjour,
Citation:
![]() Il faut donc écrire : Code :
__________________
Philippe. |
|||
|
|
10
|
|
|
#16 |
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 807 ![]() |
Bonsoir Ph. B.,
Ça marche à merveille ! Merci ! Cordialement, ZiP |
|
|
00
|
|
|
#17 |
![]() ![]() Yves LemaireBiologiste ; Progr(amateur) Inscription : mars 2005 Messages : 1 684 ![]() |
L'importation directe des variables exportées de dll dans Delphi n'était pas prévue jusqu'en Delphi 6 au moins, d'où l'astuce de gb_68.
Heureusement, Lazarus semble l'intégrer, et j'espère que Delphi a évolué depuis aussi...
__________________
Delphi 5 Pro et Code Typhon 2.80 sous Win 7 64 bits - Code Typhon 2.70 / Ubuntu 12.04 64 bits |
|
|
00
|
|
|
#18 | |
|
Expert Confirmé
![]() ![]() |
Citation:
Il faut passer par l'astuce donnée par gb_68 : Comment utiliser une variable globale de dll ? (dynamique) Comment utiliser une variable globale de dll ? (statique, fin de message)
__________________
Philippe. |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com