LabView: Como passar nos parâmetros para o método .NET usando o "Método Invoke" VI?
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.
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:
- Eu excluí o nó do construtor * e * Invoque o nó * do VI, depois salvei.
- Passar valores inteiros para
MyMethode
Aqui está a definição de método que funcionou para mim:
Eu acho que o termo "valuetype" que vi no labview significa que ele requer um tipo de valor para o INT32.MyMethod(System::Int32 number1, System::Int32 number2, System::String^ str)
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.