Importar func. de uma DLL em um arq. de recurso sem salva-lo
Tem como utilizar uma função em uma DLL, que esta armazenada em um arquivo de recurso, [b:e5ff8ecd47]sem precisar salvá-la no HD do usuário[/b:e5ff8ecd47]? Tipo: carregar ela na memória e usá-la normalmente sem que o arquivo exista no HD.
OBS: se alguém souber como usar a DLL carregada em um TMemoryStream também ajuda.
Desde já agradeço a vc que dispensou um minuto de sua atenção para ler este tópico.
OBS: se alguém souber como usar a DLL carregada em um TMemoryStream também ajuda.
Desde já agradeço a vc que dispensou um minuto de sua atenção para ler este tópico.
Akelle Kara
Curtidas 0
Respostas
Akelle Kara
21/11/2003
Tem ou não uma forma de usar uma DLL armazenada na RAM, sem que ela precise ser salva no HD?
GOSTEI 0
Beppe
21/11/2003
Eu acho que você devria considerar usar o HD. Há motivos para pensar assim.
Alguns internals do funcionamento de imagens PEs(.exe, .dll, .ocx, .bpl):
1) Quando um PE é aberto para execução(do código), ele é carregado pelo loader, e alguns offsets são ajustados.
2) O handle de uma image nada mais é o endereço do primeiro byte do PE. Se você tentar Caption := PChar(HInstance), verá ´PE´. No arquivo existem alguns bytes que antecedem isto, mas são destinados ao DOS e pulados.
3) A API pública do Win32 só permite a carga de PEs via nome de arquivo, embora deve haver alguma function em ntdll.dll que permita o que você quer.
Então, para fazer o que você quer, você terá que fazer o trabalho do loader, um trabalho árduo e sem muitos benefícios. Então passar o endereço da string ´PE´(offset = PImageDosHeader(Stream.Memory)._lfanew) para funções como GetProcAddress.
Alguns internals do funcionamento de imagens PEs(.exe, .dll, .ocx, .bpl):
1) Quando um PE é aberto para execução(do código), ele é carregado pelo loader, e alguns offsets são ajustados.
2) O handle de uma image nada mais é o endereço do primeiro byte do PE. Se você tentar Caption := PChar(HInstance), verá ´PE´. No arquivo existem alguns bytes que antecedem isto, mas são destinados ao DOS e pulados.
3) A API pública do Win32 só permite a carga de PEs via nome de arquivo, embora deve haver alguma function em ntdll.dll que permita o que você quer.
Então, para fazer o que você quer, você terá que fazer o trabalho do loader, um trabalho árduo e sem muitos benefícios. Então passar o endereço da string ´PE´(offset = PImageDosHeader(Stream.Memory)._lfanew) para funções como GetProcAddress.
GOSTEI 0
Akelle Kara
21/11/2003
Valeu, então vou distribuir as DLLs separadas mesmo...
GOSTEI 0