Comme j'ai beaucoup de temps à perdre ces temps-ci (mes étudiants sont en grève), je m'amuse à transposer des composant de Builder à Delphi. Quand on y pense, si on veut devenir riche et/ou célèbre , aussi bien développer ses composant en Delphi, qui vont ensuite fonctionner sous les deux plate-formes, l'inverse n'étant pas vrai.

Le plus simple de mes composants est sans aucun doute MMTimer, qui n'est rien d'autre que de l'encapsulation de deux fonctions de l'API multi-média windows (timerSetEvent, timerKillEvent).

Je réécris donc mon module MMTimer en Delphi que j'intègre dans mon package de composants.

Je teste donc mon MMTimer dans une application Builder C++, mon petit programme test fonctionne toujours, même si le test est brutal avec un intervalle d'appel de 1 milliseconde:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
void __fastcall TForm1::MMTimer1Timer(TObject *Sender)
{
   static int cnt ;
 
   cnt++ ;
   Edit1->Text = cnt ;
}
Je dis brutal, parce que le TEdit est accéder au milliseconde et je me doute que ça pourrait prendre à Windows plus de 1 ms pour rafraichir TEdit. Donc, des problèmes de réentrance à l'horizon. Mais non, ça fonctionne très bien.

Je teste ensuite le tout en Delphi et là, ça plante sérieusement au bout de quelques secondes. Le message d'erreur n'est pas explicite ("PROJET1.EXE a cessé de fonctionner). Surement un problème de débordement de pile dû à la réentrance, que je me dis.

En résumé, un comportement distinct avec un composant (écrit en delphi) dépendant s'il est utilisé en Delphi ou Builder C++.

Si des développeurs mixtes (C++/Delphi) pouvaient me donner du feedback, ça serait apprécié...