LabView: Como passar nos parâmetros para o método .NET usando o "Método Invoke" VI?

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

  •  27-09-2019
  •  | 
  •  

Pergunta

Eu tenho uma biblioteca de classe .NET que escrevi no C ++. "Public Ref Class MyClass" define um método "MyMethod" que leva dois parâmetros do sistema :: INT32.

Aqui está o MyClass primeiro, depois minha pergunta:

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;
    };
}

Aqui está o código do CPP:

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

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

Quando carrego este conjunto do LabView 8.5 usando o "nó construtor" vi. Em seguida, tento invocar mymethod () usando um "método de invocar" vi, recebo os parâmetros para o método de "valutetype" e não "int32", pois espero usar diretamente com constantes e controles Labview. Em vez disso, quando crio uma constante clicando com o botão direito do mouse no conector do parâmetro, eu recebo ".NET Object"!

Por favor, como posso obter o LabVIEW para reconhecer os tipos de parâmetros?

Observação: Eu tentei mudar de parâmetros de System::Int32^ number1 para System::Int32 number1. Isso também não ajudou.

Foi útil?

Solução

Eu acho que descobri! Aparentemente, há algo engraçado no próprio arquivo VI. Se houver um .NET Nó construtor Com uma montagem definida, a reconstrução da montagem no Visual Studio e a atualização do nó do construtor não afeta as assinaturas de métodos importados. Portanto, MyMethod(System::Int32 number1, System::Int32 number2, System::String^ str) não era para ser visto.

Então, o que funcionou para mim é o seguinte:

  1. Eu excluí o nó do construtor * e * Invoque o nó * do VI, depois salvei.
  2. Passar valores inteiros para MyMethode Aqui está a definição de método que funcionou para mim:
    MyMethod(System::Int32 number1, System::Int32 number2, System::String^ str)
    
    Eu acho que o termo "valuetype" que vi no labview significa que ele requer um tipo de valor para o INT32.

Pode ser confuso quando o LabVIEW você tem a impressão de que ele se atualizou completamente quando você reconstruiu sua montagem .NET.

Obrigado a todos que ajudaram. Espero que minha resposta seja útil para qualquer outra pessoa que esteja trabalhando com .NET e LABVIEW.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top