Tem como guardar em uma dll valores contador?
Caros colegas. Gostaria de ´guardar´ em uma DLL valores de Contadores de acesso. Tem como ?
Se tem como Fazer?
Saudações/Hélio
Se tem como Fazer?
Saudações/Hélio
Helio Nascimento
Curtidas 0
Respostas
Edilcimar
14/12/2005
crei que na dll não, mas no registro do windows sim
GOSTEI 0
Adriano Santos
14/12/2005
Na dll não é possível, pois não permite escrita.
Eu prefiro trabalhar com arquivos .INI ou no Registry do Windows. Se precisar de uma ajuda neste caso pode contar.
Eu prefiro trabalhar com arquivos .INI ou no Registry do Windows. Se precisar de uma ajuda neste caso pode contar.
GOSTEI 0
Helio Nascimento
14/12/2005
Caro Adriano
Aceito sua sugestão. Voce pode me ajudar?
Sds/Hélio
Aceito sua sugestão. Voce pode me ajudar?
Sds/Hélio
GOSTEI 0
Vinicius2k
14/12/2005
Colegas,
Concordo que é muito mais simples utilizar um .INI ou o Registry, porém devo discordar sobre não ser possível gravar em DLLs e EXEs.
O próprio Windows fornece o suporte para isto através das funções [b:3d51a0aaed]BeginUpdateResouce[/b:3d51a0aaed], [b:3d51a0aaed]UpdateResource[/b:3d51a0aaed] e [b:3d51a0aaed]EndUpdateResource[/b:3d51a0aaed]. A única restrição para gravação é que o arquivo não pode estar em uso, então, isto impede um executável de gravar em sí próprio.
Estas fuções da API permitem manipulação de recursos como ´ICON´, ´BITMAP´ e ´RCDATA´. Para armazenar um texto, RCDATA pode ser utilizado.
Em Windows 9x/ME estas funções não trabalham corretamente, mas existem clones da API feitas pela MadShi - www.madshi.net - (pacote MadCollection) que trabalham corretamente em todas as plataformas. As funções implementadas pela MadShi tem quase os mesmo nomes, porém terminam com ´W´ (Ex: BeginUpdateResouce[b:3d51a0aaed]W[/b:3d51a0aaed])
Abaixo um exemplo:
T+
Concordo que é muito mais simples utilizar um .INI ou o Registry, porém devo discordar sobre não ser possível gravar em DLLs e EXEs.
O próprio Windows fornece o suporte para isto através das funções [b:3d51a0aaed]BeginUpdateResouce[/b:3d51a0aaed], [b:3d51a0aaed]UpdateResource[/b:3d51a0aaed] e [b:3d51a0aaed]EndUpdateResource[/b:3d51a0aaed]. A única restrição para gravação é que o arquivo não pode estar em uso, então, isto impede um executável de gravar em sí próprio.
Estas fuções da API permitem manipulação de recursos como ´ICON´, ´BITMAP´ e ´RCDATA´. Para armazenar um texto, RCDATA pode ser utilizado.
Em Windows 9x/ME estas funções não trabalham corretamente, mas existem clones da API feitas pela MadShi - www.madshi.net - (pacote MadCollection) que trabalham corretamente em todas as plataformas. As funções implementadas pela MadShi tem quase os mesmo nomes, porém terminam com ´W´ (Ex: BeginUpdateResouce[b:3d51a0aaed]W[/b:3d51a0aaed])
Abaixo um exemplo:
procedure GravarRecurso; var hDLLRecurso: DWord; Recurso: String; begin Recurso:= ´Texto gravado na DLL´; hDLLRecurso:= BeginUpdateResource(´NOME_DA_DLL.DLL´, False); if hDLLRecurso <> 0 then try UpdateResource(hDLLRecurso, PWideChar(RT_RCDATA), ´NOME_DO_RECURSO´, 0, Pointer(Recurso), Length(Recurso)); finally EndUpdateResource(hDLLRecurso, False); end; end; procedure LerRecurso; var ResData: HGLOBAL; ResInfo: HRSRC; Recurso: String; hDLLRecurso: THandle; begin hDLLRecurso:= LoadLibrary(´NOME_DA_DLL.DLL´); try ResInfo:= FindResource(hDLLRecurso, ´NOME_DO_RECURSO´, RT_RCDATA); if ResInfo <> 0 then begin ResData:= LoadResource(hDLLRecurso, ResInfo); if ResData <> 0 then try Recurso:= PChar(LockResource(ResData)); UnlockResource(ResData); finally FreeResource(ResData); end; end; finally FreeLibrary(hDLLRecurso); end; end;
T+
GOSTEI 0
Adriano Santos
14/12/2005
[quote:f39f451165=´Helio Nascimento´]Caro Adriano
Aceito sua sugestão. Voce pode me ajudar?
Sds/Hélio[/quote:f39f451165]
Pois não:
Faz a leitura
Aceito sua sugestão. Voce pode me ajudar?
Sds/Hélio[/quote:f39f451165]
Pois não:
procedure TForm1.Button1Click(Sender: TObject); var Registro : TIniFile; begin Registro := TIniFile.Create(ExtractFilePath(Application.ExeName) + ´CONFIG.INI´); Registro.WriteInteger(´SECAO´,´CONTADOR´, 1); Registro.Free; end;
Faz a leitura
procedure TForm1.Button2Click(Sender: TObject); var Registro : TIniFile; Valor : Integer; begin Registro := TIniFile.Create(ExtractFilePath(Application.ExeName) + ´CONFIG.INI´); Valor := Registro.ReadInteger(´SECAO´,´CONTADOR´, Valor); Edit1.Text := IntToStr(Valor); Registro.Free; end;
GOSTEI 0
Adriano Santos
14/12/2005
Colegas,
Concordo que é muito mais simples utilizar um .INI ou o Registry, porém devo discordar sobre não ser possível gravar em DLLs e EXEs.
O próprio Windows fornece o suporte para isto através das funções [b:5f091dca26]BeginUpdateResouce[/b:5f091dca26], [b:5f091dca26]UpdateResource[/b:5f091dca26] e [b:5f091dca26]EndUpdateResource[/b:5f091dca26]. A única restrição para gravação é que o arquivo não pode estar em uso, então, isto impede um executável de gravar em sí próprio.
Estas fuções da API permitem manipulação de recursos como ´ICON´, ´BITMAP´ e ´RCDATA´. Para armazenar um texto, RCDATA pode ser utilizado.
Em Windows 9x/ME estas funções não trabalham corretamente, mas existem clones da API feitas pela MadShi - www.madshi.net - (pacote MadCollection) que trabalham corretamente em todas as plataformas. As funções implementadas pela MadShi tem quase os mesmo nomes, porém terminam com ´W´ (Ex: BeginUpdateResouce[b:5f091dca26]W[/b:5f091dca26])
Abaixo um exemplo:
T+
procedure GravarRecurso; var hDLLRecurso: DWord; Recurso: String; begin Recurso:= ´Texto gravado na DLL´; hDLLRecurso:= BeginUpdateResource(´NOME_DA_DLL.DLL´, False); if hDLLRecurso <> 0 then try UpdateResource(hDLLRecurso, PWideChar(RT_RCDATA), ´NOME_DO_RECURSO´, 0, Pointer(Recurso), Length(Recurso)); finally EndUpdateResource(hDLLRecurso, False); end; end; procedure LerRecurso; var ResData: HGLOBAL; ResInfo: HRSRC; Recurso: String; hDLLRecurso: THandle; begin hDLLRecurso:= LoadLibrary(´NOME_DA_DLL.DLL´); try ResInfo:= FindResource(hDLLRecurso, ´NOME_DO_RECURSO´, RT_RCDATA); if ResInfo <> 0 then begin ResData:= LoadResource(hDLLRecurso, ResInfo); if ResData <> 0 then try Recurso:= PChar(LockResource(ResData)); UnlockResource(ResData); finally FreeResource(ResData); end; end; finally FreeLibrary(hDLLRecurso); end; end;
Muito loko o esquema hein Vinicius2K? Confesso que não havisa usado gravação e leitura de resources com DLLs somente com os arquivos .RES mesmo...gostei.
De qualquer forma joguei o exemplo como INI, concordo com você. Acho muito mais fácil a manipulação.
GOSTEI 0
Adriano Santos
14/12/2005
Colegas,
Concordo que é muito mais simples utilizar um .INI ou o Registry, porém devo discordar sobre não ser possível gravar em DLLs e EXEs.
O próprio Windows fornece o suporte para isto através das funções [b:ef87907a83]BeginUpdateResouce[/b:ef87907a83], [b:ef87907a83]UpdateResource[/b:ef87907a83] e [b:ef87907a83]EndUpdateResource[/b:ef87907a83]. A única restrição para gravação é que o arquivo não pode estar em uso, então, isto impede um executável de gravar em sí próprio.
Estas fuções da API permitem manipulação de recursos como ´ICON´, ´BITMAP´ e ´RCDATA´. Para armazenar um texto, RCDATA pode ser utilizado.
Em Windows 9x/ME estas funções não trabalham corretamente, mas existem clones da API feitas pela MadShi - www.madshi.net - (pacote MadCollection) que trabalham corretamente em todas as plataformas. As funções implementadas pela MadShi tem quase os mesmo nomes, porém terminam com ´W´ (Ex: BeginUpdateResouce[b:ef87907a83]W[/b:ef87907a83])
Abaixo um exemplo:
T+
procedure GravarRecurso; var hDLLRecurso: DWord; Recurso: String; begin Recurso:= ´Texto gravado na DLL´; hDLLRecurso:= BeginUpdateResource(´NOME_DA_DLL.DLL´, False); if hDLLRecurso <> 0 then try UpdateResource(hDLLRecurso, PWideChar(RT_RCDATA), ´NOME_DO_RECURSO´, 0, Pointer(Recurso), Length(Recurso)); finally EndUpdateResource(hDLLRecurso, False); end; end; procedure LerRecurso; var ResData: HGLOBAL; ResInfo: HRSRC; Recurso: String; hDLLRecurso: THandle; begin hDLLRecurso:= LoadLibrary(´NOME_DA_DLL.DLL´); try ResInfo:= FindResource(hDLLRecurso, ´NOME_DO_RECURSO´, RT_RCDATA); if ResInfo <> 0 then begin ResData:= LoadResource(hDLLRecurso, ResInfo); if ResData <> 0 then try Recurso:= PChar(LockResource(ResData)); UnlockResource(ResData); finally FreeResource(ResData); end; end; finally FreeLibrary(hDLLRecurso); end; end;
Muito loko o esquema hein Vinicius2K? Confesso que não havisa usado gravação e leitura de resources com DLLs somente com os arquivos .RES mesmo...gostei.
De qualquer forma joguei o exemplo como INI, concordo com você. Acho muito mais fácil a manipulação.
GOSTEI 0
Adriano Santos
14/12/2005
Deslcupai galera, aconteceu algo aki e o post foi duas vezes.
GOSTEI 0