Thread View: pl.comp.lang.c
6 messages
6 total messages
Started by slawek
Wed, 27 Apr 2016 18:43
FileOpenDialog i nieznany błąd
Author: slawek
Date: Wed, 27 Apr 2016 18:43
Date: Wed, 27 Apr 2016 18:43
39 lines
2486 bytes
2486 bytes
Mam sobie takie program w C bez plusów. A w nim, czyste API Win32, jest
GetSaveFileName. I ten dialog zupełnie fajnie sobie działał, tj. pozwalał
wybierać pliki itd. itp. I aby było śmieszniej, to on sobie nadal zupełnie
dobrze działa na MS Windows 7 na przykład. I teraz zagadka: dlaczego
GetSaveFileName wyświetla zamiast siebie taki paskudkę-dialog z tekstem
"nieznany błąd" (po polsku) w systemie MS Windows 98SE ? Podkreślam - ten
sam program, te samo exe. Wcześniej robiło dialog jak trzeba. Teraz pokazuje
jakiś MessageBox że nie może pokazać. I jedyna zmiana jaka była ostatnimi
czasy w programie to coś zupełnie innego zupełnie gdzie indziej (wywołania
sterownika Advantech'u przez Adsapi32).
To samo robi GetOpenFileDialog. Też nie chce działać.
Jakby kogoś interesowało, to fragment programu wygląda tak jak
Petzold/Norton przykazali:
static char szFileSaveAs[MYMAXPATH] = "";
static OPENFILENAME ofn;
if ( ofn.lStructSize == 0 )
{
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwndOwner;
ofn.lpstrFilter = "Pliki danych (*.dat)\0*.dat\0"
"Wszystkie pliki (*.*)\0*.*\0";
ofn.lpstrFile = szFileSaveAs;
ofn.nMaxFile = sizeof(szFileSaveAs);
ofn.Flags = OFN_EXPLORER
|OFN_NOREADONLYRETURN
|OFN_OVERWRITEPROMPT
|OFN_PATHMUSTEXIST;
ofn.lpstrDefExt = "dat";
}
ofn.hwndOwner = hwndOwner;
if ( GetSaveFileName(&ofn) )
{
FileSave(hwndOwner);
}
Re: FileOpenDialog i nieznany błąd
Author: bartekltg
Date: Wed, 27 Apr 2016 19:03
Date: Wed, 27 Apr 2016 19:03
32 lines
1939 bytes
1939 bytes
On 27.04.2016 20:43, slawek wrote: > Mam sobie takie program w C bez plusów. A w nim, czyste API Win32, jest > GetSaveFileName. > I teraz > zagadka: dlaczego GetSaveFileName wyświetla zamiast siebie taki > paskudkę-dialog z tekstem "nieznany błąd" (po polsku) w systemie MS > Windows 98SE ? https://msdn.microsoft.com/pl-pl/library/windows/desktop/ms646928(v=vs.85).aspx Minimum supported client Windows 2000 Professional [desktop apps only] Minimum supported server Windows 2000 Server [desktop apps only] Pewne wyjaśnienie jest tu: http://edn.embarcadero.com/br/article/22880 If you are compiling for Windows 2000, the OPENFILENAME structure has an extra 3 members that Windows 98 does not expect. Look in "commdlg.h" for the actual code. > Podkreślam - ten sam program, te samo exe. Wcześniej > robiło dialog jak trzeba. Co to znaczy wcześniej? Na nowszym windowsie? No to nic dziwnego, bo tam ta funkcja już zaimplementowana. Czy działał na 98 i przestał? pzdr bartekltg
Re: FileOpenDialog i nieznany błąd
Author: slawek
Date: Wed, 27 Apr 2016 19:43
Date: Wed, 27 Apr 2016 19:43
21 lines
1871 bytes
1871 bytes
Użytkownik "bartekltg" napisał w wiadomości grup dyskusyjnych:nfr2e5$d73$1@node1.news.atman.pl... >>Podkreślam - ten sam program, te samo exe. Wcześniej >> robiło dialog jak trzeba. >Co to znaczy wcześniej? Na nowszym windowsie? >No to nic dziwnego, bo tam ta funkcja już zaimplementowana. >Czy działał na 98 i przestał? Kompilowałem to MinGW32 GCC na XP i na 7, z opcjami -m32 -march=i586 -O3 -std=gnu99 -D_WIN32_IE=0x0500 -DWINVER=0x410. Czyli powinno wprost i bez zastrzeżeń przyjąć. Działało to potem z XP, 7, 10 i oczywiście z 98. Skompilowałem kolejny raz na MS Win 7 . I przestało działać na 98. Ale nadal działa na 7. Wic w tym, że "nic nie zmieniałem" - tzn. nic w okolicy robiącej koło otwierania plików.
Re: FileOpenDialog i nieznany błąd
Author: slawek
Date: Wed, 27 Apr 2016 20:15
Date: Wed, 27 Apr 2016 20:15
29 lines
1977 bytes
1977 bytes
Użytkownik "slawek" napisał w wiadomości grup
dyskusyjnych:57211650$0$698$65785112@news.neostrada.pl...
>Kompilowałem to MinGW32 GCC na XP i na 7, z
>opcjami -m32 -march=i586 -O3 -std=gnu99 -D_WIN32_IE=0x0500 -DWINVER=0x410.
Aktualnie jest w commdlg.h
#if (_WIN32_WINNT >= 0x0500)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
#endif /* (_WIN32_WINNT >= 0x0500) */
Natomiast w windef.h
#ifndef _WIN32_WINNT
#define _WIN32_WINNT WINVER
Czyli WINVER powinno wymusić odpowiedni wariant struktury OPENFILENAME i co
tam trzeba.
Nota bene, domyślnie jest w windef.h po prostu WINVER=0x400
Tymczasem i GetOpenFileName, i GetSaveFileName, upierają się aby, w czasie
wykonania, zamiast tego co trzeba, robić coś jakby MessageBox z napisem
"niespodziewany błąd".
Re: FileOpenDialog i nieznany błąd
Author: Wiktor S.
Date: Tue, 03 May 2016 17:40
Date: Tue, 03 May 2016 17:40
16 lines
1389 bytes
1389 bytes
> Natomiast w windef.h > > #ifndef _WIN32_WINNT > #define _WIN32_WINNT WINVER > > Czyli WINVER powinno wymusić odpowiedni wariant struktury > OPENFILENAME i co tam trzeba. > > Nota bene, domyślnie jest w windef.h po prostu WINVER=0x400 Nie licz na to "domyślnie", bo gdzieś indziej coś może ci definiować. Zdefiniuj jawnie. -- Wiktor S.
Re: FileOpenDialog i nieznany błąd
Author: slawek
Date: Wed, 04 May 2016 04:44
Date: Wed, 04 May 2016 04:44
11 lines
1524 bytes
1524 bytes
On Tue, 3 May 2016 19:40:29 +0200, "Wiktor S." <wswiktorSP@Mpoczta.fm> wrote: > Nie licz na to "domyślnie", bo gdzieś indziej coś może ci definiować. > Zdefiniuj jawnie. Ale, gdybyś uważnie czytał, to zauważył byś że było jawnie. Problem chyba się sam rozwiązał. Wygląda na to że GCC 64-bitowe ma jakieś problemy ze zrobieniem dobrze 32-bitowego programu. GCC 32-bitowe jest ok.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads