Jump to content
Sign in to follow this  
Sr Morte

Ler registro com variavel char*

Recommended Posts

Sr Morte

O que eu preciso é simples: Ler uma chave no registro do windows e alocar em uma variável do tipo char*, alguém pode me ajudar?

Share this post


Link to post
Share on other sites
Sr Morte

Caro mod, eu procurei e não encontrei nada que funcione. Se encontraste algo que funcione bem, então poste por favor.

Share this post


Link to post
Share on other sites
Localhost

@Sr Morte

O que eu preciso é simples: Ler uma chave no registro do windows e alocar em uma variável do tipo char*, alguém pode me ajudar?

Alguém te pode ajudar concretamente com o quê? Repara que a tua questão foi um bocado vaga. Já tens algo feito? Ou queres código já feito? É que aqui não há disso, daí o @Baderous te ter dado aquele link, onde existem exemplos de código em abundância...


here since 2009

Share this post


Link to post
Share on other sites
Sr Morte

Certo, certo, aqui esta o código:

extern "C" char*  __declspec(dllexport) openv ()
{
HKEY chave;
if(RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Cryptography",&chave) != 0){
MessageBox(0,"Ocorreu um erro ao abrir a chave!","Erro",0x10);
}
char nome[256];
DWORD tipo; 
DWORD tamanho_buffer = 256;
if(RegQueryValueEx(chave,"MachineGuid",NULL,NULL,(LPBYTE)nome,&tamanho_buffer) != 0){
MessageBox(0,"Ocorreu um erro ao obter o valor!","Erro",0x10);
MessageBox(0,nome,"O valor é:",0x40);
}
else{
MessageBox(0,nome,"O valor é:",0x40);
}
RegCloseKey(chave);
return nome;
}

Meus problemas:

1) Sempre ocorre erro ao obter o valor.

2) Preciso do valor da chave em uma variável char*

Obs.: Isto é uma dll.

Share this post


Link to post
Share on other sites
NuGuN

...

1) Sempre ocorre erro ao obter o valor.

...

Então e qual é o erro? Talvez fosse mais fácil sabendo o erro.

Cumps!

Share this post


Link to post
Share on other sites
Sr Morte

RegQueryValueEx() retorna valor "2" e a variável "nome" não retorna o valor da key.

Share this post


Link to post
Share on other sites
pmg

O teu código de 2011-05-18 00:08:16 não tem indentação e é difícil de perceber ... mas parece que queres fazer o return de uma variável local, que, se o funcionamento de variáveis locais é o mesmo em C e C++, deixa de existir imediatamente após a função terminar:

char *open() {
    char nome[256];
    /* ... */
    return nome;
    /* nome só existe dentro da função */
}

Eu não sei C++, por isso não dou sugestões para solução.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Localhost

pmg: uma solução seria alocar dinamicamente a string e depois retorná-la.


here since 2009

Share this post


Link to post
Share on other sites
pmg

pmg: uma solução seria alocar dinamicamente a string e depois retorná-la.

Pois. Eu sei fazer isso em C (malloc/calloc, realloc, e free); mas não sei em C++ (new, delete, ???). Além disso, segundo creio, em C++ é mais prático usar std::string do que char* ... e possivelmente há outras particularidades da linguagem escolhida pelo Sr Morte que eu desconheço


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Sr Morte

A variável não será utilizada novamente dentro da dll, ela só rpecisa ser retornada para o programa que chamou a função. O Problema mesmo é que não ocorre a leitura dos valores do registro.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.