Avatar billede bif_pin Nybegynder
15. juni 2003 - 16:42 Der er 14 kommentarer og
3 løsninger

Hvilke datatype er REG_MULTI_SZ

Jeg står og skal lave et program som aflæsert min ip adr fra registreringsdatabasen med borland i c++.


Jeg kan sagtens aflæse almindelige REG_SZ datatyper i registreringsdatabasen men jeg kan ikke aflæse værdityper af typen REG_MULTI_SZ. Jeg prøver at sætte den som en string da den er af typen string. Men der kommer en fejl ved udførsel af programmet og den vil ikke aflæse ip nummeret.

Er der nogen der ved hvilke datatype jeg skal give den da jeg ikke kan bruge string?

Jeg har også prøver Ansistring.

MVH TOM
Avatar billede arne_v Ekspert
15. juni 2003 - 18:02 #1
REG_MULTI_SZ betyder multiple strings.

Prøv med en:
  char **
Avatar billede bertelbrander Novice
15. juni 2003 - 20:12 #2
GetMultiStringValue, find den i din kompilers dokumentation.
Avatar billede bif_pin Nybegynder
15. juni 2003 - 23:15 #3
Desværre virker char ** ikke.
compilerfejl kan ikke konvertere ansistring til char.
Men når jeg laver den af typen ansistring kommer den med type fejl.

GetMultiStringValue kunne jeg ikke finde nogle stder i borland builder c++ compileren under hjælp.

Sådan ser min sætning ud:
valuereg = Registry->ReadString("IPAddress");

valuereg har jeg prøvet at give String, Ansistring, char, char**.
I registreringseditoren er IPAddress en REG_MULTI_SZ type (multistring type).
Jeg er ved at blive tosset over at den ikke vil læse den multistring.
Håber nogle kan hjælpe mig.

På forhånd tak.
MVH Tom
Avatar billede bertelbrander Novice
15. juni 2003 - 23:43 #4
Prøv denne link, GetMultiStringValue() ser ikke ud til at være en almindelig funktion, men den er en del af SDK, så du burde kunne bruge den fra Borland Builder.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/getmultistringvalue_method_in_class_stdregprov.asp
Avatar billede arne_v Ekspert
16. juni 2003 - 06:29 #5
Prøv så med:

string *valuereg;

eller:

Ansistring *valuereg;
Avatar billede arne_v Ekspert
16. juni 2003 - 07:14 #6
Og da man ikke kan overloade på return type skal du også have
en anden metode.

valuereg = Registry->ReadMultiString("IPAddress");

måske ????
Avatar billede arne_v Ekspert
16. juni 2003 - 07:24 #7
(jeg kender ikke Borlands Registry klasse)

Ellers må du installere SDK som Bertel foreslår.
Avatar billede dilleberg Nybegynder
16. juni 2003 - 17:45 #8
REG_MULTI_SZ er et antal strenge, adskilt af 0 og afsluttet med dobbelt 0.

Eksempel:
char mszValues[7] = { 'A', '\0', 'B', '\0', 'C', '\0', '\0' };
Indeholder 3 strenge, "A", "B" og "C" .

Kan også skrives som
char * szValues = "A\0B\0C\0";
Det sidste 0 tilføjes automatisk.
Avatar billede segmose Nybegynder
16. juni 2003 - 17:49 #9
Man skal virkelig være ekspert for at vide sådan noget og mere end genemsnitlig hemmelig for at finde på at lave sådan noget :)
Avatar billede dilleberg Nybegynder
16. juni 2003 - 18:02 #10
Anvendes også i standard Windows API:

BOOL GetOpenFileName(LPOPENFILENAME lpofn);

struct OPENFILENAME indeholder bl.a en multistreng med fil-typer og beskrivelser, f.eks:
"Tekst filer\0*.txt\0Alle filer\0*.*\0"

Kan ses i de fleste Open dialoger.
Avatar billede arne_v Ekspert
24. juni 2003 - 20:48 #11
Giftigt.
Avatar billede bif_pin Nybegynder
25. juni 2003 - 16:16 #12
Hej alle og tak for jeres hjælpende bidrag.

Desværre har det ikke løst problemet. Jeg prøvede din løsning "dilleberg" men desværre uden succes.

Det skal lige understreges at dette projekt er ikke er til for at gøre andre skade, men til en afgørende hovedopgave.

Det skal siges at når jeg laver min valuereg til en string vil den gerne kompilere og køre programmet, men når den når dertil hvor den skal overføre min REG_MULTI_SZ værdi over i valuereg så stopper programkørslen med en error. Det er jo fordi at jeg skal bruge en bestemt værdi til den irriterende REG_MULTI_SZ værdi. Det er underligt at det skal være så svært med REG_MULTI_SZ når det er så let med REG_SZ(jeg ved godt at REG_SZ er streng værdi af fast længde og REG_MULTI_SZ er af varierende længde).
Jeg har også prøvet dine løsninger Arne v men desværre også uden succes.
Det link som bertel kommer med hjalp mig desværre ikke meget men var da også en idé til en løsning.

Er det ikke en klog nørd som lige kan skrive en kort kode der viser hvordan man overføre en MULTI_REG_SZ værdi i c++?

MVH Tom
Avatar billede bertelbrander Novice
26. juni 2003 - 00:27 #13
Jeg lavede følgende der læser en REG_MULTE_SZ. Når strengen er fundet puttes den over i Dest, og strengene bliver vist i en messagebox.
Nøglen er så vidt jeg ved en standard nøgle (Win2000), men bør tilpasses.
Nøglen i sin helhed hedder:  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\BackupIPAddress

  HKEY key;
  DWORD Type;
  DWORD BufSize = 0x1000;
  char Buf[0x1000];
  char Dest[64][1000];

  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM", 0, KEY_READ, &key) == ERROR_SUCCESS)
    if(RegOpenKeyEx(key, "CurrentControlSet", 0, KEY_READ, &key) == ERROR_SUCCESS)
      if(RegOpenKeyEx(key, "Services", 0, KEY_READ, &key) == ERROR_SUCCESS)
        if(RegOpenKeyEx(key, "SharedAccess", 0, KEY_READ, &key) == ERROR_SUCCESS)
          if(RegOpenKeyEx(key, "Parameters", 0, KEY_READ, &key) == ERROR_SUCCESS)
            if(RegQueryValueEx(key, "BackupIPAddress", 0, &Type, NULL, NULL) == ERROR_SUCCESS)
              if(Type == REG_MULTI_SZ)
                if(RegQueryValueEx(key, "BackupIPAddress", NULL, NULL, NULL, &BufSize) == ERROR_SUCCESS)
                  if(BufSize > 1)
                    if(RegQueryValueEx(key, "BackupIPAddress", NULL, NULL, Buf, &BufSize) == ERROR_SUCCESS)
                    {
                      char *p = Buf;
                      int i, j;
                      for(i = 0; *p; i++)
                      {
                        for(j = 0; *p; j++, p++)
                          Dest[i][j] = *p;
                        Dest[i][j] = 0;
                        p++;
                      }
                      for(j = 0; j < i; j++)
                        MessageBox(NULL, Dest[j], "Whatever", MB_OK);
                    }
Avatar billede bif_pin Nybegynder
01. juli 2003 - 00:36 #14
Undskyld ventetiden.

bertelbrander. Den kode som du gav mig skulle lige rettes lidt til mht til stien til nøglen. Men det virkede perfekt og jeg er meget taknemmelig for din hjælp. Men ikke mindst fra alle dem som hjalp undervejs.

Mine points går til bertel for hans store hjælp og som problemløseren på mit problem. Men du skal lige afgive et svar før jeg kan tildele dig mine points.

Håber selv at jeg en dag kan blive ligeså dygtig til programmering som bertel og andre herinde så jeg ikke behøver at spilde jeres tid.

MVH Tom.
Avatar billede bertelbrander Novice
01. juli 2003 - 00:55 #15
Jeg synes du skal dele pointene lige mellem os der har svaret.
Avatar billede arne_v Ekspert
01. juli 2003 - 07:44 #16
Vel kun mellem dem der har svaret korrekt - hvilket jo altså ikke
inkluderer mig.
Avatar billede bif_pin Nybegynder
01. juli 2003 - 19:26 #17
Hej alle.

Nu har jeg fordelt mine point således at dem som har hjulpet mest får flest point o s v. Men alle har fået points.

MVH Tom
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