Autor: Piotr Grzybowski (merlin_at_narsil.asua.org.pl)
Data: Mon 05 Mar 2001 - 01:35:55 MET
On Sun, 4 Mar 2001, Przemyslaw Dobrowolski wrote:
> Od dwóch godzin męczę się z jednym problemem:
>
> w wielu miejscach używam funkcji
>
> HINI CfgOpen (PSZ szFilename)
> {
> return PrfOpenProfile (WinQueryAnchorBlock (HWND_DESKTOP),
> szFilename);
> }
>
> i funkcji:
>
> BOOL CfgClose (HINI hIniFile)
> {
> return PrfCloseProfile (hIniFile);
> }
>
> i... we wszystkich programu miejscach działa, oprócz jednego tasku (tak
> ma otwarty zainicjalizowany własny hab, bez nowego Anchor Blocka jest
> tak samo), gdzie (#define INIFILE "wcdcopy.ini" w prototypie ogólnym):
>
> hIni = CfgOpen (INIFILE);
>
> err=WinGetLastError(hab);
>
> if (err)
> {
> dprintf("BŁĄD %d, %d",HIUSHORT(err),LOUSHORT(err));
> }
>
> Zwrot jest następujący:
> BŁĄD 4, 5701
> Co oznacza:
> #define PMERR_INVALID_PARAMETER 0x1645
> #define SEVERITY_WARNING 0x0004
>
> Wszystko bym rozumiał, gdyby task o którym piszę nie działał od
> początku. Ale on działał z pewnością. Poza tym tak samo otwieram w
> wielu innych miejscach programu...
> Od razu mówię, że przeliczyłem ilości otwarć i zamyknięć w/w pliku i
> nigdzie nie jest on otwarty wiecej niz raz, co oznacza że w momencie
> kiedy go otwieram jest on na pewno _nie_ otwarty.
> Reasumując: Pomocy, bez wytłumaczenia błędu nie pójdę dalej!
pierwsze wrazenie: sprawdz czy w tym tasku, w ktorym nie dziala
WinQueryAnchorBlock(HWND_DESKTOP) zwraca cos co ma sens.
ten task jest threadem, ktorego parentem jest inny task, w ktorym
dziala - tak to jest?
jeszcze jedno pytanie: czy jak zmienisz plik(nazwe), w tym threadzie w
ktorym nie dziala to dalej nie bedzie dzialac?
bo ja widze dwie mozliwosci - albo z jakis przyczyn w tym threadzie nie
dziala WinQueryAnchorBlock, albo nie dziala PrfOpenProfile, pierwsze
moze nie dzialac z dziwnyhc przyczyn i roznych (mozesz sprawdzic czy
dziala) drugie moze nie dzialac dlatego ze plik jest jakos zablokowany
przez threada z ktorego feralnego threada otwierasz.
to sa chyba kretynskie propozycje:)
ale sprawdz koniecznie co sie wywala...
(
HINI CfgOpen (PSZ szFilename)
{
HAB habhab; ULONG prfrc=0;
habhab=WinQueryAnchorBlock(HWND_DESKTOP);
// jest tu dobrze czy nie?
// jak nie - to wiemy na czym stoimy
prfrc=PrfOpenProfile (habhab,szFilename);
// a tu jest dobrze?
// a jak dac
prfrc=PrfOpenProfile (habhab,"hejhej.ini"); //powiedzmy ze gdzies jest
//ten plik
return rc;
}
)
na razie tyle, zaraz sie glebiej zastanowie...
(wyslij mi caly kod)
pg
To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 15:30:32 MET DST