Neste tutorial vou esta demonstrando de forma prática como se criar DLL usando a plataforma de desenvolvimento Free Pascal chamada Lazarus em sua versão 0.9.28.2.
Sem mais delongas, vamos por as mãos na obra.
O primeiro passo, após abrir a IDE do lazarus, será fechar todos os arquivos que porventura estejam abertos, lembrando que o lazarus tem a característica de recuperar o último projeto alterado.
Já com os arquivos fechados, selecione no menu principal a opção File->New e na janela que se abre, localize a opção “Project” e “Library”, conforme demonstrado na imagem abaixo:
Na seqüência clique em “OK” para confirmar.
Agora salve o projeto em uma pasta de sua preferência com o nome de DLLLazarus ou como preferir, e em seguida selecione no menu principal a opção Projetct->View Source para que possamos visualizar os códigos do mesmo. Deverá ser apresentada uma estrutura conforme a imagem abaixo:
Agora adicione uma nova “Unit” utilizando a opção File->new unit do menu principal e salve esta com o nome de “funções.pas” ou outro nome conforme preferir.
Agora codifique esta unit com os seguintes códigos:
unit funcoes;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
function RetornaTotalCampos(var Mensagem:String;pValor1,pValor2:Double):Double;stdcall;
implementation
function RetornaTotalCampos(var Mensagem:String;pValor1,pValor2:Double):Double;stdcall;
begin
Mensagem:='';
// verifica se os valores são validos
if (pValor1 <= 0) or (pValor2<=0) then
Mensagem:='Os valores devem ser maior que zero!';
// resultado
Result := pValor1 + pValor2;
end;
end.
Agora vá aos códigos principais do projeto e vamos realizar algumas mudanças que são extremamente necessárias. Mas antes é importante saber que o que irá definir se ao compilar o projeto será criado uma DLL ou um EXE, é a classe inicial que até o momento esta como “Program DLLLazarus” onde DLLLazarus é o nome que usei para salvar o projeto. Devemos então primeiramente alterar para “Library DLLLazarus” e desta forma será gerado uma DLL.
Agora em Uses adicione a unit ShareMem, para evitar problemas com declarações de String’s e adicione também a classe exports e nela “RetornaTotalCampos”, que é o nome da função criada na unit funções.pas. Veja o exemplo de como deverá ficar abaixo:
Library DLLLazus;
{$mode objfpc}{$H+}
uses
ShareMem,
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, LResources, funcoes
{ you can add units after this };
{$IFDEF WINDOWS}{$R DLLLazus.rc}{$ENDIF}
exports
RetornaTotalCampos;
begin
{$I DLLLazus.lrs}
Application.Initialize;
Application.Run;
end.
Agora basta dar um Build no projeto para ser gerado a nossa DLL.
Na próxima parte deste artigo vamos ver um exemplo de chamada da função da DLL em um outro projeto.
Até lá!