ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Como criar Dll em tempo de execução?[RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
jjmalka
Aprendiz
Aprendiz


Registrado: Domingo, 16 de Julho de 2006
Mensagens: 157

MensagemEnviada: Dom Jul 16, 2006 2:20 am    Assunto: Como criar Dll em tempo de execução?[RESOLVIDO] Responder com Citação

Gostaria de saber como faço para criar uma Dll atraves de linhas de comandos.
Exemplo:
digitar uma valor qualquer ou extrair e armazenar em uma dll e depois ler a informação.
Fico muito grato pela contribuição!


Editado pela última vez por jjmalka em Sex Fev 15, 2013 11:58 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Dom Jul 16, 2006 6:31 pm    Assunto: Como criar Dll em tempo de execução? Responder com Citação

Sinceramente, não entendi sua questão...
Primeiro, pq para criar uma dll se faz necessário um compilador seja de que linguagem for...

Acho que vc esta querendo armazenar alguns recursos na DLL não? Tais como imagens, sons etc. para posterior uso... se for isso... mais ou menos assim:

Cria-se o arquivo de recursos com extensão .RC, como o seguinte:

BITMAP1 BITMAP \'teste.bmp\'
ICON1 ICON \'icone.ico

Compila-se com o BRCC32.exe
cria-se a dll

supondo que seu arquivo de recursos tenha o nome de "ArqRes.Res":
no corpo da dll:

library DllRec;

{$R ArqRes.RES}

begin
end.
\'
para ler a informação no arquivo de recursos:

procedure TForm1.FormCreate(Sender: TObject);
var
LibHandle : THandle;
begin
LibHandle := LoadLibrary(\'DLLRec.Dll\');
// se LibHandle for diferente de 0, carregou Ok
if LibHandle <> 0 then
try
Image1.Picture.Bitmap.Handle := LoadBitmap(LibHandle,\'BITMAP1\');
Application.Icon.Handle := LoadIcon(LibHandle,\'ICON1\');
finally
FreeLibrary(LibHandle);
end
else
raise Exception.Create(\'Erro ao carregar biblioteca\');
end;

Se não for bem isso que vc quer e deseja armazenar em runtime o melhor é vc criar um arquivo tipificado par armazenar armazená-los...
Mais ou menos assim:

unit persrec;
interface
uses Classes, dialogs, sysutils;
type
// Define o registro que conterá as informações da pessoa.
TPersonRec = packed record
FirstName: String[20];
LastName: String[20];
MI: String[1];
BirthDay: TDateTime;
Age: Integer;
end;
// Cria um descendente de TFileStream que sabe a respeito de TPersonRec
TRecordStream = class(TFileStream)
private
function GetNumRecs: Longint;
function GetCurRec: Longint;
procedure SetCurRec(RecNo: Longint);
protected
272 function GetRecSize: Longint; virtual;
Listagem 12.5 Continuação
public
function SeekRec(RecNo: Longint; Origin: Word): Longint;
function WriteRec(const Rec): Longint;
function AppendRec(const Rec): Longint;
function ReadRec(var Rec): Longint;
procedure First;
procedure Last;
procedure NextRec;
procedure PreviousRec;
// NumRecs mostra o número de registros no stream
property NumRecs: Longint read GetNumRecs;
// CurRec reflete o registro atual no stream
property CurRec: Longint read GetCurRec write SetCurRec;
end;
implementation
function TRecordStream.GetRecSize:Longint;
begin
{ Esta função retorna o tamanho do registro a respeito do qual este stream
conhece (TPersonRec) }
Result := SizeOf(TPersonRec);
end;
function TRecordStream.GetNumRecs: Longint;
begin
// Esta função retorna o número de registros no stream
Result := Size div GetRecSize;
end;
function TRecordStream.GetCurRec: Longint;
begin
{ Esta função retorna a posição do registro atual. Temos que somar
um a esse valor, pois o ponteiro do arquivo está sempre no início
do registro, o que não é refletido na equação:
Position div GetRecSize }
Result := (Position div GetRecSize) + 1;
end;
procedure TRecordStream.SetCurRec(RecNo: Longint);
begin
{ Este procedimento define a posição para o registro no stream
especificado por RecNo. }
if RecNo > 0 then
Position := (RecNo - 1) * GetRecSize
else
Raise Exception.Create(‘Cannot go beyond beginning of file.’);
end;
function TRecordStream.SeekRec(RecNo: Longint; Origin: Word): Longint;
begin
{ Esta função posiciona o ponteiro do arquivo em um local especificado
por RecNo }
273
Listagem 12.5 Continuação
{ NOTA: Este método não contém tratamento de erro para determinar se
essa operação ultrapassará o início/término do arquivo streamed }
Result := Seek(RecNo * GetRecSize, Origin);
end;
...
...

Se quiser mais informação vc pode consultar o O Guia do Desenvoldor Delphi...

bye...


_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
jjmalka
Aprendiz
Aprendiz


Registrado: Domingo, 16 de Julho de 2006
Mensagens: 157

MensagemEnviada: Seg Jul 17, 2006 12:50 am    Assunto: Como criar Dll em tempo de execução? Responder com Citação

[b] johnny-walker [/b]
Valeu pela explicação para inserir e *.bmp na dll mais o que eu quero mesmo e [u] construir uma DLL sem compilador! e isso e possivel!!!!![/u]Vc ja deve ter brincado com o bloco de notas.
entao e possivel com o Ruindows (**salvar como** ) um texto ou
comandos digitado no bloco de notas com qualquer formato permitido e reconhecido pelo windows, certo?EX: (*.DLL) se nao brincou tente que e possivel.
por isso quero armazenar e ler dados ou variaveis em uma DLL criada quando eu solicitar ao programa.
Se alguem souber, conseguir salvar e ler a DLL agradeço se me explicar como foi feito. ainda nao consegui entender como faço isso!
Obrigado pela atenção;
JJMalka.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Seg Jul 17, 2006 9:35 am    Assunto: Como criar Dll em tempo de execução? Responder com Citação

como disse nosso amigo johnny-walker, pra vc criar uma dll vc precisa de um compilador, pois uma dll nao eh um arquivos simples (como um txt). ela eh um tipo executavel q pode ser utilizada por outros programas, mas nao pode ser executada diretamente.

qto a vc criar qq tipo de arquivo pelo bloco de notas, isso eh possivel sim, mas se vc criar um arquivo com extensao .dll, se vc usar os metodos normais para chamar uma dll, provavelmente seu sistema sistema operacional vai ficar \"louco\" tentando encontrar o ponto de inicio do arquivo (ou vai dar um erro dizendo q o arquivo eh invalido).

mas se vc quer gravar dados nesse arquivo e depois ler, vc pode usar um memo e fazer o tratamento dos dados manualmente
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB