Dúvida na criação de DLL.
Galera do Fórum, li o artigo no portal do assinante do Tiago de como criar Dll. O exemplo que ele deu até que deu certo, então tentei criar a minha própria dll, mas esta dando erro. Gostaria de ajuda para resolve-la.
O código da Dll.
library Objetiva;
uses
ShareMem, SysUtils, Windows;
function ZeroEsquerda(const I: integer; const Casas: byte): string; stdcall; overload;
var
Ch: Char;
begin
Result := IntToStr(I);
if Length(Result) > Casas then
begin
Ch := ´*´;
Result := ´´;
end
else
Ch := ´0´;
while Length(Result) < Casas do
Result := Ch + Result;
end;
exports
ZeroEsquerda(const I: integer; const Casas: byte);
end.
Até aqui tudo bem.
O código da minha aplicação de exemplo usando a Dll.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Edit1: TEdit;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function ZeroEsquerda(const I: integer; const Casas: byte): string; stdcall; external ´Objetiva.DLL´;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
edit1.text := ZeroEsquerda(strtoint(edit1.text),13);
end;
end.
O erro é o seguinte:
Project Project1.exe raised exception class EInvalidPointer with message ´Invalid pointer operation´. Process stopped...
Não sei como resolver isto, onde esta o erro, se alguem puder me ajudar a entender as Dll, ficarei muito grato a todos.
Obrigado
Valnei
O código da Dll.
library Objetiva;
uses
ShareMem, SysUtils, Windows;
function ZeroEsquerda(const I: integer; const Casas: byte): string; stdcall; overload;
var
Ch: Char;
begin
Result := IntToStr(I);
if Length(Result) > Casas then
begin
Ch := ´*´;
Result := ´´;
end
else
Ch := ´0´;
while Length(Result) < Casas do
Result := Ch + Result;
end;
exports
ZeroEsquerda(const I: integer; const Casas: byte);
end.
Até aqui tudo bem.
O código da minha aplicação de exemplo usando a Dll.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Edit1: TEdit;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function ZeroEsquerda(const I: integer; const Casas: byte): string; stdcall; external ´Objetiva.DLL´;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
edit1.text := ZeroEsquerda(strtoint(edit1.text),13);
end;
end.
O erro é o seguinte:
Project Project1.exe raised exception class EInvalidPointer with message ´Invalid pointer operation´. Process stopped...
Não sei como resolver isto, onde esta o erro, se alguem puder me ajudar a entender as Dll, ficarei muito grato a todos.
Obrigado
Valnei
Objetivacreator
Curtidas 0
Respostas
Beppe
25/01/2004
Você colocou ShareMem na lista uses do .dpr? Deve ser a primeira.
OBS: Não use stdcall, o padrão(register) é mais eficiente.
OBS: Não use stdcall, o padrão(register) é mais eficiente.
GOSTEI 0
Beppe
25/01/2004
Você colocou ShareMem na lista uses do .dpr do programa principal? Deve ser a primeira.
OBS: Não use stdcall, o padrão(register) é mais eficiente. A não ser que você queira chamar a dll de outra linguagem, como C++.
OBS: Não use stdcall, o padrão(register) é mais eficiente. A não ser que você queira chamar a dll de outra linguagem, como C++.
GOSTEI 0