funções em dll´s

Delphi

27/04/2003

Olá Pessoal!

Programo em Clipper a mais de cinco anos e agora estou migrando para Delphi e descobrindo o ‘mundo&8217; das dll&8217;s.
Bem! Meu problema é que não consigo chamar uma função dentro de outra função da mesma dll.

Por exemplo:

library exemplo;

uses
SysUtils,
Classes;

{$R *.res}

function FazAlgo( s : string ) : String;
begin
&8230;
s := FazMaisAlgumaCoisa(s);
...
end;

function FazMaisAlgumaCoisa ( s : string ) : String;
begin
&8230;
s := s+s;
...
end;

exports
FazAlgo index 1,
FazMaisAlgumaCoisa index 2;
end.

Desta forma funciona somente se FazMaisAlgumaCoisa for escrita antes de FazAlgo. Como resolvo isso? Pois tenho várias rotinas e , muitas delas dependem umas das outras.


Cristianosilva

Cristianosilva

Curtidas 0

Respostas

Paulo Amaral

Paulo Amaral

27/04/2003

Talvez se você declarar também a função Fazmaisalgumacoisa junta com a declaração Fazalgumacoisa. Isto é, você deve dar visibilidade à todas as funções que serão usadas na Dll.


GOSTEI 0
Rebel_inside

Rebel_inside

27/04/2003

O que você poderia fazer é criar uma unit com essas funções e declarar os cabeçalhos das mesmas na [b:4231cf13ca]interface[/b:4231cf13ca].

Depois você coloca referência à esta unit na Unit da library (principal) e deixa o export do mesmo jeito.

exemplo [b:4231cf13ca]UMinhasFuncoes[/b:4231cf13ca]

unit UMinhasFuncoes;

interface

function FazAlgumCoisa(Param1, Param2: Integer): Integer;
function FazMaisAlgumaCoisa(Param1, Param2: Integer): Integer;

implementation

function FazMaisAlgumaCoisa(Param1, Param2: Integer): Integer;
begin
(...)
end;

function FazAlgumaCoisa(Param1, Param2: Integer): Integer;
begin
Result:= FazMaisAlgumaCoisa(Param1, Param2);
(...)
end;

end.

exemplo [b:4231cf13ca]DllExemplo[/b:4231cf13ca]

library DllExemplo;

uses SysUtils, Classes, [b:4231cf13ca][i:4231cf13ca]UMinhasFuncoes[/i:4231cf13ca][/b:4231cf13ca];

exports
FazAlgumaCoisa index 1,
FazMaisAlgumaCoisa index 2;

end.


------

Pronto, deste modo você tem uma DLL que consegue chamar as próprias funções.


Uma coisa importante para lembrar é que se você usa Strings na DLL (seja ela como parâmetros, resultados de funções ou em objetos/classes/estruturas(records)), você deve adicionar a Unit ShareMem como sendo a primeira da lista (uses ShareMem, SysUtils, Classes, ...) tanto da DLL quanto da aplicação que irá usa-la. E você também deverá usar a DLL da borland (se não me engano é algo como borlndmm.dll)

Aconselho dar uma boa lida no Help do Delphi sobre isso.

[]´s


GOSTEI 0
POSTAR