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;


Kitsystem

Kitsystem

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar