كيفية إضافة واجهة برمجة تطبيقات بسيطة إلى تطبيق C++ الخاص بي للوصول إليها عن طريق LabView؟

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

  •  08-07-2019
  •  | 
  •  

سؤال

لدي برنامج للحصول على البيانات مكتوب بلغة C++ (Visual Studio 6.0).يرغب بعض العملاء في التحكم في البرنامج من خلال برنامجهم المخصص أو LabView.أرغب في التوصل إلى واجهة برمجة تطبيقات بسيطة مع ملف dll يمكنني توزيعه عليهم وأرغب في الحصول على بعض النصائح حول كيفية البدء.سيكون هذا أمرًا أساسيًا جدًا، ربما 4 أو 5 أوامر.سيظل برنامج DAQ الخاص بي يعمل في نافذته الخاصة على نفس الجهاز، وأود فقط إعداده ليتم التحكم فيه من برنامج آخر.

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

المحلول

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

وبمجرد أن تقرر ذلك، ثم تنفيذ المستمع في تنفيذ الخاص بك لانتظار الرسائل IPC واردة من أي برنامج يستخدم DLL الخاص بك.

وبقدر ما يتعلق الأمر API، يمكنك يبقيه بسيط مثلك كانت الرغبة. لديك DLL تعرض الخاص بك 4 أو 5 وظائف (تأكد من استخدام فقط أنواع البيانات الأم، مثل شار * وطويلة، لتجنب المشاكل حدة الحدود)، ثم تلك سوف تستخدم آلية IPC الخاص بك للاتصال مع التطبيق تنفيذ الخاص بك.

نصائح أخرى

الأشياء التي تبدأ بهذه البساطة عادة ما تنمو بمرور الوقت، لذا قد يكون من الأفضل لك القيام بمزيد من العمل مقدمًا واستخدام الأسلوب الذي سينمو معك.

إن تنفيذ واجهة COM لبرنامجك من شأنه أن يمنح العملاء الكثير من الحرية في كيفية التعامل معها، ولا داعي للقلق بشأن آليات IPC، وما إلى ذلك نظرًا لأن COM مصمم لإخفاء كل ذلك عنك.

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

تحديث:هناك الكثير من الطرق لتنفيذ COM.يمكنك بنائه من المبادئ الأولى باستخدام دليل كتاب COM الجيد، أو استخدام إطار عمل مثل ATL لحفظ بعض من لوحة الغلاية.هناك الكثير من العينات الجيدة، على سبيل المثال انظر MSDN.

والميزة الكبرى لCOM هو أنك لا تحتاج إلى DLL! طلبك سوف دائما تكون قيد التشغيل، ويقول لك. وهذا يعني أنه يمكن أن تكون بمثابة الخالق كائن COM ( "الملقم المحلي").

إذا شخص ما يريد "stdcall" DLL بدلا من ذلك، هل يمكن أن نعطيهم DLL التي داخليا فقط إلى الأمام جميع المكالمات إلى واجهة COM. أن الكتابة أن تكون تافهة جدا. لديك فقط 5 وظائف، ويقول لك. توحي بأن لديك واجهة COM واحدة، مع تلك الأساليب 5. عند تحميل المجمع DLL، فإنه يطلب EXE لإنشاء كائن COM لها. وDLL بدوره يعرض 5 طرق STDCALL، كل منها تدعو أسلوب واحد على كائن COM.

أنت <م> قد استخدام دلل. كنت تنظر فيه. ولكن أود أن تنظر أيضا في تأجيج واجهة برمجة تطبيقات بسيطة على أساس المتشعب، ويفضل أن يكون مريحة.

والمزايا: من السهل أن الميناء. يمكن كتابة التطبيق العميل من أي لغة بشكل مسلي. يمكن أن تعمل عبر الشبكة. اختبار يصبح من الأسهل (استخدام لغة البرمجة النصية أو المتصفح).

والعيوب: الأداء سيكون أبطأ. بشكل ملحوظ أكثر صحية لإعداده في C ++. أنا لست متأكدا مما اذا كان ابفيف يمكن إجراء مكالمات HTTP.

وشيء من هذا القبيل:

<اقتباس فقرة>   

HTTP: // الثلاثون / البيانات [GET، ربما وظيفة للاختبار]

     

HTTP: // الثلاثون / بيانات / بدء [وظيفة]

     

HTTP: // الثلاثون / البيانات / وقف [وظيفة]

     

HTTP: // الثلاثون / البيانات / المعلمات [وظيفة]

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

وابفيف يدعم إجراء مكالمات DLL، ولكن هذا هو واحد من النقاط الضعيفة في التنمية ابفيف. القيام به بشكل غير صحيح، وهذا يمكن أن يؤدي إلى تطبيق التي هي أكثر عرضة للحوادث. كمطور ابفيف، وأود اقتراح MattyT في خلق خدمة HTTP. كل لغة على كل منصة التي يمكن أن تجعل منفذ TCP / IP يمكن الوصول إليه في ذلك الوقت. أعتقد أنك يمكن أن تستخدم بها بروتوكول TCP / IP المخصص الخاص بك بدلا من HTTP تتحمل كامل، ولكن في كلتا الحالتين يتم حل قضية التوافق.

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

وهناك سؤال يتعلق هنا . أنا لا أريد أن ينتهي مع ما هو ابفيف محددة، ويبدو أن <لأ href = "http://zone.ni.com/reference/en-XX/help/371361B-01/lvexcodeconcepts/shared_libraries_dlls / "يختلط =" نوفولو noreferrer "> ابفيف يمكن الوصول دلس إذا كانت تستخدم STDCALL . ومن شأن دلل مثل هذا يكون للاستدعاء من VB أو غيرها من البرامج ويندوز وكذلك وهذا ما أنا لاطلاق النار.

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

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