Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Опять C++ и API
     
    
Добавлено: 26.01.05 10:47
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
    
 LamerOnLine | ICQ: 334781088 
      
       
  
Такая вот проблема работы с портами:
 
    
Option Explicit
Private Type SECURITY_ATTRIBUTES
   nLength As Long
   lpSecurityDescriptor As Long
   bInheritHandle As Long
End Type
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1&
Private Const OPEN_EXISTING = 3&
Private Const FILE_ATTRIBUTE_NORMAL = &H80&
Private Const INVALID_HANDLE_VALUE = -1&
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileW" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Form_Load()
Dim SA As SECURITY_ATTRIBUTES
Dim Handle As Long
Handle = CreateFile("COM1", GENERIC_WRITE, FILE_SHARE_READ, 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0&)
MsgBox Handle
CloseHandle Handle
End Sub
В C++ это выглядит как
HANDLE hCOM=CreateFile("COM1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
Сама функция:
HANDLE CreateFile(
  LPCTSTR lpFileName,                         // file name
  DWORD dwDesiredAccess,                      // access mode
  DWORD dwShareMode,                          // share mode
  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD
  DWORD dwCreationDisposition,                // how to create
  DWORD dwFlagsAndAttributes,                 // file attributes
  HANDLE hTemplateFile                        // handle to template file
);
Проблема - компилятор снова выдает Bad Dll Convention. Отчего?
Блин, из Оперы набирать - как из танка...
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 7
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа:
 sne
![]()
![]()
![]()
![]()
![]()
Разработчик Offline Client
ICQ: 233286456 
Вопросов: 34
Ответов: 5445
      
 Web-сайт:  
 Профиль |  | #1
      
Добавлено:  26.01.05 10:53
       
    
       
  
ByVal dwCreationDisposition - следи за типами в декларациях, Вариант типа точно нигде нет...
 
    
CreateFileW - вообще несоветовал бы использовать, чем тебя Ansi версия не устраивает ?
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа:
 LamerOnLine
![]()
![]()
![]()
ICQ: 334781088 
Вопросов: 108
Ответов: 2822
      
 Профиль |  | #2
       
Добавлено:  26.01.05 10:55
       
    
       
  
Тьфу, точно! Вот лох! sne, спасибо  
    
)
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа:
 LamerOnLine
![]()
![]()
![]()
ICQ: 334781088 
Вопросов: 108
Ответов: 2822
      
 Профиль |  | #3
       
Добавлено:  26.01.05 10:59
       
    
       
  
Теперь другая странность. Для COM2 хендл дает исправно, а COM1 в упор не видит...
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа:
 Sharp
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Лидер форума
ICQ: 216865379 
Вопросов: 106
Ответов: 9979
      
 Web-сайт:  
 Профиль |  | #4
      
Добавлено:  30.01.05 07:34
       
    
       
  
Может, у тебя на нем что-нибудь висит? Что выдает GetLastError?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа:
 LamerOnLine
![]()
![]()
![]()
ICQ: 334781088 
Вопросов: 108
Ответов: 2822
      
 Профиль |  | #5
       
Добавлено:  31.01.05 08:27
       
    
       
  
Во, теперь и COM2 и LPT перестали хэндл давать. GetLastError возвращает 0. Сама фунцкия CreateFile возвращает INVALID_HANDLE_VALUE.
 
    
If the file does not exist before the call, GetLastError returns zero. 
If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError. 
Вообще странно, ищу ошибку.
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа:
 Sharp
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Лидер форума
ICQ: 216865379 
Вопросов: 106
Ответов: 9979
      
 Web-сайт:  
 Профиль |  | #6
      
Добавлено:  31.01.05 10:09
       
    
       
  
Попробуй в ассемблере или Си, VB вполне может вызывать между CreateFile и GetLastError какие-то свои функции, которые установят код последней ошибки в 0. 
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа:
 LamerOnLine
![]()
![]()
![]()
ICQ: 334781088 
Вопросов: 108
Ответов: 2822
      
 Профиль |  | #7
       
Добавлено:  31.01.05 13:05
       
    
       
  
Дык в том и фишка, что в С++ работает, а в VB - раз от разу. Вот и хочу знать - в чем прикол.