Nous utilisons C++ Builder pour une application dont les formulaires sont conservés à l'extérieur du fichier EXE dans une base de données. Le code de l'application est C++Automatisation de RegisterClass dans C++ Builder VCL
Cela nous permet de modifier les formulaires et les formulaires/actions sans recompiler. Voici un extrait de code qui permet de charger un formulaire.
RegisterClass(__classid(TButton));
RegisterClass(__classid(TEdit));
RegisterClass(__classid(TRadioGroup));
RegisterClass(__classid(TGroupBox));
RegisterClass(__classid(TCheckBox));
RegisterClass(__classid(TRadioButton));
RegisterClass(__classid(TTimer));
RegisterClass(__classid(TListBox));
RegisterClass(__classid(TComboBox));
RegisterClass(__classid(TBitBtn));
RegisterClass(__classid(TSpeedButton));
RegisterClass(__classid(TMaskEdit));
RegisterClass(__classid(TProgressBar));
ms = new TMemoryStream;
ms2 = new TMemoryStream;
// Loading Module into Memory Stream
ms->Position = 0;
ms->LoadFromFile(Filename->Text);
ms->Position = 0;
pModule = new TForm(this);
// Reading Module Definition
if(!Inputisbin->Checked)
{
ms2->Position = 0;
ObjectTextToBinary(ms, ms2);
ms2->Position = 0;
ms2->ReadComponent(pModule);
}
else
ms->ReadComponent(pModule);
Log->Lines->Add("Displaying Module");
pModule->Show();
Je suis curieux de savoir s'il y a des fonctions intégrées que je peux appeler pour enregistrer toutes les classes référencées. Je suppose qu'il est possible de scanner moi-même le flux mémoire ou le fichier de tous les objets et d'appeler RegisterClass pour chacun d'eux, mais j'espérais que quelqu'un connaissait la fonction qui l'avait déjà fait. En tant que tel, tous les formulaires n'utilisent pas toutes ces classes, donc il serait bien d'enregistrer seulement ceux qui sont réellement hérités.
la gestion des versions n'est pas un problème: notre système développé en interne gère les versions dans la base de données où le DFM est stocké. Merci pour la réponse. Les gestionnaires d'événements ne sont pas importants - j'ai fini par écrire mon propre ORM (Object Relational Mapper) pour connecter le DFM aux données et aux événements. Les événements sont écrits en Perl; nous avons intégré l'interpréteur Perl dans notre application. entre autres et nous pouvons toujours revenir à C/C++ comme nécessaire pour les domaines critiques de performance. Nous utilisons ce "travail de cadre" pour beaucoup de logiciels personnalisés en dehors du système pour lequel nous l'avons construit et qui nous a bien servis. – Eric