Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z GetSaveFileName() i wskaźnikami

Ostatnio zmodyfikowano 2011-08-18 12:42
Autor Wiadomość
xevuel
Temat założony przez niniejszego użytkownika
Problem z GetSaveFileName() i wskaźnikami
» 2011-08-16 14:09:41
Chciałem napisać funkcję zapisującą dane do pliku. Użyłem struktury OPENFILENAME:
C/C++
OPENFILENAME ofn;
ZeroMemory( & ofn, sizeof( ofn ) );
ofn.lStructSize = sizeof( OPENFILENAME );
ofn.lpstrFilter = "Wszystkie pliki\0*.*\0";

char * sFileName = NULL;
sFileName =( char * ) filename.c_str();

ofn.nMaxFile = 4096;
ofn.lpstrFile = sFileName;
ofn.lpstrDefExt = "txt";
ofn.Flags = OFN_NONETWORKBUTTON | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;
if( GetSaveFileName( & ofn ) > 0 )
     info( sFileName );

Gdzie filename jest zmienną typu string. I tutaj jest problem. ofn.lpstrFile wymaga typu char, a ja postanowiłem użyć wskaźnika, jak u góry. Kiedy wywołuję tę funkcję w odpowiedzi na dwukrotne kliknięcie użytkownika, czasami dostaję błąd (raport do Microsoftu :/). Wszystko zależy od tego, w którym miejscu kliknie user. Jak to zmienić, aby nie korzystało ze wskaźnika, jednoczesnie nie rezygnując z typu string? Zastanawiałem się czy w momencie przypisania filename nie utworzyć jeszcze jednej zmiennej w stylu
char filename_c[] = "test";
, ale może ktoś ma jakiś pomysł?
P-39246
DejaVu
» 2011-08-16 14:16:58
P-39248
xevuel
Temat założony przez niniejszego użytkownika
» 2011-08-16 14:23:52
w tym kodzie zmienna szFile jest inicjowana
szFile[ 0 ] = '\0';
, a mi chodzi o to żeby ją wczytać ze stringa filename.
P-39250
DejaVu
» 2011-08-16 15:16:09
No to przeczytaj na msdn'ie jak prawidłowo ustawić pola tej struktury...
P-39253
xevuel
Temat założony przez niniejszego użytkownika
» 2011-08-16 15:44:50
Prawidłowo mi sie ustawia, jak wpisuję za pomocą cudzysłowów i korzystam z char[]. Kiedy korzystam ze wskaźników, występuje błąd. Gdzie w tym kodzie jest błąd? I czy prawidłowo będzie, jak zrobię coś takiego:
C/C++
char filename_c[] = * filename.c_str()
?
P-39254
DejaVu
» 2011-08-16 15:52:31
C/C++
* filename.c_str() //to oznacza: odczytaj pierwszy znak
P-39256
xevuel
Temat założony przez niniejszego użytkownika
» 2011-08-16 15:53:44
aha... to jak przekonwertować ze string do char?
P-39257
DejaVu
» 2011-08-16 15:58:46
C/C++
char * xxx =( char * ) napis.c_str();
P-39258
« 1 » 2 3
  Strona 1 z 3 Następna strona