Avatar billede bumle90 Nybegynder
18. januar 2004 - 01:59 Der er 5 kommentarer og
1 løsning

pointerproblem igen

Jeg kan simpelthen ikke forstå hvorfor følgende ikke virker. Opretter jeg et lokalt chararray i ReadStrFromReg() og sender det med i API kaldet virker det perfekt. Men så snart jeg vil overføre arrayet som en pointer duer funktionen ikke. Der kommer en masse underlige vinduer på skærmen..Det er sikkert en dum fejl jeg ikke har tænkt over...Men jeg har godt nok tænkt længe :)
Jeg ville blive glad hvis der var nogle der kunne se problemet. Mvh. bumle90

#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <string.h>

bool ReadStrFromReg(HKEY StandardHKey,char sti[],char navn[],char indhold[])
{
    DWORD Size=sizeof(indhold);
    DWORD NoegleType = REG_SZ;
    HKEY specifikHandle;
    long findes;

    if(RegOpenKey(StandardHKey,sti, &specifikHandle) == ERROR_SUCCESS)
    {
        findes=RegQueryValueEx(specifikHandle, navn, 0, &NoegleType, (BYTE *)&indhold, &Size);
        RegCloseKey(specifikHandle);
            if(findes==ERROR_SUCCESS)
                return true;
    }
return false;
}

int main(void)
{
    char buffer[1000];
ReadStrFromReg(HKEY_LOCAL_MACHINE,"Software\\minApp",regKeyName,buffer);

printf("%s\n",buffer);
return 0;
}
Avatar billede bertelbrander Novice
18. januar 2004 - 02:06 #1
indhold er en pointer, så du skal ikke tage addressen på den i kaldet til RegQueryValueEx().

dvs linien skal være:
findes=RegQueryValueEx(specifikHandle, navn, 0, &NoegleType, (BYTE *)indhold, &Size);
Avatar billede bumle90 Nybegynder
18. januar 2004 - 10:51 #2
Det er den ret lige glad med..Den skriver det samme ligegyldigt om jeg putter &,* eller ingenting foran.....
Avatar billede bertelbrander Novice
18. januar 2004 - 12:53 #3
Jeg ser lige at der er (mindst) en fejl mere. sizeof(indhold) er det samme som sizeof(char *), normalt 4. Det du vil have er størrelsen på buffer, nemlig 1000. Funktionen ReadStrFromReg kan ikke se hvor mange char's indhold peger på, så du er nødt til at overføre størrelsen som parameter eller skrive  DWORD Size=1000;

Prøv evt at checke om der bliver læst noget, check retur værdien for ReadStrFromReg() og dermed RegQueryValueEx().
Avatar billede bumle90 Nybegynder
18. januar 2004 - 13:12 #4
Den har jeg været på....Det hjælper ikke...
Skriver jeg Size = 1000; Går programmet ned.
Og der bliver heller ikke lagt noget ned i strengen hverken lokalt eller hvis jeg udskriver den efter funktionskaldet.
Det er underligt nok Kun hvis man opretter arrayet "indhold" inde i funktionen det duer
Avatar billede bumle90 Nybegynder
18. januar 2004 - 16:51 #5
lukker
Avatar billede bertelbrander Novice
18. januar 2004 - 19:26 #6
Jeg tror du har en anden fejl, følgende virker:

#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <string.h>

#define regKeyName "OleBole"

bool ReadStrFromReg(HKEY StandardHKey,char sti[],char navn[],char indhold[])
{
  DWORD Size = 1000;
  DWORD NoegleType = REG_SZ;
  HKEY specifikHandle;
  long findes;

  if(RegOpenKey(StandardHKey,sti, &specifikHandle) == ERROR_SUCCESS)
  {
      findes = RegQueryValueEx(specifikHandle, navn, 0, &NoegleType, (BYTE *)indhold, &Size);
      RegCloseKey(specifikHandle);
      if(findes==ERROR_SUCCESS)
          return true;
  }
  return false;
}

bool WriteStrToReg(HKEY StandardHKey,char sti[], char navn[], char indhold[])
{
  HKEY hKey;
  if(RegCreateKeyEx(StandardHKey, sti, 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0, &hKey, 0) == ERROR_SUCCESS)
  {

    RegSetValueEx(hKey, navn, 0, REG_SZ, (BYTE *)indhold, 1000);
    return true;
  }
  return false;
}
int main(void)
{
  char buffer[1000];

  WriteStrToReg(HKEY_LOCAL_MACHINE, "Software\\minApp", regKeyName, "Whatever");

  ReadStrFromReg(HKEY_LOCAL_MACHINE, "Software\\minApp", regKeyName, buffer);
  printf("%s\n", buffer);

  return 0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester