Ĺadny brzuch
Czy mi nie może się chociaż jedna pożyteczna rzecz z tym trojanem udać? :(
NOrmlanie, bez przesyłania, działa pobieranie dysków, folderów, itp. Ale gdy już chcę przesłać to zaczyna się problem po stronie klienta. Więc od początku: (istotne dla sprawy kody serwera):
TPackDrives = record drives: TStrings; end; case of bleble, pakiety: CLIENT_DRIVES: begin pack.typ := SERW_DRIVES; Athread.Connection.WriteBuffer(pack, SizeOf(pack)); // 25 pozycji napędów od: a-z for x := Ord('A') to Ord('Z') do begin DrvLetter := Chr(x)+':\'; DrvType := GetDriveType(pChar(DrvLetter)); case DrvType of 0,1 : DrvString := ''; DRIVE_REMOVABLE : DrvString := 'Wyjmowalny'; DRIVE_FIXED : DrvString := 'Stały'; DRIVE_REMOTE : DrvString := 'Sieciowy'; DRIVE_CDROM : DrvString := 'CD-ROM'; DRIVE_RAMDISK : DrvString := 'RAM dysk'; end; if DrvString <> '' then drvs.drives.add(drvLetter) end; Athread.Connection.WriteBuffer(drvs, SizeOf(drvs)); end; end;
TU pewnie wszystko jest w porządku. Teraz kod klienta.
W type jest zadeklarowany ten sam pakiet TPackDrives. Gdy przychodzi pakiet bleble informujacy ze przychodzi lista dysków (jest to zdarzenie CLientOnRecive z KSE):
SERW_DRIVES: begin drvs.drives := TStringLIst.Create; form1.TCPClient.ReadBuffer(drvs, SizeOf(drvs)); form1.cbDyski.Items := drvs.drives; end;
Niby wszystko powinno byc dobrze, w liscie combo mają się pojawić dyski. Ale tak nie jest - wyskakuje błąd AccessViolation. Dlaczego i jak sobie poradzić? :( :( :( :(
Gdyz po stronie klienta drvs.drives ma rozmiar mniejszy od tego na serwerze, przez co zle odbiera liste. Wyslij mu najpierw rozmiar drvs a potem niech taka ilosc bajtow czyta. Kumasz? ;)
Użytkownik Kajetanek edytował ten post 04 grudzień 2005, 16:35
Gdyz po stronie klienta drvs.drives ma rozmiar mniejszy od tego na serwerze, przez co zle odbiera liste. Wyslij mu najpierw rozmiar drvs a potem niech taka ilosc bajtow czyta. Kumasz? ;)
TStrings nie przejdzie, bo w rekordzie masz tak naprawde wskaznik na klase ... sprobuj przesylac jako kolejne elementy tablicy
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
NOrmlanie, bez przesyłania, działa pobieranie dysków, folderów, itp. Ale gdy już chcę przesłać to zaczyna się problem po stronie klienta. Więc od początku: (istotne dla sprawy kody serwera):
TPackDrives = record drives: TStrings; end; case of bleble, pakiety: CLIENT_DRIVES: begin pack.typ := SERW_DRIVES; Athread.Connection.WriteBuffer(pack, SizeOf(pack)); // 25 pozycji napędów od: a-z for x := Ord('A') to Ord('Z') do begin DrvLetter := Chr(x)+':\'; DrvType := GetDriveType(pChar(DrvLetter)); case DrvType of 0,1 : DrvString := ''; DRIVE_REMOVABLE : DrvString := 'Wyjmowalny'; DRIVE_FIXED : DrvString := 'Stały'; DRIVE_REMOTE : DrvString := 'Sieciowy'; DRIVE_CDROM : DrvString := 'CD-ROM'; DRIVE_RAMDISK : DrvString := 'RAM dysk'; end; if DrvString <> '' then drvs.drives.add(drvLetter) end; Athread.Connection.WriteBuffer(drvs, SizeOf(drvs)); end; end;
TU pewnie wszystko jest w porządku. Teraz kod klienta.
W type jest zadeklarowany ten sam pakiet TPackDrives. Gdy przychodzi pakiet bleble informujacy ze przychodzi lista dysków (jest to zdarzenie CLientOnRecive z KSE):
SERW_DRIVES: begin drvs.drives := TStringLIst.Create; form1.TCPClient.ReadBuffer(drvs, SizeOf(drvs)); form1.cbDyski.Items := drvs.drives; end;
Niby wszystko powinno byc dobrze, w liscie combo mają się pojawić dyski. Ale tak nie jest - wyskakuje błąd AccessViolation. Dlaczego i jak sobie poradzić? :( :( :( :(
Gdyz po stronie klienta drvs.drives ma rozmiar mniejszy od tego na serwerze, przez co zle odbiera liste. Wyslij mu najpierw rozmiar drvs a potem niech taka ilosc bajtow czyta. Kumasz? ;)
Użytkownik Kajetanek edytował ten post 04 grudzień 2005, 16:35
Gdyz po stronie klienta drvs.drives ma rozmiar mniejszy od tego na serwerze, przez co zle odbiera liste. Wyslij mu najpierw rozmiar drvs a potem niech taka ilosc bajtow czyta. Kumasz? ;)

TStrings nie przejdzie, bo w rekordzie masz tak naprawde wskaznik na klase ... sprobuj przesylac jako kolejne elementy tablicy