Страница: 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 - раз от разу. Вот и хочу знать - в чем прикол.