كيف يمكنني إجراء تطبيق وحدة تحكم مخفية يمكن التخلص منها والتواصل معها؟

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

سؤال

لقد كتبت تطبيق وحدة صغيرة لالتفاف DLL لجهة خارجية له مشاكل. أنا أدعوها من تطبيق واجهة المستخدم الرسومية باستخدام _POPEN., ، فقط أريد قراءة قيمة من الإخراج القياسي لبرنامج وحدة التحكم. عند القيام بذلك، يتم عرض نافذة وحدة التحكم غير المرغوب فيها لفترة وجيزة.

أنا أدرك أن هذا يمكن تجنبه باستخدام تكوين معين بدء التشغيل مع CreateProcess. ومع ذلك، أفضل أن أضع الإصلاح في تطبيق وحدة التحكم وما زلت تستخدم _POPEN. إنشاء عملية الطفل باستخدام النظام الفرعي Windows (أي WinMain بدلا من Main) لا يجعل نافذة وحدة التحكم يذهب بعيدا. على ما يبدو، يتم تخصيص وحدة التحكم بواسطة نظام التشغيل لتسهيل الاتصال _POPEN.

لاحظ أن DLL من الطرف الثالث غير مستقر، ولكنه ضروري للواجهة مع أجهزة الملكية. لذلك، أي نهج يتم تحميل DLL في مساحة ذاكرة تطبيقات GUI غير مقبولة.

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

المحلول

1) أنا أؤيد فكرة إطلاقها مع مجموعة startupinfo لإخفاء النافذة. هذا هو SOP على Windows، لذلك سيعمل بشكل أفضل من محاولة فرض UNIX SOP. علاوة على ذلك، قد ترغب في رؤية الإخراج عند اختباره بمعزل.

2) أو يمكنك إنشاء تطبيق واجهة المستخدم الرسومية التي لا تظهر نافذة. يصل إلى تطبيق وحدة التحكم بدون وحدة تحكم.

تعديل

ال حلقة الوصل نشرت INDERA نشر كيفية القيام الخيار الثاني.

تعديل

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

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

ومع ذلك، فإن ما لا يمكنك القيام به هو الوصول إلى Stdin / Stdout / Stderr دون وحدة تحكم. يمكنك إطلاق وحدة تحكم مخفية، ولكن يجب أن يكون لديك بالفعل واحدة.

تعديل

هل تسمح لوا بتشغيل الملف القابل للتنفيذ مباشرة، بدلا من من خلال cmd.exe؟

نصائح أخرى

للتواصل بين تطبيق واجهة المستخدم الرسومية الأصل وترجع تطبيق وحدة تحكم الطفل المخفية مقالات MSDN التالية:

لا أعتقد أنه يمكنك استخدام Stdin / Stdout دون بدء تشغيل وحدة التحكم. ما يمكنك القيام به، هو كتابة التطبيق Wrapper ك تطبيق GUI الذي لا يظهر أي نافذة (مفتاح التبديل فقط () إلى WinMain ()) ثم استخدم نوعا من آلية IPC مثل المقبس أو الذاكرة المشتركة.

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