Страница: 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-сайт:  
 Профиль |  | #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-сайт:  
 Профиль |  | #4
      
Добавлено:  09.06.06 17:40
       
    
       
  
Функция записывает данные в строку lpBuffer из очереди канала.
 
    
Да это буфер. С функцией _lRead всегда работало для файлов.
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа:
 Sharp
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Лидер форума
ICQ: 216865379 
Вопросов: 106
Ответов: 9979
      
 Web-сайт:  
 Профиль |  | #5
      
Добавлено:  09.06.06 21:47
       
    
       
  
А этот TempStr где-нибудь инициализируется? Или ты пихаешь здоровый кусок по ее адресу и думаешь, что он ничего не затрет?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа:
 Neco
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 247906854 
Вопросов: 133
Ответов: 882
      
 Web-сайт:  
 Профиль |  | #6
      
Добавлено:  09.06.06 22:22
       
    
       
  
Может, по ходу ещё многопоточность юзаешь? У меня были такие глюки при программировании оной на vb6.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа:
 GSerg
![]()
![]()
Вопросов: 0
Ответов: 1876
      
 Профиль |  | #7
       
Добавлено:  10.06.06 04:51
       
    
       
  
 
    
Да это буфер. С функцией _lRead всегда работало для файлов.
Повторю вопрос.
Ты в курсе, что строки-буферы надо передавать byval, а ты передаёшь byref?
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа:
 HOOLIGAN
![]()
Вопросов: 0
Ответов: 1066
      
 Профиль |  | #8
       
Добавлено:  10.06.06 08:47
       
    
       
  
Кроме того, что ByVal, надо ещё и буфер достаточного размера передавать
 
    
TempStr = String(lpTotalBytesAvail, vbNullChar)
tmpResult = ReadFile(hPipe, ByVal TempStr.....
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа:
 Wamark
![]()
![]()
Вопросов: 2
Ответов: 22
      
 Web-сайт:  
 Профиль |  | #9
      
Добавлено:  12.06.06 17:48
       
    
       
  
 
    
Чуваки ,извините,я тут долго за компом не был.
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа:
 Wamark
![]()
![]()
Вопросов: 2
Ответов: 22
      
 Web-сайт:  
 Профиль |  | #10
      
Добавлено:  12.06.06 17:52
       
    
       
  
 
    
Расскажу по порядку
TempStr Больше нигде не используется,инициализуруется в начале функции .
Буфер только если по значению пенредавать,его адрес же функция не узнает и не сможет записать туда строку? 
А вот что касается функции String,сейчас попробую
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа:
 GSerg
![]()
![]()
Вопросов: 0
Ответов: 1876
      
 Профиль |  | #11
       
Добавлено:  12.06.06 18:09
       
    
       
  
 
    
Учить матчасть.
		
	  
			 
	
		 
    
       
    
Номер ответа: 12 
      
Автор ответа:
 Wamark
![]()
![]()
Вопросов: 2
Ответов: 22
      
 Web-сайт:  
 Профиль |  | #12
      
Добавлено:  12.06.06 18:18
       
    
       
  
 
    
Попробую. Я про API  читал только книжку
 Д.Эпплмана
		
	  
			 
	
		 
    
       
    
Номер ответа: 13 
      
Автор ответа:
 Sharp
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Лидер форума
ICQ: 216865379 
Вопросов: 106
Ответов: 9979
      
 Web-сайт:  
 Профиль |  | #13
      
Добавлено:  13.06.06 21:29
       
    
       
  
Это только придурочный паскаль, если ему не указать явно, что строка должна передаваться по ссылке, положит ее в стек. VB при передаче как ByVal конвертит свой BSTR (юникод, по оффсету -4 размер) в ANSI (символ - 1 байт, на конце \0) и кладет в стек ее адрес.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 14 
      
Автор ответа:
 Wamark
![]()
![]()
Вопросов: 2
Ответов: 22
      
 Web-сайт:  
 Профиль |  | #14
      
Добавлено:  24.06.06 14:05
       
    
       
  
Да там вабще не Уникод,а уродство какое-то возвращается. Чё там за формат,как эту хрень в АНСИ конвертить?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 15 
      
Автор ответа:
 Sharp
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Лидер форума
ICQ: 216865379 
Вопросов: 106
Ответов: 9979
      
 Web-сайт:  
 Профиль |  | #15
      
Добавлено:  25.06.06 00:26
       
    
       
  
Как выглядит это уродство?