Pessoal,

estou fazendo uma dll que devera compartilhar dados
em memoria com os .exe que a usam.
A ideia eh assim: a dll carregara informacoes em um
array[0..x] of variant, tipo nome, usuario, etc...
Sempre que outro exe do pacote "usar" as funcoes
desta dll, por exemplo GetNome, retornaria o valor
da posicao y e assim vai.

O que estamos evitar eh o disperdicio de memoria
pois os valores sempre serao iguais, por isso a
ideia de compartilhar os dados.

A duvida eh como acessar as posicoes do array via
ponteiro.
Estou me baseando no exemplo "DLLMem" do livro do
Cantu, Delphi 7  A Biblia, conforme abaixo.

Desculpem a "carta", mas eh dificil explicar a
necessidade em poucas palavras.

Vlw!

Alencar

==================================================
Exemplo retirado do livro:

unit DllMemU;

interface

uses
  Windows, SysUtils;

procedure SetData (I: Integer); stdcall;
function GetData: Integer; stdcall;
procedure SetShareData (I: Integer); stdcall;
function GetShareData: Integer; stdcall;

implementation

// global DLL data
var
  PlainData: Integer = 0; // not shared
  ShareData: ^Integer; // shared
  hMapFile: THandle;

const
  VirtualFileName = 'ShareDllData';
  DataSize = sizeof (Integer);

// plain (non shared) data read and write

procedure SetData (I: Integer); stdcall;
begin
  PlainData := I;
end;

function GetData: Integer; stdcall;
begin
  Result := PlainData;
end;

// shared data read and write

procedure SetShareData (I: Integer); stdcall;
begin
  ShareData^ := I;
end;

function GetShareData: Integer; stdcall;
begin
  Result := ShareData^;
end;

initialization
  //create memory mapped file
  hMapFile := CreateFileMapping ($FFFFFFFF, nil,
    Page_ReadWrite, 0, DataSize, VirtualFileName);
  if hMapFile = 0 then
    raise Exception.Create ('Error creating memory mapped file');
  // get the pointer to the actual data
  ShareData := MapViewOfFile (
    hMapFile, File_Map_Write, 0, 0, DataSize);

finalization
  UnmapViewOfFile (ShareData);
  CloseHandle (hMapFile);
end.

--
---------------------------------------
    Philler Informatica Ltda
    Jose Alencar Philereno
         ICQ 13458351
Messenger/Skype (voz): alencar

"Feliz aquele que transfere o que sabe
e aprende o que ensina" Cora Coralina


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a