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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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