LabView: كيفية تمرير المعلمات إلى طريقة .NET باستخدام "استدعاء طريقة" VI؟

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

  •  27-09-2019
  •  | 
  •  

سؤال

لدي مكتبة فئة .NET كتبت في C ++. تحدد "Public Ref Class MyClass" طريقة "MyMethod" التي تأخذ نظامين :: int32.

هذا هو MyClass أولاً ثم سؤالي:

namespace MyNetAssembly {    
    public ref class MyClassThatDoesStuff
    {
    public:
        MyClassThatDoesStuff();

        void MyMethod(System::Int32^ number1, System::Int32^ number2);
        property System::Int32 MyProperty{
            int get (){
                return *_result;
            }

            void set(System::Int32 value){
            }
        }
    private:
        int^ _result;
    };
}

هنا رمز CPP:

MyNetAssembly::MyClassThatDoesStuff::MyClassThatDoesStuff()
{
    *_result = 0;
}

void MyNetAssembly::MyClassThatDoesStuff::MyMethod(System::Int32^ number1, System::Int32^ number2)
{
    *_result =(*number1 + *number2) * 100;
}

عندما أقوم بتحميل هذا التجميع من LabView 8.5 باستخدام "عقدة مُنشئ" VI. بعد ذلك ، أحاول استدعاء mymethod () باستخدام "طريقة استدعاء" VI ، أحصل على المعلمات إلى الطريقة التي يجب أن تكون بها "ValuTeType" وليس "int32" كما أتوقع استخدامها مباشرة مع ثوابت Labview وعناصر التحكم. بدلاً من ذلك ، عندما أقوم بإنشاء ثابت بالنقر بزر الماوس الأيمن على الموصل للمعلمة ، أحصل على ".NET Object"!

من فضلك ، كيف يمكنني الحصول على لابفيو للتعرف على أنواع المعلمات؟

ملحوظة: حاولت تغيير المعلمات من System::Int32^ number1 ل System::Int32 number1. لم يساعد ذلك أيضًا.

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

المحلول

أعتقد أنني اكتشفت ذلك! على ما يبدو ، هناك شيء مضحك يحدث في ملف VI نفسه. إذا كان هناك .NET عقدة مُنشئ مع تعريف التجميع ، لا يكون لإعادة بناء التجميع في Visual Studio وتحديث عقدة المنشئ تأثير على توقيعات الطريقة المستوردة. لذلك، MyMethod(System::Int32 number1, System::Int32 number2, System::String^ str) كان لا يمكن رؤيته.

لذا ، ما نجح بالنسبة لي هو ما يلي:

  1. لقد قمت بحذف * Node Constructor * و * استدعاء العقدة * من السادس ، ثم حفظها.
  2. لتمرير قيم عدد صحيح إلى MyMethode هنا هو تعريف الطريقة الذي عمل بالنسبة لي:
    MyMethod(System::Int32 number1, System::Int32 number2, System::String^ str)
    
    أعتقد أن مصطلح "ValueType" الذي رأيته في LabView يعني أنه يتطلب نوعًا من القيمة لـ INT32.

قد يكون الأمر مربكًا عندما يكون لديك LabView تحت الانطباع بأنه قد قام بتحديث نفسه تمامًا عند إعادة بناء مجموعة .NET الخاصة بك.

شكرا لكل من ساعد. آمل أن تكون إجابتي مفيدة لأي شخص آخر يعمل مع .NET و LabView.

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