우리는 C++ Builder를 사용하여 양식이 데이터베이스의 EXE 외부에 유지됩니다. 응용 프로그램 코드는 C++C++ Builder에서 RegisterClass 자동화 VCL
이렇게하면 다시 컴파일하지 않고 양식과 양식/동작을 수정할 수 있습니다. 다음은 폼을로드하는 작업을 완료하는 코드 스 니펫입니다.
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();
참조 된 모든 클래스를 등록하기 위해 호출 할 수있는 내장 함수가 있는지 궁금합니다. 모든 객체에 대한 메모리 스트림이나 파일을 직접 스캔하여 각각에 대해 RegisterClass를 호출 할 수는 있지만 누군가 이미이 작업을 수행했음을 알았 으면합니다.
이와 같이 모든 형식이 이러한 클래스를 모두 사용하는 것은 아니므로 실제 상속 된 클래스 만 등록하는 것이 좋습니다.
버전 관리는 문제가되지 않습니다. Google의 자란 시스템은 DFM이 저장된 데이터베이스에서 버전 관리를 처리합니다. 답장을 보내 주셔서 감사합니다. 이벤트 핸들러는 중요하지 않습니다. DFM을 데이터와 이벤트에 연결하기 위해 ORM (object relational mapper)을 작성했습니다. 이벤트는 Perl로 작성됩니다. 우리는 우리의 앱에 Perl 인터프리터를 내장했다. 성능이 중요한 분야에서 필요할 때마다 항상 C/C++로 전환 할 수 있습니다. 우리는이 시스템을 우리가 구축 한 시스템 밖에서 많은 커스텀 소프트웨어를 위해이 "프레임 워크"를 사용합니다. – Eric