Erro ao chamar uma dll: quot;invalid pointer operationquot
oi galera , eu fiz uma dll em delphi e a dll e a seguinte:
library project1;
uses
SysUtils,
Classes;
{$R *.res}
function funcao(text1:string):string; stdcall;export;
var
pos : integer;
begin
for pos := 1 to length(text1) do
text1[pos] := chr(ord(text1[pos]) + 2);
result:=text1;
end;
exports
funcao;
begin
end.
e estou chamndo essa dll na minha aplicação da seguinte forma:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function encripter(text1:string):string;stdcall;external (´med.dll´)
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Caption:=encripter(´aa´);
end;
end.
quando eu clico no botao aparece a seguinte mensagem:´invalid pointer operation´, alguem sabe como eu poderia chamar essa dll e fazer que ela me retorne um resultado? ou alguem tem alguma sugestao ?
library project1;
uses
SysUtils,
Classes;
{$R *.res}
function funcao(text1:string):string; stdcall;export;
var
pos : integer;
begin
for pos := 1 to length(text1) do
text1[pos] := chr(ord(text1[pos]) + 2);
result:=text1;
end;
exports
funcao;
begin
end.
e estou chamndo essa dll na minha aplicação da seguinte forma:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function encripter(text1:string):string;stdcall;external (´med.dll´)
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Caption:=encripter(´aa´);
end;
end.
quando eu clico no botao aparece a seguinte mensagem:´invalid pointer operation´, alguem sabe como eu poderia chamar essa dll e fazer que ela me retorne um resultado? ou alguem tem alguma sugestao ?
Anicetojunior
Curtidas 0
Respostas
Beppe
14/06/2004
Dicas:
- Não precisa usar a diretiva export na declaração da função: ela é ignorada.
- Não precisa usar a convenção stdcall.
O problema PODE ser este:
acrescente a unit ShareMem na lista de uses, tanto da dll como do programa(deve ser a primeira).
Ex:
- Não precisa usar a diretiva export na declaração da função: ela é ignorada.
- Não precisa usar a convenção stdcall.
O problema PODE ser este:
acrescente a unit ShareMem na lista de uses, tanto da dll como do programa(deve ser a primeira).
Ex:
program Project1; uses ShareMem, Form1...
library Library1; uses ShareMem...
GOSTEI 0
Nildo
14/06/2004
O problema pode ser do tipo String. Tente trocar o tipo STRING por PCHAR. Se não funcionar, troque por LONGSTRING. Isso nos parametros
GOSTEI 0
Vinicius2k
14/06/2004
acrescente a unit ShareMem na lista de uses, tanto da dll como do programa(deve ser a primeira).
só aproveitando o assunto Beppe e Nildo... essa declaração obriga a distribuir a borlndmm.dll, junto com a aplicação, não obriga?
uso sem isso e nunca tive problemas, mas a verdade é que não tenho muita experiência com DLLs e praticamente só as utilizo para carregar recursos...
GOSTEI 0