كيف يمكن تمرير سلسلة مرة أخرى إلى labview باستخدام عقدة وظيفة مكتبة الاتصال
سؤال
أرغب في استخدام عقدة وظيفة مكتبة الاتصال الخاصة بـ LabVIEW للوصول إلى وظيفة DLL، وجعل هذه الوظيفة ترجع سلسلة لعرضها على جهاز VI الخاص بي.كيف لي أن تذهب عن القيام بذلك؟أنا سعيد جدًا بإرجاع الأرقام من مكتبة الارتباط الحيوي (DLL) الخاصة بي، ولكني أجد صعوبة في العثور على أي أمثلة حول كيفية إرجاع سلسلة.
المحلول
وافترض من سؤالك أن لديك بالفعل DLL التي يمكن أن تعود أرقام لابفيف. لإرجاع سلسلة من DLL، لقد خلق DLL مع الدالة التالية C ++
void returnString(char myString[])
{
const char *aString = "test string";
memcpy(myString, aString, 12);
}
في ابفيف I ثم استخدام مكتبة استدعاء دالة عقدة وتكوينه على النحو التالي
Library Name or Path: c:\path\to\my\custom.dll Function Name: returnString Calling Convention: C Parameters: Parameter: return type type: void Parameter: arg1 type: String string format: C String Pointer Function prototype: void returnString(CStr arg1);
وبعد ربط مخرجات ARG1 في المخطط الصندوقي لمؤشر سلسلة والتشغيل. يجب أن تظهر السلسلة "سلسلة اختبار" في اللوحة الأمامية.
وحاولت الحصول على وظيفة returnString تكون من نوع كستر كما في
CStr returnString()
{ ...
}
ولكن حصلت أخطاء بناء عند ترجمة مشروع DLL.
تحديثوبفضل @ bk1e تعليق لا ننسى ما قبل تخصيص مساحة في ابفيف للسلسلة.
نصائح أخرى
هناك عدة طرق على الأقل لإرجاع سلسلة من عقدة وظيفة مكتبة الاتصال:
قم بإرجاع مؤشر سلسلة C من وظيفة DLL الخاصة بك، وقم بتكوين عقدة وظيفة مكتبة الاتصال للحصول على نوع إرجاع "مؤشر سلسلة C".لاحظ أن السلسلة التي تم إرجاعها يجب أن تكون صالحة بعد إرجاع الدالة، لذلك لا يمكن أن تكون مؤشرًا لسلسلة مخصصة على المكدس.يجب أن يكون واحدًا مما يلي:المخصصة على الكومة، المخصصة بشكل ثابت، سلسلة حرفية ثابتة، إلخ.
يبدو الأمر كذلك
examples/dll/regexpr/Regular Expression Solution/VIs/Get Error String.vi
في دليل LabVIEW يأخذ هذا النهج.قم بتخصيص سلسلة في VI الخاص بك، وقم بتمريرها إلى عقدة وظيفة مكتبة الاتصال باستخدام معلمة "C String Pointer" كما اقترح Azim، ثم قم باستبدال محتوياتها في ملف DLL.إحدى الطرق لتخصيص السلسلة هي استخدام تهيئة المصفوفة لإنشاء مصفوفة u8 بالحجم المطلوب، ثم استخدام Byte Array To String لتحويلها إلى سلسلة.
تأكد من أن السلسلة التي تقوم بتمريرها كبيرة بما يكفي لاستيعاب محتويات السلسلة، وتأكد من تمرير طول السلسلة إلى مكتبة الارتباط الحيوي (DLL) حتى تعرف حجم المخزن المؤقت.أعتقد أن المعلمة الافتراضية هي سلسلة فارغة.قد يتطلب معرفة طول السلسلة الصحيح الاتصال بمكتبة الارتباط الحيوي (DLL) مرتين، إذا لم يكن التخمين الأول لـ VI الخاص بك كبيرًا بدرجة كافية.
قم بتمرير السلسلة إلى عقدة وظيفة مكتبة الاتصال باستخدام معلمة "مقبض السلسلة"، واستخدم وظائف LabVIEW في مكتبة الارتباط الحيوي (DLL) لتغيير حجم السلسلة حسب الضرورة.يتطلب هذا أن يكون ملف DLL الخاص بك مصممًا خصيصًا للتفاعل مع LabVIEW ويتطلب الارتباط بمكتبة ثابتة يتم توفيرها مع LabVIEW.
مثال على هذه الطريقة يأتي مع LabVIEW as
examples/dll/hostname/hostname.vi
.