C# & Delphi - Exportar dll do C# e consumi-la em delphi


Se você esta precisando gerar uma dll em C# e consumi-la em Delphi, aqui vai uma dica de ouro:

Crie um projeto do tipo Class Library (.NET Framework) no Visual Studio aqui eu utilizei a versão .NET Framework 4.5 (mas funciona nas demais).

Agora instale a biblioteca que vai permitir exportar o método (via NuGet):

Install-Package UnmanagedExports -Version 1.2.7

Agora vamos ao que interessa, criar nossa classe que irá somar A + B e vai devolver o resultado:

using RGiesecke.DllExport;

...

[Guid("92B0396D-0B66-4A00-A9C6-BEC8C3080A05")]
[ComVisible(true)]
public class Calculadora
{
	[DllExport]
	public static int Somar(int A, int B)
	{
		return A + B;
	}
}

Para que possamos acessar esse método, precisamos criar um GUID para a classe (Menu Tools -> Create GUID)
Em seguida precisamos dizer que ela é visível para o COM [ComVisible(true)]
Agora criamos nosso método, observe que colocamos a anotação (DllExport) que vai permitir o acesso à esse método de fora.
Detalhe: O método precisa ser estático.

Feito isso, vamos compilar para que o visual studio gere a biblioteca .dll.
Importante: Se o aplicativo no delphi for compilado em x86 você precisa compilar a dll em x86 também, caso contrário vai dar erro.


Agora vamos para o delphi e vamos criar uma aplicação VCL para chamarmos nossa dll:

Adicione um botão no formulário e vamos ao código: nesse exemplo vou fazer a chamada dinâmica da dll mas funciona normalmente com chamada estática.

procedure TForm1.Button2Click(Sender: TObject);
type
  TSoma = function(A: Integer; B: Integer): Integer; stdcall;

var
  xHandle: THandle;
  xSoma: TSoma;
  Soma: Integer;
begin
  xHandle := LoadLibrary('Calculadora.dll');
  if xHandle > 0 then begin
    try
      @xSoma := GetProcAddress(xHandle, 'Somar'); //nome do seu método no C#

      if @xSoma <> nil then begin

        Soma := xSoma(10, 25); //chama o método

        ShowMessage(Soma.ToString());
      end;
    finally
      FreeLibrary(xHandle);
    end;
  end;
end;

Pronto, agora você construir suas bibliotecas em C# e usa-las no Delphi.

Notas:
  - Você vai precisar do .NET Framework instalado na maquina de quem for usar
  - Se for trabalhar com entrada e/ou saída de valores do tipo string, lembre-se de que no delphi essa variável é do tipo PAnsiChar.

c · ‎delphi · ‎dll · ‎export · ‎dllexport

Última atualização: 07/02/2018 às 05:53


  • Buscar