Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

[named pipes] Как? [D7, XP]


Страницы:   1 2 3

vegarulez ©   (2012-04-24 00:26:00) 

Всем дорбого времени суток!
Уважаемые мастреа, подскажите как сделать тоже самое что написано в статье
http://www.delphimaster.ru/articles/named_pipes/index.html
только в обычном окне на форме - чтобы при нажатии кнопки на форме происходил коннект к именованному каналу а при нажатии другой кнопки происходила отправка данных в канал к примеру из мемо1 и чтение ответа к примеру в мемо2. Прочитав пример - и запустив приложение которе прилагается к статье - понял что это то что нужно. но вот не задача - там всё сделано на диалоговом окне как я понимаю... и у меня не хватает знаний чтобы перенести это всё на форму [тут он краснеет потупив взгляд в пол], там очень много непонятных мне моментов. Прошу помочь с переносом на обычную форму.


Сергей М.   (2012-05-11 23:19:00) [21]


> но просто при тестовом сервере


А теперь, т.е. в ситуации с "вопросами", это не "просто тестовый сервер" - это   другойсервер, который вовсе не обязан отвечать на запросы текстом вообще и юникодовым текстом в частности.

И неизвестно на каком основании клиента одного сервера ты  пытаешься присобачить для работы совсем с другим сервером.


vegarulez   (2012-05-11 22:51:00) [22]

по логам по идее сервер на мой запрос должен отвечать:

<Acv version="3.04">
              <file>
                             <reqReadfile/>
              </file>
</Acv>

ну т.е.  в логах якобы он это в канал плюёт... но приходят вопросики (((


vegarulez   (2012-05-11 22:42:00) [23]

в процедуре приведённой выше
для чтения из канала

procedure ReadPipe (hPipe: PHANDLE);
var
inBuf: array[0..IN_BUF_SIZE] of WideChar;


"WideChar  Тип переменной содержащий отдельный Интернациональный символ"

но просто при тестовом сервере у меня там содержались символы сразу в нормальном виде а не в hex виде... т.е. когда в компиляторе смотрел что в переменной.


Сергей М.   (2012-05-11 22:36:00) [24]


> там же аррэй оф вайдчар


"там же" это где ?


> как мне hex содержимое именно в меме получить?


ты уже выяснил что из чебя представляет тип widechar


vegarulez   (2012-05-11 22:23:00) [25]


   s:='';
   for i:=0 to Length(inBuf)-1 do
    s:=s+inBuf[i];
   Form1.Memo2.Lines.Add(s);

в строку пытаюсь запихнуть и посомтреть  - но тоже самое получаю... в мемо... как мне hex содержимое именно в меме получить???


vegarulez   (2012-05-11 22:11:00) [26]

ну это в мемо у меня такая картина наблюдается. хотя до этого с тестовым сервером делал - там нормально всё отображалось.
а что это может быть?


Anatoly Podgoretsky   (2012-05-11 22:07:00) [27]


> vegarulez   (11.05.12 21:23) [29]

Это не utf8


vegarulez   (2012-05-11 22:05:00) [28]

пытаюсь в анси стринг запихнуть... там же аррэй оф вайдчар... но что-то он ошибку выдаёт когда делаю
for i:=0 to sizeof(inBuf)
s:=s+inBuf[i];
как правильно приведение типов данных произвести??? чтобы в стринге всё содержалось?


Сергей М.   (2012-05-11 22:01:00) [29]


> приходит в ответ на запрос


И нафих нужно любоваться этими вопросами ?
Ты гекс-дамп ответа приведи - тогда наверняка что-то проояснится ..


vegarulez   (2012-05-11 21:24:00) [30]

хотя может и не в utf8 вовсе дело.


vegarulez   (2012-05-11 21:23:00) [31]

оки. спасибо большое.

ребят теперь следующая проблема - вроде всё работает - на тестовом сервере который вместе с примером идёт.
делаю с тем приложением с которым программа и должна взаимодействовать  - приходит в ответ на запрос :

?????????•??????????????????????????????????????????????????????????????????? ???????????????

логи программы поднимаю - она в канал вроде всё правильно шлёт. подскажите что не так делаю при чтении из канала. У меня подозрением что это utf8. Как правильно перекодировать чтобы читабельно было?


Сергей М.   (2012-05-11 14:24:00) [32]


> CreateThread скорее всего не апишная в примере и стоит stdcall.


Самая что ни на есть "апишная" она)
Потому и stdcall в примере фигурирует.

А BeginThread, напротив, не"апишная", а нативная дельфийская.
И писана она с дифолтным дельфийским соглашением fastcall
Потому и stdcall для нее НЕприменим.


Inovet   (2012-05-10 09:12:00) [33]

> [26] vegarulez   (10.05.12 07:40)
> в общих чертах

вызовы функций с различными модификаторами различаются последовательностью передачи параметров и местом их расположения: стек и/или регистры. Соответсвенно формируется различный вход в функцию, обращение к параметрам в ней, и освобождение стека при выходе. Также различается скорость вызова функции. Также возможность/невозможность передать в функцию заранее неизвестное количество параметров - освобождать стек в самой функции или же в месте её вызова.


vegarulez   (2012-05-10 07:40:00) [34]

просто много чего не понятно там... слов всяких незнакомых... не совсем понятен смысл. в общих чертах описал, как я понял.


Германн   (2012-05-09 23:45:00) [35]


> vegarulez   (09.05.12 22:59) [23]
>
> а... всё... вроде почитал...


> Надо теперь только догнать почему оно не работает с этим
> вызовом.

Теперь это называется почитал?


Dennis I. Komarov   (2012-05-09 23:21:00) [36]


> vegarulez   (09.05.12 22:59) [23]

Овсянка, Сэр...


vegarulez   (2012-05-09 22:59:00) [37]

а... всё... вроде почитал...
это типа когда используются функции не апишные а из внешних библиотек... а так как CreateThread скорее всего не апишная в примере и стоит stdcall...
Gо умолчанию делфи использует fastcall.
Надо теперь только догнать почему оно не работает с этим вызовом.


vegarulez   (2012-05-09 22:43:00) [38]

аха убрал - ошибки нет...  спасибо.
что значит stdcall ???


Сергей М.   (2012-05-09 22:34:00) [39]

stdcallты от балды напмсал, когда BeginThread() объявлял ?


vegarulez   (2012-05-09 22:26:00) [40]

хм... странно сначала не обратил внимания...
но оказывается при создании потока
через

BeginThread  (nil, 0, @ReadPipe, @hPipe, 0, Dummy)

при вызове процедуры
procedure ReadPipe (hPipe: PHANDLE); stdcall;

hPipe=$DBFFDC

и ничего при этом не работает - вываливает ошибку  - неверный дескриптор.

а при

CreateThread (nil, 0, @ReadPipe, @hPipe, 0, Dummy);    

hPipe=$455C0C

и всё нормально пашет ошибка не появляется... хотя смотрю переменную прям перед вызовом функций CreateThread или BeginThread - она одна и таже (hpipe=1880).

Вопрос почему тогда в при запуски потока проверяя в нём значение приходящей переменной они разняться???? функция CreateThread или BeginThread  же передаёт в поток только адрес переменной(указатель) правильно я понимаю???


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо