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