سؤال

ونحن نستخدم ++ C باني لتطبيق الذي يتم الاحتفاظ الخارجية إلى EXE في قاعدة بيانات النماذج. رمز التطبيق هو C ++

وهذا يسمح لنا لتعديل النماذج وشكل / الإجراءات دون إعادة ترجمة. وفيما يلي مقتطف من التعليمات البرمجية التي يحصل على هذه المهمة من تحميل نموذج.

 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 لكل لكن آمل شخص يعرف وظيفة هذا بالفعل فعل ذلك.

وأما استخدام مثل هذه، ليست كل أشكال كل هذه الفئات إما لذلك سيكون من الرائع أن تسجل فقط تلك التي ورثت فعلا.

هل كانت مفيدة؟

المحلول

وهذا النهج لديك هنا هو الصحيح تماما، في رأيي. أخذت قبل نفس النهج عاما باستخدام Delphi2، على الرغم من أنني كان لي لتنفيذ مصنع فئة الخاص وظائف ObjectToText / TextToObject كما ReadComponent () أبدا واردة في VCL.

في النقطة الثانية الخاصة بك تسجيل فقط الطبقات المطلوبة، ومن المؤكد أنها تحتاج فقط تسجيل مرة واحدة؟ والنفقات العامة من تحديد ما إذا كان يحتاج إلى الدرجة أن تكون مسجلة، سوف تفوق تكلفة تسجيل كل شيء. مرة أخرى، أود أن ترك الأمر كما هو عليه.

نصائح أخرى

وأنا لا أعرف من أي وظائف القائمة - على ما يبدو الى حد بعيد الشيء النادر أن عليك القيام به، بالنسبة لي. اقتراب تخزين DFMs النموذج في قاعدة بيانات (انهم تخزينها بشكل منفصل إلى الملفات CPP وH للوحدة؟) هو أيضا غريبا. وأنا أعلم أنك تقول "هذا يسمح لنا لتعديل النماذج وشكل / الإجراءات دون إعادة ترجمة" ولكن أنا شخصيا سوف تخزينها في DLL وإعادة ترجمة - على الأقل ثم، وفقا لنظام البناء الخاص بك، وأنها سوف تكون نسخة من وسيكون لديك وحدة المخزنة ك "وحدة". أعترف أنني لا أعرف متطلبات النظام الخاص بك، وربما لديك سبب وجيه لفعل ذلك طريقك.

ولكن نظرا نهجكم وأعتقد أن مسح تيار، وتبحث عن بنود الكائن وتسجيل تلك المكونات قبل استدعاء ReadComponent هو على الارجح أفضل نهج.

وتخزين سوق دبي المالي على حدة (من أجل تغيير مجرد أحداث ومعالجات العمل) ما زال يترك الملفات CPP وH تجميعها في تطبيق الرئيسي الخاص بك. من ذلك، لن يكون لديك بالفعل مكونات مسجلة وفي بنائها، لذلك هذا هو لزوم لها تماما؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top