Skocz do zawartości

Odczyt z pliku ini w WinApi


Arekadiusz

Rekomendowane odpowiedzi

Próbuję już dłuższy czas odczytać dane z pliku ini w WinApi C++ i mi nie wychodzi. :crying:

Najpierw odczytywałem z podaną już sekcją:

TCHAR   Bufor[80];
GetPrivateProfileString (TEXT("sekcja"), TEXT("cos"), TEXT("Błąd!"), Bufor, 80, TEXT("C:\\plik.ini"));

I to mi działało. Gdy zmieniłem jednak aby sekcje pobierał ze zmiennej to już nie zadziałało. Podejrzewam że jest zły typ zmiennej ale jaki ma być? Ja dawałem tak:

TCHAR   Bufor[80];
char sekcja;
sekcja="nazwasekcji";
GetPrivateProfileString (sekcja, TEXT("cos"), TEXT("Błąd!"), Bufor, 80, TEXT("C:\\plik.ini"));

Pokazuje się błąd: invalid conversion from 'const char*' to 'char'. Tak samo jest jak chcem zamiast ścieżki podstawić zmienną ze ścieżką.

Jak mi ktoś pomoże będę bardzo wdzięczny bo nie wiem już jaki to ma być typ.

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem sobie na razie coś takiego:

OPENFILENAME wczytaj;
char sNazwaPliku[ MAX_PATH ] = "";
ZeroMemory( & wczytaj, sizeof( wczytaj) );
wczytaj.lStructSize = sizeof( wczytaj );
wczytaj.lpstrFilter = "Plik ini(*.ini)\0*.ini\0Wszystkie pliki\0*.*\0";
wczytaj.nMaxFile = MAX_PATH;
wczytaj.lpstrFile = sNazwaPliku;
wczytaj.lpstrDefExt = "ini";
wczytaj.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if( GetOpenFileName( & wczytaj) )
{
TCHAR   Bufor[80];
const char* sNazwaPliku; 
GetPrivateProfileString (TEXT("sekcja"), TEXT("klucz"), TEXT("Błąd!"), Bufor, 80, sNazwaPliku);
SetWindowText( hPole, Bufor );
}

Po uruchomieniu tego klikam sobie na przycisk wywołujący wybór pliku, pokazuje się okienko, wybieram plik, kilkam otwórz i nie wiedzieć czemu pokazuje mi się Windowsowy błąd: "Program program1.exe przestał działać trwa wyszukiwanie rozwiązania problemu...". Co robię źle?

Odnośnik do komentarza
Udostępnij na innych stronach

filtr dzieli się jednym \0, ale kończy dwoma \0.

nazwa pliku wynikowego to także bufor, a nie wskaźnik tylko (bo do bufora tego umieszcza ta funkcja)

Odnośnik do komentarza
Udostępnij na innych stronach

Przepraszam za odświeżenie tego tematu ale mam jeszcze jeden problem z WinApi a nie chciałbym zakładać nowego tematu żeby nie zaśmiecać forum. Tamten problem udało mi się rozwiązać samemu ale teraz mam kolejny :(

Używałem najpierw DevC++ ale teraz przeszłem na CodeBlocks. W DevC++ używałem takiego polecenia do wywołania okienka dialogowego:

int dialog = DialogBox( GetModuleHandle( NULL ), MAKEINTRESOURCE( 200 ), hwnd, DlgProc );

W CodeBlocks niestety ten kod albo nie działa albo ja robię coś źle. Dodam jeszcze że to okienko dialogowe mam napisane w pliku .rc, jego ID jest przechowywane przy pomocy pliku dialog.h w którym mam linijkę:

#define ID_MOJDIALOG 200

a plik dialog.h jest dołączony do pliku main.cpp.

Pomoże ktoś? :o

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...