ما هي أفضل الممارسات لتحويل EXE قياسي VB6 إلى EXE ActiveX؟

StackOverflow https://stackoverflow.com/questions/584987

  •  06-09-2019
  •  | 
  •  

سؤال

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

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

'main.frm - button click call
'On the button click, create a new object
Set obj = CreateObject("MyApp.clsThread")
Call obj.NewThread

'clsThread
' Create a new form and load it to run on a new thread
Public Sub NewThread()
    Dim frm As Object
    Set frm = New frmDogbert
    Load frmDogbert
    frm.show
    Set frm = Nothing
End Sub

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

التحديثات:

بدلا من اختراق تطبيقي بقوة في تطبيق Multithreading Pseudo، فقد أخذت النصيحة من الأشخاص الطيبين هنا واستدمج المكون إلى EXE القياسي وإعادة عرض تطبيقي إلى EXE قياسي واستدعاءها عبر Shell. يعمل بشكل جميل :)

شكرا

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

المحلول

Visual Basic 6 ليس متعدد الخيوط في نفسه. الفرق في سلوك المهام متعدد بين Exe ActiveX و DLL ActiveX واضح فقط عند الإشارة إليه من EXE VB6 آخر. الكائنات مثيل لها من فئة عالمية متعددة الاستخدامات المعرفة في exe extex تشغيل في سياقها الخاص. يتم إنشاء مثيل للفنسبة من DLL ActiveX في سياق إكس مكالمة.

يمكن اختراق العديد من الخيوط المتعددة الآن في VB6 ولكنه مؤش للغاية ولديه الكثير من لا (على سبيل المثال، لا يمكنك استخدام زر الإيقاف في IDE لإيقاف جلسة تصحيح الأخطاء أو يقوم البرنامج بتعطل).

ما هو exe ActiveX جيد هو تخفيف حالة منفصلة ولكن ذات صلة يمكن تشغيلها بشكل منفصل دون إيقاف البرنامج الرئيسي. بناء على الوصف الموجز الخاص بك أود أن أقول أفضل ما لديك هو أن تبقي exe الخاص بك كما هو ولكن أكثر النماذج / الوحدات النمطية / الفئات إلى EXE منفصلة ولها مرجع EXE الأصلي ActiveX EXE.

لاحظ أنه لا تضطر إلى تجميع لأسفل إلى .exe، يمكنك تغيير الملحق إلى .dll وما زال ActiveX EXE. يمكنك القيام بذلك حتى لا يقوم المستخدم بتشغيل EXE ActiveX بشكل غير مباشر بحد ذاته.

نصائح أخرى

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


يقول MELAOS: حسنا المحرر الرئيسي FRM هو الشيء الرئيسي هنا وأحتاج إلى السماح للمستخدم بتشغيل نماذج إضافية للقيام ببعض الأشياء الأخرى مثل تحميل الأشياء إلى الخادم وتحويل ملفات الفيديو إلى تنسيقات أخرى. وهذه النماذج تستخدم شل لدعوة exes الأخرى. وتأخذ وقت التشغيل لفترة طويلة.


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

لا تفعل ذلك. Multithreading معقدة بشكل لا يصدق للقيام بشكل صحيح، حتى عند استخدام الأدوات التي تهدف إليها.

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