Skocz do zawartości

Odczyt z pliku ini w WinApi


Rekomendowane odpowiedzi

Opublikowano

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.

Opublikowano

Jeśli do char chcesz przypisać char *, a do tego jescze przekazujesz do funkcji char zamiast oczekiwanego char * i nie widzisz tutaj błędu to życzę miłej nauki podstaw C.

Opublikowano

na const char* rzutuj

Opublikowano

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?

Opublikowano

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)

  • Administratorzy
Opublikowano

Jak dobrze kojarzę, to jeden char to jak byte - można przypisać jedną literę [0-255] ;) Bo koledzy nie podpowiadają.

Opublikowano

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

Opublikowano

Błędu nie było żadnego tylko po prostu po kliknięciu na przycisk wywołujący okienko nic się nie pokazywało ale już zaczęło działać ;)

Mam jakieś szczęście dzisiaj i udaje mi się samemu rozwiązywać problemy. Dzięki za dobre chęci!

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ę...