Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: sharpc.livejournal.com
 Профиль | | #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-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 31.01.05 10:09
Попробуй в ассемблере или Си, VB вполне может вызывать между CreateFile и GetLastError какие-то свои функции, которые установят код последней ошибки в 0.

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #7 Добавлено: 31.01.05 13:05
Дык в том и фишка, что в С++ работает, а в VB - раз от разу. Вот и хочу знать - в чем прикол.

Ответить

Страница: 1 |

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



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