[xHarbour] Problem z GetOpenfFleName
Wiesław Szahun - 11-01-2007 00:08
[xHarbour] Problem z GetOpenfFleName
Witam Wywołując GetOpenFileName(What32.lib) wszystko działa Ok, do czasu, gdy odczytuje wynik. Funkcja zwraca nazwę wybranego pliku wraz ze ścieżką. Problem tkwi w tym, iż pierwsze osiem znaków nazwy są przypadkowymi wartościami (z zakresu 0-255), nawet jeśli wybiorę ten sam plik kilka razy. Poszukałem na sieci, ale nikt takiego przypadku nie opisał. Jedyne co zrobiłem (po lekturze sieci) to dodałem do struktury tagOFN (winstru.ch) ponizszych zapisów: void * pvReserved; DWORD dwReserved; DWORD FlagsEx; ale to nie pomogło. środowisko: WinXP + xHarbour9960 + BCC55 wywołanie funkcji: GetOpenFileName( ,"","Wybór pliku",{{"Wszystkie pliki","*.*"}},OFN_HIDEREADONLY+OFN_FILEMUSTEXIST, cPath,,1 )
Czy ktoś wie, co robię żle? ewentualnie co zrobić, aby funkcja zwróciła prawidłowo wskazaną nazwę.
z góry dziękuję za wszelką pomoc pozdrawiam Wiesław Szahun
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Marek Horodyski - 11-01-2007 00:08
Użytkownik "Wiesław Szahun" <wszahun@op.pl> napisał w wiadomości news:39f9.0000004f.45a4b88a@newsgate.onet.pl... > Witam > Wywołując GetOpenFileName(What32.lib) wszystko działa Ok, do czasu, gdy
Jak What32, to najwlasciwszy bedzie autor, Andrzej Woś :
Andy Wos [ andywos@unwired (dot) com (dot) au]
Pozdrawiam, Marek Horodyski
wszahun@op.pl - 12-01-2007 00:29
> > Użytkownik "Wiesław Szahun" <wszahun@op.pl> napisał w wiadomości > news:39f9.0000004f.45a4b88a@newsgate.onet.pl... > > Witam > > Wywołując GetOpenFileName(What32.lib) wszystko działa Ok, do czasu, gdy > > Jak What32, to najwlasciwszy bedzie autor, Andrzej Woś : > > Andy Wos [ andywos@unwired (dot) com (dot) au] > > Pozdrawiam, > Marek Horodyski Witam adres niestety nie aktualny (dostałem zwrotkę - błedny useer) Masz może inny namiar na Andrzeja Woś?
pozdrawiam Wiesław Szahun
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
marek - 12-01-2007 00:29
wszahun@op.pl napisał(a): > >>> Wywołując GetOpenFileName(What32.lib) wszystko działa Ok, do czasu, gdy >> Jak What32, to najwlasciwszy bedzie autor, Andrzej Woś : >> >> Andy Wos [ andywos@unwired (dot) com (dot) au] >> >> Pozdrawiam, >> Marek Horodyski > Witam > adres niestety nie aktualny (dostałem zwrotkę - błedny useer) > Masz może inny namiar na Andrzeja Woś? >
ja mam ;-)
andrew [at] capitaloffice [dot] com [dot] au http://www.andywos.ih.co.za/xmate/
-- Pozdrawiam Marek Rzeźwicki [ Przeglądaj Internet bezpiecznie - http://browsehappy.pl/ ]
Franek B - 12-01-2007 00:29
IMHO błąd występuje w funkcji _GetOpenFileName() w module ...CONTRIB\WHAT32\SOURCE\_WINCDLG.C
Jest: hb_xfree( szFileName ); hb_retc( ( char * ) ofn.lpstrFile );
Winno być: hb_retc( ( char * ) ofn.lpstrFile ); hb_xfree( szFileName );
-- Franciszek Bałaban
Wiesław Szahun - 12-01-2007 00:29
> IMHO błąd występuje w funkcji _GetOpenFileName() > * * w module ...CONTRIB\WHAT32\SOURCE\_WINCDLG.C > > Jest: > * hb_xfree( szFileName ); > * hb_retc( ( char * ) ofn.lpstrFile ); > > Winno być: > * hb_retc( ( char * ) ofn.lpstrFile ); > * hb_xfree( szFileName ); > > -- > * Franciszek Bałaban > Witam BINGO - to jest to. Teraz działa bez zarzutu
WIELKIE DZIĘKI pozdrawiam Wiesław Szahun
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Franek B - 13-01-2007 00:00
> BINGO - to jest to. Teraz działa bez zarzutu
Nie poprzestawaj na tym ! Jeżeli moje zastrzeżenia co do kolejności operacji okazały się uzasadnione i "wszystko" jest OK, to właśnie nadszedł czas, aby zająć się ... testowaniem. Musisz mieć świadomość, że błędów i potencjalnych problemów może być więcej. Przykładowe inne problemy związane z przydziałem pamięci w wymienionej funkcji:
- w przypadku niepowodzenia przydziału pamięci nastąpi komunikat i niekontrolowane wyjście z programu, to znaczy z pominięciem 'exit FUNCTION ...'. Program będzie pozbawiony możliwości wykonania czynności związanych z jego zakończeniem. Tu zalecałbym zastąpienie hb_xgrab() przez własną funkcję,
- mogą wystąpić sytuacje, gdy przydzielona pamięć nie bedzie miała szans na zwolnienie, np: rezygnacja z wyboru pliku, błąd wewnętrzny GetOpenFileName() it.p. Dlatego funkcję hb_xfree() należy wyrzucić poza 'if':
if( GetOpenFileName( &ofn ) ) { hb_stornl( ofn.nFilterIndex, 8 ); hb_storclen( szFileName, hb_parcsiz(2), 2 ) ; hb_retc( ( char * ) ofn.lpstrFile ); } else { hb_retc( "" ); }
hb_xfree( szFileName );
Aby ułatwić przeprowadzenie testów wyizoluj podejrzaną funkcję:
// TEST.PRG // bcc55; c0x32.obj; CFLAGS = -tWC -a8 ...; LINKFLAGS = -Tpe -ap ... #include 'commdlg.ch'
FUNCTION main() local cIniDir := '.\'
? GetOpenFileName(, "", "Wybór pliku",; {{"Wszystkie pliki", "*.*"}},; OFN_HIDEREADONLY + OFN_FILEMUSTEXIST, cIniDir,, 1) ? inkey(0) return NIL
FUNCTION GetOpenFileName(hWnd, cPath, cTitle, aaFilters,; nFlags, cIniDir, cDefExt, nIndex) // ... RETURN cRet
exit FUNCTION xexit() ? 'A kuku !' return NIL
#pragma BEGINDUMP #define HB_OS_WIN_32_USED #define _WIN32_WINNT 0x0400
#include <windows.h> #include "hbapi.h"
HB_FUNC (_GETOPENFILENAME) { // ... }
HB_FUNC (AND) { hb_retnl(hb_parnl(1) & hb_parnl(2)); } #pragma ENDDUMP
Pozdrawiam -- Franciszek Bałaban
Wiesław Szahun - 19-01-2007 00:11
Witam Sorry za długie milczenie, ale czasowo byłem "offline" Wracając do tematu. Masz rację jesli chodzi hb_xfree( szFileName ) powinien byc poza if. Potwierdził to też Andrzej Woś (podesłał mi kod funkcji jak wyglądała przed zmianami). Po sprawdzeniu wszystkiego zgłosze problem na xharbour
pozdrawiam Wiesław Szahun
> > BINGO - to jest to. Teraz działa bez zarzutu > > Nie poprzestawaj na tym ! > Jeżeli moje zastrzeżenia co do kolejności operacji okazały > się uzasadnione i "wszystko" jest OK, to właśnie nadszedł > czas, aby zająć się ... testowaniem. *Musisz mieć świadomość, > że błędów i potencjalnych problemów może być więcej. > Przykładowe inne problemy związane z przydziałem pamięci > w wymienionej funkcji: > > - w przypadku niepowodzenia przydziału pamięci nastąpi komunikat > *i niekontrolowane wyjście z programu, to znaczy z pominięciem > *'exit FUNCTION ...'. Program będzie pozbawiony możliwości > *wykonania czynności związanych z jego zakończeniem. > *Tu zalecałbym zastąpienie hb_xgrab() przez własną funkcję, > > - mogą wystąpić sytuacje, gdy przydzielona pamięć nie bedzie > *miała szans na zwolnienie, np: rezygnacja z wyboru pliku, > *błąd wewnętrzny GetOpenFileName() it.p. Dlatego funkcję > *hb_xfree() należy wyrzucić poza 'if': > > *if( GetOpenFileName( &ofn ) ) > *{ > * * hb_stornl( ofn.nFilterIndex, 8 ); > * * hb_storclen( szFileName, hb_parcsiz(2), 2 ) ; > * * hb_retc( ( char * ) ofn.lpstrFile ); > *} > *else > *{ > * * hb_retc( "" ); > *} > > *hb_xfree( szFileName ); > > Aby ułatwić przeprowadzenie testów wyizoluj podejrzaną funkcję: > > // TEST.PRG > // bcc55; *c0x32.obj; CFLAGS = -tWC -a8 ...; LINKFLAGS = -Tpe -ap ... > #include 'commdlg.ch' > > FUNCTION main() > local cIniDir := '.\' > > ? GetOpenFileName(, "", "Wybór pliku",; > * * * * * * * * *{{"Wszystkie pliki", "*.*"}},; > * * * * * * * * *OFN_HIDEREADONLY + OFN_FILEMUSTEXIST, cIniDir,, 1) > ? > inkey(0) > return NIL > > FUNCTION GetOpenFileName(hWnd, cPath, cTitle, aaFilters,; > * * * * * * * * * * * * nFlags, cIniDir, cDefExt, nIndex) > // ... > RETURN cRet > > exit FUNCTION xexit() > ? 'A kuku !' > return NIL > > #pragma BEGINDUMP > #define HB_OS_WIN_32_USED > #define _WIN32_WINNT * 0x0400 > > #include <windows.h> > #include "hbapi.h" > > HB_FUNC (_GETOPENFILENAME) > { > * // ... > } > > HB_FUNC (AND) > { > * hb_retnl(hb_parnl(1) & hb_parnl(2)); > } > #pragma ENDDUMP > > Pozdrawiam > -- > *Franciszek Bałaban >
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Marek Horodyski - 19-01-2007 00:11
Użytkownik "Wiesław Szahun" <wszahun@op.pl> napisał w wiadomości news:0eef.0000001e.45af26be@newsgate.onet.pl... > Witam > Sorry za długie milczenie, ale czasowo byłem "offline" > Wracając do tematu. > Masz rację jesli chodzi hb_xfree( szFileName ) powinien byc poza if. > Potwierdził to też Andrzej Woś (podesłał mi kod funkcji jak wyglądała > przed > zmianami). > Po sprawdzeniu wszystkiego zgłosze problem na xharbour > > pozdrawiam > Wiesław Szahun
Na dniach ukaze sie nowa wersja Harbour (Beta 1). Robilem test budowy dosc duzej (moze troche przesadnie, ale rozne rzeczy moga sie w praktyce zdarzyc) strony htmlowej w xHarbour i Harbour, uzywajac -gc3 w obu wersjach. W xHarbour trwalo to niecale 7 sekund a w Harbour 4 setne sekundy!. Harbour jest znacznie mniej wypasiony, ale changelog za styczen tego roku jest wiekszy jak za caly 2002 czy 2003 rok, i osiaga juz mniejwiecej 6 mcy ubieglego roku. Srednio mozna sie spodziewac conajmniej 30% lepszej wydajnosci, ale moga byc i takie przypadki jak ten powyzszy. "Oj, dzieje sie, dzieje" :)
Pozdrawiam, Marek Horodyski
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
[postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?=
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
[PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ?
[MySQL] Problem z zapisem danych w bazie danych
Problem z mysql - can't connect to MySQL/nietypowo...
zanotowane.pldoc.pisz.plpdf.pisz.plfelgiuzywane.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|