Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Создание справочника Windows API

Страница: 1 | 2 |

 

  Вопрос: Именованные каналы и API Добавлено: 09.06.06 15:44  

Автор вопроса:  Wamark | Web-сайт: kiev.ua
Ребята,подскажите ,чё за фигня!
Создал ехе-шник для работы с именованными
каналами (на API),а он в интерпретаторе работает,
в p-code работает,а если в машинных компилирую ,то при вызове последней
функции нафиг выходит сразу!
   Может встречалась фигня такая у кого?
   У меня второй раз такой случай.


'*************** (Чтение данных (клиентом)) *****************************
'проверка наличия данных
tmpResult = PeekNamedPipe(hPipe&, 0, 0, lpBytesRead&, lpTotalBytesAvail&, lpBytesLeftThisMessage)
'если нет данных ->0
If lpTotalBytesAvail = 0 Then Exit Sub


если есть - прочитать канал ( он уже открыт )
tmpResult = ReadFile(hPipe, TempStr, lpTotalBytesAvail, lpBytesRead, 0) 'Здесь-то и произошёл глюк !

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 09.06.06 16:14
И что, как объявлен второй параметр у ReadFile?

Ответить

Номер ответа: 2
Автор ответа:
 Wamark



Вопросов: 2
Ответов: 22
 Web-сайт: kiev.ua
 Профиль | | #2
Добавлено: 09.06.06 17:27

lpBuffer as Any
Я много чё пробовал,даже адреса памяти передавал,
пробовал по значению
Вот штука - в p-code компилируется нормально,
а в машинный не хочет

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 09.06.06 17:30
Ну и что мы хотим, передавая в такой параметр сроку byref?

Ответить

Номер ответа: 4
Автор ответа:
 Wamark



Вопросов: 2
Ответов: 22
 Web-сайт: kiev.ua
 Профиль | | #4
Добавлено: 09.06.06 17:40
Функция записывает данные в строку lpBuffer из очереди канала.
Да это буфер. С функцией _lRead всегда работало для файлов.

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 09.06.06 21:47
А этот TempStr где-нибудь инициализируется? Или ты пихаешь здоровый кусок по ее адресу и думаешь, что он ничего не затрет?

Ответить

Номер ответа: 6
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #6
Добавлено: 09.06.06 22:22
Может, по ходу ещё многопоточность юзаешь? У меня были такие глюки при программировании оной на vb6.

Ответить

Номер ответа: 7
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #7 Добавлено: 10.06.06 04:51
Функция записывает данные в строку lpBuffer из очереди канала.
Да это буфер. С функцией _lRead всегда работало для файлов.

Повторю вопрос.

Ты в курсе, что строки-буферы надо передавать byval, а ты передаёшь byref?

Ответить

Номер ответа: 8
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #8 Добавлено: 10.06.06 08:47
Кроме того, что ByVal, надо ещё и буфер достаточного размера передавать

dim TempStr as string

TempStr = String(lpTotalBytesAvail, vbNullChar)
tmpResult = ReadFile(hPipe, ByVal TempStr.....

Ответить

Номер ответа: 9
Автор ответа:
 Wamark



Вопросов: 2
Ответов: 22
 Web-сайт: kiev.ua
 Профиль | | #9
Добавлено: 12.06.06 17:48

Чуваки ,извините,я тут долго за компом не был.

Ответить

Номер ответа: 10
Автор ответа:
 Wamark



Вопросов: 2
Ответов: 22
 Web-сайт: kiev.ua
 Профиль | | #10
Добавлено: 12.06.06 17:52

Расскажу по порядку
TempStr Больше нигде не используется,инициализуруется в начале функции .
Буфер только если по значению пенредавать,его адрес же функция не узнает и не сможет записать туда строку?

А вот что касается функции String,сейчас попробую

Ответить

Номер ответа: 11
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #11 Добавлено: 12.06.06 18:09
Буфер только если по значению пенредавать,его адрес же функция не узнает и не сможет записать туда строку?

Учить матчасть.

Ответить

Номер ответа: 12
Автор ответа:
 Wamark



Вопросов: 2
Ответов: 22
 Web-сайт: kiev.ua
 Профиль | | #12
Добавлено: 12.06.06 18:18

Попробую. Я про API читал только книжку
 Д.Эпплмана

Ответить

Номер ответа: 13
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #13
Добавлено: 13.06.06 21:29
Это только придурочный паскаль, если ему не указать явно, что строка должна передаваться по ссылке, положит ее в стек. VB при передаче как ByVal конвертит свой BSTR (юникод, по оффсету -4 размер) в ANSI (символ - 1 байт, на конце \0) и кладет в стек ее адрес.

Ответить

Номер ответа: 14
Автор ответа:
 Wamark



Вопросов: 2
Ответов: 22
 Web-сайт: kiev.ua
 Профиль | | #14
Добавлено: 24.06.06 14:05
Да там вабще не Уникод,а уродство какое-то возвращается. Чё там за формат,как эту хрень в АНСИ конвертить?

Ответить

Номер ответа: 15
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #15
Добавлено: 25.06.06 00:26
Как выглядит это уродство?

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам