ďťż
 
[xHarbour] Problem z GetOpenfFleName ďťż
 
[xHarbour] Problem z GetOpenfFleName
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • felgiuzywane.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com