COM порт и CreateFile

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

COM порт и CreateFile

Сообщение Zer » 06.06.2006 (Вт) 14:57

Есть проблемка. Пытаюсь юзать для работы с COM не MSCOMM, а API.
Модуль:
Код: Выделить всё
'**********************************
'**  Type Definitions:

Public Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type

'**********************************
'**  Function Declarations:

Public Declare Function CreateFile& Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long)
Public Declare Function CloseHandle& Lib "kernel32" (ByVal hObject As Long)
Public Declare Function PurgeComm& Lib "kernel32" (ByVal hFile As Long, ByVal dwFlags As Long)
+константы


Вызов:
Код: Выделить всё
ComPortA = "COM1"
Result = CreateFile(ComPortA, GENERIC_READ Or GENERIC_WRITE, 0, Null, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If Result = INVALID_HANDLE_VALUE Then MsgBox "Error!!!"

Рыгается на Null в SECURITY_ATTRIBUTES. В чём бяка - не пойму... :(
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.06.2006 (Вт) 15:03

Ввиду сути вопроса, переношу.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.06.2006 (Вт) 15:04

Переобъяви lpSecurityAttributes как Long и передавай 0.
И запомни, что Null -- это такой Variant, который не имеет ничего общего с API.
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: COM порт и CreateFile

Сообщение Viper » 06.06.2006 (Вт) 15:04

Zer писал(а):
Код: Выделить всё
Public Declare Function CreateFile& Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long)

ComPortA = "COM1"
Result = CreateFile(ComPortA, GENERIC_READ Or GENERIC_WRITE, 0, Null, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If Result = INVALID_HANDLE_VALUE Then MsgBox "Error!!!"

(


замени декларе на

Код: Выделить всё
Public Declare Function CreateFile& Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long)


и вызывай ее себе на здоровье, передавая вместо lpSecurityAttributes ByVal 0&
Весь мир матрица, а мы в нем потоки байтов!

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 06.06.2006 (Вт) 15:06

Спасибо. Фаршманулся нечаянно.:oops:
Но в Эпплмане именно так и объявляется. Тоже как-то странно...
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.06.2006 (Вт) 15:49

А ещё Аппельман вызывает GetLastError из kernel32, я сам видел!
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.06.2006 (Вт) 15:56

Угу. Я Эпплмана читаю только ради концепций.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 128

    TopList  
cron