التواصل بين العمليات بين 32- و 64 بت التطبيقات على ويندوز إلى x64

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

  •  21-08-2019
  •  | 
  •  

سؤال

ونود أن دعم بعض الأجهزة التي تمت مؤخرا وقفها. برنامج تشغيل الأجهزة هو عادي 32 بت C DLL. ليس لدينا شفرة المصدر، و (لأسباب قانونية) لا ترغب في إلغاء ترجمته أو عكس هندسة السائق.

والأجهزة يرسل طن من البيانات بسرعة، وبالتالي فإن بروتوكول الاتصالات يحتاج لتكون فعالة جدا.

وبرنامجنا هو من مواليد 64 بت C ++ التطبيق، ولكن نحن نرغب في الوصول إلى الأجهزة عن طريق عملية 32-بت. ما هو وسيلة فعالة وأنيقة لتطبيقات 32 بت و 64 بت إلى التواصل مع بعضهم البعض (أي، من الناحية المثالية، لا تنطوي على اختراع بروتوكول جديد)؟

وينبغي أن يكون الحل في C / C ++.

تحديث: سأل بعض المشاركين لتوضيح ما إذا كان هذا وضع المستخدم أو برنامج تشغيل وضع kernel. لحسن الحظ، انها السائق وضع المستخدم.

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

المحلول

واذا كان هذا هو الدافع الحقيقي (وضع kernel)، وكنت SOL. ويندوز فيستا x64 لا يسمح بتثبيت برامج التشغيل غير الموقعة. كان هذا هو مجرد DLL وضع المستخدم، يمكنك الحصول على إصلاح باستخدام أي من آليات IPC القياسية. والمواسير ومآخذ، خارج بروك COM، تقريبا في هذا النظام. كل ذلك يعمل على سرعة الحافلة بذلك طالما يمكنك العازلة بيانات كافية، يجب الزائد تبديل سياق لن يضر كثيرا.

نصائح أخرى

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

هذه المقالة قد تكون ذات فائدة. ويناقش المشكلة ثم يقترح استخدام COM كحل. أنا لست مروحة كبيرة من COM ولكن نظرا كل مكان في الكون ويندوز، فمن الممكن أنه قد يكون فعالة بما فيه الكفاية. وربما كنت تريد أن مهندس الحل بحيث يمكنك بيانات الدفعة (أنت لا تريد أن تفعل دعوة COM واحد لكل بند من بنود البيانات).

وأنيقة؟ C ++؟ يدعو DCOM / RPC لنفسك قد عمل، أو هل يمكن إنشاء إخراج مسمى واستخدام ذلك لاجراء محادثات بين العمليتين (ربما خلق "طبقة CMessage" أو شيء)، ومشاهدة الرغم من لمختلف محاذاة هيكل بين x86 و x64.

وإذا كان السائق لا تتحول إلى أن تكون سائق الحقيقي، nobugz هو الحق تقريبا - وأنت تسير لدينا لعمل الكثير من الجهد، وكنت لا تماما SOL. حل واحد هو لتثبيت Win32 وعلى بعض آلة أخرى (أو الجهاز الظاهري) ثم استخدام بعض شكل من أشكال RPC، مثل مآخذ (على النحو الذي اقترحه Pyrolistical) أو UDP أو MQ أو حتى تيبكو رانديفو (التي تدعي لدعم إنتاجية عالية للغاية من أجل للتعامل مع كميات البيانات التي تم إنشاؤها من قبل الأسواق المالية - على الأقل هذا ما أتذكر من مرة في الأيام الخوالي)

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

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