[MFC] WriteProfileBinary + CString = no go?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 19-04 08:34
Hoi,

Ik probeer in mijn MFC applicatie een CString object weg te schrijven naar het registry met behulp van de WriteProfileBinary() functie. Als ik vervolgens deze waarde wil uitlezen, dit doe ik met GetProfileBinary(), dan krijg ik in de debugger te zien dat de CString intern een bad pointer heeft :/
Nu ben ik een tijdje al op zoek of het uberhaupt mogelijk is om een CString (of een LPCTSTR) binary weg te schrijven naar het registry. Kan iemand mij helpen graag? 'k begin namelijk een beetje te denken dat het gewoon niet kan (hoewel ik me dat nou niet kan voorstellen).. misschien doe ik het gewoon fout :)

Even een stukje code:
Wegschrijven:
C++:
1
2
CString TheString = "blaat"; // even een voorbeeld :)
WriteProfileBinary( Section, Entry, reinterpret_cast<LPBYTE>( &TheString), sizeof( TheString));

en om uit te lezen doe ik:
C++:
1
2
3
4
5
6
7
CString *TheString = 0;
UINT Read;
if( GetProfileBinary( Section, Entry, reinterpret_cast<LPBYTE *>( &TheString), &Read))
{
    // Doe iets met TheString ... helaas is deze hier al stuk
    delete[] TheString;
}

Doe ik het nou gewoon fout, of kan het echt niet?
Ik gebruik overigens VC 7

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Acties:
  • 0 Henk 'm!

  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 27-05 07:52
Volgens mij is CString een object. De pointer (&CString) wijst naar een CString object en niet naar de eigenlijke string. Ik denk dat je de CString eerst moet copieren in een Char array en hem dan mee moet geven aan de functie.
Dit is een gokje uit het hoofd.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18-07 09:02
Ik denk dat je je teruggelezen data eerst in een buffer moet lezen en daar de CString mee moet initialiseren.

Dat gaat niet lukken met het complete CString object ( die heeft meer dan alleen de string zelf als data aan boord ).

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Volgens mij heb je hetzelfde probleem als in deze thread. Stel dat CString een pointer naar een char array zou gebruiken om de string op te slaan. Je zou dan die pointer wegschrijven naar een bestand maar de string zelf niet. Bovendien is die pointer slechts geldig zolang het programma draait en zolang CString de string niet dealloceert.

www.madwizard.org


Acties:
  • 0 Henk 'm!

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 19-04 08:34
madwizard schreef op 08 november 2002 @ 11:32:
Volgens mij heb je hetzelfde probleem als in deze thread. Stel dat CString een pointer naar een char array zou gebruiken om de string op te slaan. Je zou dan die pointer wegschrijven naar een bestand maar de string zelf niet. Bovendien is die pointer slechts geldig zolang het programma draait en zolang CString de string niet dealloceert.
Sorry dat ik nog zo laat hierop reageer ... programma moest vrijdag af zijn, was het uiteindelijk ook. En vrijdagochtend was er nog geen reactie, en aangezien ik al een workaround had had ik niet meer gekeken.
Ik heb als workaround de string gekopieerd naar een BYTE array met memcpy en dat weggeschreven. Dat lukte uiteindelijk wel. Het probleem was inderdaad dat de char pointer werd weggeschreven en dat ging niet goed :)

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs