Criar uma DLL no delphi

Delphi

11/06/2007

ola pessoa,

alguem sabe me dizer como criar uma dll no delphi só q tem q ser com interface padrao C...como eu faco isso?

agradeco desde ja. :lol:


Tap_pedroso

Tap_pedroso

Curtidas 0

Respostas

Jujan

Jujan

11/06/2007

Vá na barra de ferramentas em File|New|DLL Wizard


GOSTEI 0
Tap_pedroso

Tap_pedroso

11/06/2007

sim, ate aí td bem mas ele me abre uma unit em branco...o q eu quero saber é se eu tenho q fazer algo de diferente para essa dll ser padrao C...se precisa de algo diferente para ser usada em um programa feito em C.


GOSTEI 0
Paullsoftware

Paullsoftware

11/06/2007

o conteúdo abaixo foi retirado de um arquivo de dicas que tenho aqui em ksa, pode lhe util... um abraço
Selecione o item New do Menu File, para exibir a caixa de diálogo New Items. Agora, selecione o item DLL e clique em OK, para gerar o código principal da DLL, que se apresenta a seguir:

library Project1;

{ Important note about DLL memory management: ShareMem must be the

first unit in your library´s USES clause AND your project´s (select

Project-View Source) USES clause if your DLL exports any procedures or

functions that pass strings as parameters or function results. This

applies to all strings passed to and from your DLL--even those that

are nested in records and classes. ShareMem is the interface unit to

the BORLNDMM.DLL shared memory manager, which must be deployed along

with your DLL. To avoid using BORLNDMM.DLL, pass string information

using PChar or ShortString parameters. }
 

uses

SysUtils,

Classes;

 

begin

end.




Em muitas situações, inclusive esta, o arquivo DELPHIMM.DLL deve ser distribuído junto à sua aplicação. Uma outra observação muito importante, para que você possa escrever suas DLLs, você deve ter conhecimentos na Linguagem Object Pascal.

Apenas como exemplificação, vamos criar uma função que receba como parâmetros dois números reais e retorne o maior deles.
Function Max (a b : double ) : double ; Export ; stdcall ;
begin
If (a > b) then Result :=a else Result := b ;
end ;

[b:ede015a9eb]Export[/b:ede015a9eb] = indica que a função poderá ser chamada por outros aplicativos.

[b:ede015a9eb]Stdcall[/b:ede015a9eb] = permite que aplicativos desenvolvidos em outras linguagens façam chamadas à função.

Após serem feitas estas alterações e salvar o projeto com o nome MAXDLL, nossa DLL ficará assim:

library Project1;

 
[i]{ Important note about DLL memory management: ShareMem must be the

first unit in your library´s USES clause AND your project´s (select

Project-View Source) USES clause if your DLL exports any procedures or

functions that pass strings as parameters or function results. This

applies to all strings passed to and from your DLL--even those that

are nested in records and classes. ShareMem is the interface unit to

the BORLNDMM.DLL shared memory manager, which must be deployed along

with your DLL. To avoid using BORLNDMM.DLL, pass string information

using PChar or ShortString parameters. }[/i]

 
uses

SysUtils,

Classes;

function Max(a, b : double):double:expert:stdcall:
begin
if (a > b) then result:= a else result := b;
end;
exports
Max index 1;
begin
end.


Você pode compilar uma DLL, assim como a um projeto no Delphi, e distribuir livremente.

PS: Você não pode executar uma DLL pelo Delphi, através do RUN do Menu Run, pois não se trata de uma aplicação.

Chamar uma DLL, a partir de outra aplicação.

Neste exemplo que iremos montar, iremos usar: um formulário, duas caixas de texto (os quais o usuário irá digitar dois números reais), um botão de comando.

unit usadll;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

function Max(a, b : double):double;stdcall;
var
Form1: TForm1;

implementation

{$R *.DFM}
function Max(a, b : double):double;external ´MaxDLL´;
procedure TForm1.Button1Click(Sender: TObject);
var
x, y, resultado : double;
begin
x := StrToFloat(Edit1.Text);
y := StrToFloat(Edit2.Text);
resultado := Max(x,y);
ShowMessage(´Valor Máximo ´ +FloatToStr(resultado));
end;

end.

PS: A função Max está declarada na seção interface e implementada na seção implementation, ou seja, a função está implementada em uma DLL


GOSTEI 0
Tap_pedroso

Tap_pedroso

11/06/2007

valeu paullsoftware muito obrigado...otima explicacao


GOSTEI 0
POSTAR