LabView: Как передать параметры в метод .NET с помощью «метода вызова» vi? - PullRequest
0 голосов
/ 28 октября 2010

У меня есть библиотека классов .NET, которую я написал на C ++.«public ref class MyClass» определяет метод «MyMethod», который принимает два параметра System :: 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 () с помощью «Invoke Method» vi, я получаю параметры для метода, имеющие «ValuteType», а не «Int32», как я ожидаю использовать напрямую с константами и элементами управления LabView.Скорее, когда я создаю константу, щелкая правой кнопкой мыши на соединителе для параметра, я получаю «.NET Object»!

Пожалуйста, как я могу заставить LabView распознавать типы параметров?

Примечание: Я пытался изменить параметры с System::Int32^ number1 на System::Int32 number1.Это тоже не помогло.

1 Ответ

0 голосов
/ 02 ноября 2010

Кажется, я понял это!Очевидно, что внутри самого файла vi происходит нечто забавное.Если существует узел конструктора .NET с определенной сборкой, то перестройка сборки в Visual Studio и обновление узла конструктора не влияет на импортированные сигнатуры методов.Поэтому MyMethod(System::Int32 number1, System::Int32 number2, System::String^ str) не было видно.

Итак, для меня сработало следующее:

  1. Я удалил * Узел конструктора * и * Вызвать Узел * из vi, затем сохранил.
  2. Для передачицелочисленные значения для MyMethode вот определение метода, которое сработало для меня:
    MyMethod(System::Int32 number1, System::Int32 number2, System::String^ str)
    
    Я думаю, что термин «ValueType», который я видел в LabView, означает, что для Int32 требуется тип значения.

ЭтоЭто может сбить с толку, если у LabView сложилось впечатление, что он полностью обновился при перестройке сборки .NET.

Спасибо всем, кто помог.Я надеюсь, что мой ответ будет полезен всем, кто работает с .NET и LabView.

...