BORLNDMM.DLL shared memory manager em DLL

Delphi

01/11/2004

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;


Kitsystem

Kitsystem

Curtidas 0

Respostas

Gurc

Gurc

01/11/2004

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


GOSTEI 0
POSTAR