Fala Galera! Tudo certo?
Recentemente precisamos utilizar algumas funcionalidades escritas em C# (que foram escritas há alguns anos atrás, e não tínhamos mais o código fonte [os famosos sistemas legados, né…]). A solução menos trabalhosa foi a que vou mostrar aqui, bora?
Sem mais delongas, vou mostrar como fazer para utilizar a dll escrita em C# em nossa aplicação Node.js.
O pacote utilizado foi o edge-js, que faz exatamente o que a gente precisa: lê uma DLL, invoca o método, lê o retorno e nos devolve.
Isso na prática
Imagine que tenhamos uma Class Library em C# que sirva para fazermos operações matemáticas, dentre elas uma soma, parecido com isso aqui:
namespace Matematica | |
{ | |
public class OperacoesMatematicas | |
{ | |
public int Soma(int a, int b) | |
{ | |
return a + b; | |
} | |
} | |
} |
Essa Class Library vai gerar uma dll chamada Matematica.dll, que é o nome desse projeto.
Em um outro projeto do tipo Console Application, o código ficaria assim:
using Matematica; | |
using System; | |
namespace Soma | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
var soma = new OperacoesMatematicas().Soma(15, 10); | |
Console.WriteLine(soma); | |
Console.ReadKey(); | |
} | |
} | |
} |
E o resultado final é esse:
Até aí, tudo certo!
Agora, vamos lá pro nosso projeto em Node.js, a primeira etapa é instalar o pacote com o comando:
npm install --save edge-js
Com o pacote instalado a utilização fica assim:
let edge = require('edge-js'); | |
var soma = edge.func({ | |
source: function () {/* | |
async (dynamic input) => | |
{ | |
var soma = new Matematica.OperacoesMatematicas().Soma(input.a, input.b); | |
return soma; | |
} | |
*/}, | |
references: ["Matematica.dll"] | |
}); | |
soma({a: 10, b: 30}, function (error, result) { | |
if (error) throw error; | |
console.log(result); | |
}); |
Vamos para as considerações:
O parâmetro source serve para colocarmos código em C#, vejam que o código fica entre comentários.
Nossa função do C# recebe um parâmetro do tipo dynamic então podemos passar vários parâmetros para ela e acessar posteriormente os atributos dentro de “input”.
Vejam que o código C# é praticamente idêntico ao que fizemos no Console Application.
O parâmetro references serve para colocarmos as dll’s necessárias para o funcionamento do código que está dentro de source, lá colocamos o caminho completo para a dll, e está somente “Matematica.dll” pois a dll está na mesma pasta da aplicação em Node.js.
Depois que executamos o código que está na variável “soma”, temos um callback com um erro ou o resultado na nossa função em C#, que ficou assim:
O resultado veio do nosso método escrito em C#.
Belezura galera? Espero que seja útil!
Os códigos utilizados estão disponíveis no GitHub: https://github.com/vmussak/nodejs-csharp-dll
Por hoje é só isso, qualquer dúvida ou sugestão, estou à disposição! Até mais 😀
Olá, Vinicius! Tudo bem?
Acompanho você no Facebook e ao rodar meu feed veio uma publicação sua sobre Arduino Day 2019.
Sou aluno do Senac de Jaboticabal e desde a nossa visita a SMN venho acompanhando suas publicações.
Parabéns pela iniciativa e peço que sempre publique linha de códigos e explicação para o aprendizado de todos.
Parabéns novamente e um grande abraço.
GostarGostar
Fala Vitor! Obrigado pelo feedback! E espero você no Arduino Day! 😀
Abraços
GostarGostar
Boa tarde Vinicius
Parabéns pelo artigo.
Estou a fazer uma integração com NodeJS, uma Classe feita em C# que busca resultados em um dll feita em Delphi.
Explico: A dll feita em Delphi foi me passada por eu não tem as funções delphi em mãos, e junto com ela uma classe C# com funções que usam a dll, não estou conseguido fazer o NodeJS (Edge-js) ler essas funções. Poderia me ajudar?
GostarGostar
Olá! Obrigado pelo feedback 🙂
Me chama por e-mail: vinicius.mussak@outlook.com ou no Skype: mussak_engsolutions
Um abraço!
GostarLiked by 1 person