Utilizando uma dll C# com Node.js

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

view raw

Soma.cs

hosted with ❤ by GitHub

E o resultado final é esse:

soma

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

view raw

soma.js

hosted with ❤ by GitHub

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:

somanode

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 😀

Advertisement

4 thoughts on “Utilizando uma dll C# com Node.js

  1. Vitor Ribeiro 28/01/2019 / 20:36

    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.

    Gostar

  2. Wellder Vieira de Jesus 29/08/2019 / 17:35

    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?

    Gostar

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s