Delphi et language C

yaya_yoyo Messages postés 2 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 6 juillet 2007 - 5 juil. 2007 à 15:51
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 9 juil. 2007 à 11:00
Bonjour tous,

Je cherche un programme delphi qui me permet de recuperer le temps windows à la milisec pret.

pour vous donner une idee compelete sur mon probleme, j ai un programme delphi qui gere un port serie ,Mon objetif et de dater tout mes evenement qui  transitent par ce port. de plus je doit synchroniser toute la communication par rapport a une heure excate.

J ai installé sur mon PC une carte PCI qui me permet de mettre a jour l heure windows (par rapport au GPS).
tout les registre de cette carte ne sont accessible que en C.

on peut avoir des échanges d imformation en temps reel entre les deux language   ???

4 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
5 juil. 2007 à 16:49
Salut,

Une DLL écrite en C peut très bien s'utiliser sous Delphi

Donc si il t'on fournis des DLL pour acceder au registres de la carte tu peux aussi t'en servir directement avec Delphi

Autre possibilité ... les exemples fournis sont en C mais ça ne veut pas dire autant qu'ils ne soient pas "transposables" en Delphi

 
@+
Cirec

0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
6 juil. 2007 à 00:06
le temps windows = horloge du bios.

recuperer le temps avec precision (h, m, s, ms) :

var vH, vM, vS, vZ : word;
begin
   SysUtils.DecodeTime(now, vH, vM, vS, vZ);
   ...
end;
0
yaya_yoyo Messages postés 2 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 6 juillet 2007
6 juil. 2007 à 13:49
Bonjour tous,

Merci à f0xi et cirec pour vos réponses .

à vrai dire  je ne sais pas comment comment m'enservir d'un dll faite sous C avec delphi,  je serai tres sympa si ca marche CIREC. tu me dire comment faire stp ???

Consernant la recupereation du temps avec    SysUtils.DecodeTime(now, vH, vM, vS, vZ); je suis entrein de tester cette fonction mais : j ai besoin de plus d un timer tres precis afin que mes action sur le port com soient maitriser  c a d :

t0= 1 s                      envoie tram1
t1= t0+ delta           envoie tram2
.
.
.

sachant que delta et variable     15ms < delta < 2 s

J ai pensé à utiliser un timer pr avoir un delta tres precis mais mes timers ne le sont pas .

Comment je peux faire pr resoudre ce probleme.

Merci d avance.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
9 juil. 2007 à 11:00
Salut,

1) L'utilisation des dll en C sous Delphi... Bin c'est un grand classique quoi. Faut traduire les protoypes qui t'intéresse (Traduire les types : int -> integer, float -> Single..) Tu met le mot clé ;external 'NomDll.dll'; à la fin du proto et voilou (cf aide de Delphi pour le mot clé external).

Par contre faut faire gaffe à la convention d'appel. Globalement, la convention défini comment l'appelant passe les arguments à l'appelé, et comment l'appelée renvoie le résultat d'une fonction.

En C, par défaut, les routines sont en cdecl, mais les programmeur C les passent généralement en stdcall. (Idem, tout est détaillé dans l'aide de Delphi !) Le stdall est en effet préférable pour des raisons de performance et de portabilité avec le VB6 nottament.

2) Un timer précis. Les timers c'est vraiment pas précis, et GetTickCount/timeGetTime le sont un peu plus mais pas des masses (Plusieurs millisecpondes d'erreurs).

On peut utiliser QueryPerformanceCounter quand on a besoin d'une précision en dessous de la milliseconde.
http://msdn2.microsoft.com/en-us/library/ms644904.aspx
0