2009/8/12 Leodinei Bielak <leodi...@gmail.com>:
> Olá.
> Alguém pode me dizer como eu passo um objeto para um dll?
>
> É algo assim, na dll eu quero ter um parâmetro que é um objeto. Pode
> se um dataset, um progressbar, enfim um componente normal do delphi.
> Eu tentei passar o objeto e como pointer.
> Mas na hora que acessa da erro de violação de memória.

Quando você trabalha com objetos, você precisa de uma estrutura
chamada VMT. Essa VMT é um vetor aonde estão relacionadas todas as
classes utilizadas na sua aplicação, e que faz com que a mágica da
sobrescrita de método funcione.

Quando você trabalha com DLL, você tem internamente duas aplicações
que compartilham recursos. Cada aplicação, o seu EXE e a sua DLL, tem
cada um uma VMT e podem, cada um, trabalhar com objetos
individualmente. O problema é jogar objeto de um lado para o outro,
você terá uma ligação a uma área de memória que pertence a outra
aplicação e isso não tem como dar certo.

Você pode solucionar o problema de duas formas: serializar o objeto e
reconstrui-lo do outro lado, ou trabalhar com BPL, que é uma
feitiçaria do Delphi que transforma uma DLL em uma extensão do seu
EXE, fazendo com que os dois tenham um único gerenciador de memória e
uma única VMT.

Joao Morais

Responder a