Fórum BORLNDMM.DLL shared memory manager em DLL #256780
01/11/2004
0
Boa tarde,
Estou tendo dificuldades em resolver um problema de parateros passado por variavel em uma Funcao, mas esta funcao fica dentro de uma DLL, abaixo segue um exeplo simples onde este erro já ocorre ( Erro: Invalid Pointer Operation)
PS. Infelizmente tenho que usar String e nao ShortString, pois estou fazendo apenas a DLL, e tem varios aprlicativos já utilizando uma DLL em C que retorna String longa.
- Alguem sabe como utiliza o BORLNDMM.DLL shared memory manager , no exemplo abaixo?
>> Segue exemplo 1) DLL 2)Aplicacao
// 1) library DLL
Function RetornaDadosDLL(var Str1:String;var Str2:String):Integer;Export ; stdcall ;
begin
Str1:=´Dados´;
Str2:=´Teste´;
Result:=1;
end;
Exports { Torna visivel para os programas }
RetornaDadosDLL;
-----------------------------------------------------------------------
//2) Aplicacao EXE
procedure TForm1.Button1Click(Sender: TObject);
var StartSTR1:String;
StartRetVal1:Real;
ret:Integer;
begin
Ret:=0;
Str1:=´´;
Str2:=´´;
ShowMessage(IntToStr(Ret)+´ ´+Str1+´ ´+Str2);
Ret:=RetornaDadosDLL(Str1,Str2);
ShowMessage(IntToStr(Ret)+´ ´+Str1+´ ´+Str2);
end;
Estou tendo dificuldades em resolver um problema de parateros passado por variavel em uma Funcao, mas esta funcao fica dentro de uma DLL, abaixo segue um exeplo simples onde este erro já ocorre ( Erro: Invalid Pointer Operation)
PS. Infelizmente tenho que usar String e nao ShortString, pois estou fazendo apenas a DLL, e tem varios aprlicativos já utilizando uma DLL em C que retorna String longa.
- Alguem sabe como utiliza o BORLNDMM.DLL shared memory manager , no exemplo abaixo?
>> Segue exemplo 1) DLL 2)Aplicacao
// 1) library DLL
Function RetornaDadosDLL(var Str1:String;var Str2:String):Integer;Export ; stdcall ;
begin
Str1:=´Dados´;
Str2:=´Teste´;
Result:=1;
end;
Exports { Torna visivel para os programas }
RetornaDadosDLL;
-----------------------------------------------------------------------
//2) Aplicacao EXE
procedure TForm1.Button1Click(Sender: TObject);
var StartSTR1:String;
StartRetVal1:Real;
ret:Integer;
begin
Ret:=0;
Str1:=´´;
Str2:=´´;
ShowMessage(IntToStr(Ret)+´ ´+Str1+´ ´+Str2);
Ret:=RetornaDadosDLL(Str1,Str2);
ShowMessage(IntToStr(Ret)+´ ´+Str1+´ ´+Str2);
end;
Kitsystem
Curtir tópico
+ 0
Responder
Posts
01/11/2004
Gurc
Cara, realmente você caiu numa cilada... DLLs e strings (do Delphi) não combinam muito bem.
Uma solução seria converter suas strings para o tipo PChar, só que seu código ficaria um tanto quanto complexo.
A segunda solução é a seguinte.
Inclua a unidade ShareMem na DLL e no programa como primeira unit de cada um dos projetos. Depois disso, você deve instalar a BorlndMM.DLL nas máquinas.
O único problema da segunda técnica é que, como os outros programas não terão a unit ShareMem incluida, seus programas que usam essa DLL devem ser todos feitos em Delphi.
Espero ter solucionado sua dúvida.
Qualquer coisa, estamos aí.
Gustavo Royer Chaurais
Uma solução seria converter suas strings para o tipo PChar, só que seu código ficaria um tanto quanto complexo.
A segunda solução é a seguinte.
Inclua a unidade ShareMem na DLL e no programa como primeira unit de cada um dos projetos. Depois disso, você deve instalar a BorlndMM.DLL nas máquinas.
O único problema da segunda técnica é que, como os outros programas não terão a unit ShareMem incluida, seus programas que usam essa DLL devem ser todos feitos em Delphi.
Espero ter solucionado sua dúvida.
Qualquer coisa, estamos aí.
Gustavo Royer Chaurais
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)