quinta-feira, 24 de janeiro de 2008

Pequena dica para desenvolver / portar aplicações em delphi para Vista.

Esses dias me deparei com um de meus sistemas gerando alguns erros de funcionamento no windows vista.

Na verdade todos os problemas ocorriam pelo mesmo motivo, este sistema em específico armazena suas configurações no registro do windows na chave HKEY_LOCAL_MACHINE (pois todos os usuários devem poder acessar as mesmas configurações), o Vista por padrão deixou de permitir que nossas aplicações escrevam dados na chave HKEY_LOCAL_MACHINE sem que a aplicação seja executada como administrador, consequentemente caso  abrirmos uma chave para consulta com os direitos de acesso total a aplicação não conseguirá nem mesmo ler o conteúdo da chave. Isso tudo acontece graças ao Controle de Contas de Usuários (UAC) do Vista. Na minha opinião é um recurso muito bom porém ainda poderia ser melhor, mas isso não vem ao caso agora. Vamos analizar o código anterior de nossa aplicação:

class function TFuncoes.LeParametro(nomeParametro: string): string;
const
  csLocal: String = 'Software\Programa\';
var
  rConfiguracoes: TRegistry;
begin
  rConfiguracoes := TRegistry.Create;
  try
    rConfiguracoes.RootKey := HKEY_LOCAL_MACHINE;
    if rConfiguracoes.KeyExists(csLocal) then
      begin
       if rConfiguracoes.OpenKey(csLocal, True) then
        begin
          if rConfiguracoes.ValueExists(nomeParametro) then
             Result := rConfiguracoes.ReadString(nomeParametro) else
             Result := EmptyStr;
        end;
      end;
  finally
   FreeAndNil(rConfiguracoes);
  end;
end;

O código acima no Windows Vista retorna sempre um valor vazio ('') para que o mesmo funcione temos que tomar as seguintes precauções:

class function TFuncoes.LeParametro(nomeParametro: string): string;
const
  csLocal: String = 'Software\Programa\';
var
  rConfiguracoes: TRegistry;
begin
  rConfiguracoes := TRegistry.Create;
  try
    rConfiguracoes.RootKey := HKEY_LOCAL_MACHINE;
    //Após mudar a chave inicial setar o modo de acesso como leitura
    rConfiguracoes.Access := KEY_READ;
    if rConfiguracoes.KeyExists(csLocal) then
      begin
       //Garantir que todos os chamados ao metodo OpenKey sejam feitos como somente leitura (neste caso passando o parâmetro CanCreate como False.
       if rConfiguracoes.OpenKey(csLocal, False) then
        begin
          if rConfiguracoes.ValueExists(nomeParametro) then
             Result := rConfiguracoes.ReadString(nomeParametro) else
             Result := EmptyStr;
        end;
      end;
  finally
   FreeAndNil(rConfiguracoes);
  end;
end;

Desta forma garantimos a compatibilidade com o Windows Vista, porém lembre-se que caso seu sistema faça alterações nesta chave ele não conseguirá mudar os dados do registro se a aplicação não for executada como administrador. Eu recomendo mudar a forma que sua aplicação armazena as configurações.

Grande abraço a todos, espero que esta pequena dica seja útil a muitos de vocês que estão migrando para o vista.

Diego M. Garcia.

quarta-feira, 23 de janeiro de 2008

Dica para desenvolvedores de sistemas de Microcontroladores

Fala pessoal essa pequena dica pode ajudar a resolver um pequeno bug que acontece de vez em quando no MPLAB.

Para quem utiliza o MPLAB para desenvolver softwares para microcontroladores da Microchip com CCS C ou até mesmo em assembler, em algumas instalações pode ocorrer o seguinte erro ao tentar compilar qualquer software:

The format of the file <caminho do arquivo>.cof can not be read or written because its extension was not recognized.

Para soluciona-lo basta fazer o procedimento abaixo:

1º Feche o MPLAB.
2º Vá em Iniciar -> Executar.
3º Digite o commando regsvr32 "C:\Arquivos de Programas\Microchip\MPLAB IDE\core\MPProgram.dll"
4º Clique no botão OK.
5º Abra o MPLAB e teste compilar seu projeto novamente.

Pronto nenhum erro será gerado pela IDE, isso acontece muitas vezes pelo fato do mplab durante a instalação procurar o arquivo a ser registrado no caminho errado "Program Files" invés de "Arquivos de Programa" em português.

Grande abraço a todos,
Diego M. Garcia.

terça-feira, 1 de janeiro de 2008

Happy New Year for Everbody

Hi guys, I wish you guys a very happy new year and I hope all your wishes be met this year.

Kind Regards,
Diego M. Garcia

Feliz Ano Novo a Todos

Pessoal estou de volta e desejo-lhes um feliz ano novo a todos e que seus objetivos se realizem neste ano. Logico com muito esforço e trabalho ;)

Grande abraço,
Diego M. Garcia