Article View: pl.comp.lang.delphi
Article #334592Re: Port szeregowy, drukarka fiskalna znak NULL
From: Arivald
Date: Fri, 06 Jan 2012 14:00
Date: Fri, 06 Jan 2012 14:00
65 lines
3609 bytes
3609 bytes
W dniu 2012-01-06 14:36, Przemyslaw Rokicki pisze:
> On 6 Sty, 14:01, PaSkol<DearthNOSPAMpas...@op.pl> wrote:
>> W dniu 2012-01-06 13:30, Główny Użytkownik pisze:
>>
>>
>>
>>> query := pchar(s);
>>> if (hCommDev<> INVALID_HANDLE_VALUE)
>>> and (hCommDev> 0) then
>>> begin
>>> repeat
>>> StrCopy(bufferOut, query);
>>> FlushFileBuffers(hCommDev);
>>> until (writeSerialPort(hCommDev, Strlen(bufferOut))<> FALSE);
>>> end;
>>
>> Co to jest bufferOut? Bufor o ustalonej długości? Jeśli tak, to można
>> wykonać:
>> Move(s[1], bufferOut, Min(Length(s), Length(bufferOut))
>>
>> Bo StrCopy (OIDP) kopiuje wg konwencji C, czyli do pierwszego #0;
>
>
> nic to nie dało, do drukarki nie idzie cały string bo nie ma zadnego
> komunikatu.
> Zresztą problem pewnie występuje na poziomie tworzenia stringa bo nie
> wyświetla w showMessage jak pisałem wyżej.
String jest dobry, sprawdź Length(s) przed linią z "query := pchar(s);"
ShowMessage Ci go nie wyświetli, ale z innego powodu. Po prostu
ShowMessage używa TLabel do wyświetlania tekstu. A TLabel używa
WM_SETTEXT i PChar do ustawienia tekstu, niejako podążając za konwencją
C-stringów, i owo 0 wewnątrz bardzo mu przeszkadza.
Koncepcja z Move jest jak najbardziej prawidłowa, ale wywołanie Strlen()
ją niszczy. Strlen() działa na c-stringach, i liczy tylko do pierwszego
zera.
if (hCommDev <> INVALID_HANDLE_VALUE) and (hCommDev > 0) then
begin
repeat
dataLength = Min(Length(s), Length(bufferOut));
Move(s[1], bufferOut, dataLength);
FlushFileBuffers(hCommDev);
until (writeSerialPort(hCommDev, dataLength) <> FALSE);
end;
A jeszcze lepiej było by dać sobie spokój z pośrednim buforem
"bufferOut", i zapisuwać bezpośrednio ze stringa s. Ale do tego funkcja
writeSerialPort() powinna pobierać adres bufora (jak większość tego typu
funkcji), unikając zbędnego kopiowania.
Wtedy pętla wyglądała by tak:
if (hCommDev <> INVALID_HANDLE_VALUE) and (hCommDev > 0) then
begin
repeat
FlushFileBuffers(hCommDev);
until (writeSerialPort(hCommDev, pchar(s), Length(s)) <> FALSE);
end;
--
Arivald
Technical Details
Message-ID:
<je6uso$660$1@news.dialog.net.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mailReferences:
<f0fe9b14-3716-4ff0-a8b9-46d680215996@q11g2000vbq.googlegroups.com> <628157f7-940a-46dc-9570-eb77d6b8edba@m4g2000vbc.googlegroups.com> <je4rcp$4j5$1@news.dialog.net.pl> <db4d62e5-5b51-483a-be8a-1528682b9e51@q11g2000vbq.googlegroups.com> <je6rb4$4tr$1@inews.gazeta.pl> <18537ecf-ae37-4437-b084-e89a12840b0b@o14g2000vbo.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail From: Arivald <NOSPAMarivald@interia.pl> Newsgroups: pl.comp.lang.delphi Subject: Re: Port szeregowy, drukarka fiskalna znak NULL Date: Fri, 06 Jan 2012 15:00:34 +0100 Organization: Dialog Net Lines: 66 Message-ID: <je6uso$660$1@news.dialog.net.pl> References: <f0fe9b14-3716-4ff0-a8b9-46d680215996@q11g2000vbq.googlegroups.com> <628157f7-940a-46dc-9570-eb77d6b8edba@m4g2000vbc.googlegroups.com> <je4rcp$4j5$1@news.dialog.net.pl> <db4d62e5-5b51-483a-be8a-1528682b9e51@q11g2000vbq.googlegroups.com> <je6rb4$4tr$1@inews.gazeta.pl> <18537ecf-ae37-4437-b084-e89a12840b0b@o14g2000vbo.googlegroups.com> NNTP-Posting-Host: dynamic-78-8-152-25.ssp.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1325858520 6336 78.8.152.25 (6 Jan 2012 14:02:00 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Fri, 6 Jan 2012 14:02:00 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko/20111222 Thunderbird/10.0 In-Reply-To: <18537ecf-ae37-4437-b084-e89a12840b0b@o14g2000vbo.googlegroups.com> X-Stationery: 0.7.7 X-Antivirus: avast! (VPS 120106-0, 2012-01-06), Outbound message X-Antivirus-Status: Clean Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit