Delphi et language C

Signaler
Messages postés
2
Date d'inscription
mercredi 20 juin 2007
Statut
Membre
Dernière intervention
6 juillet 2007
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
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

Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
38
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

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
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;
Messages postés
2
Date d'inscription
mercredi 20 juin 2007
Statut
Membre
Dernière intervention
6 juillet 2007

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.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
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