本人想用API函数实现串口操作,其中使用到createfile函数,编译时提示ByRef参数类型不符,声明createfile函数如下,是从API浏览器里复制过来的,
Private 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) As Long
使用时如下:
Com1_h = CreateFile("com1", (GENERIC_READ Or GENERIC_WRITE), 0, 0, OPEN_EXISTING, O, 0)
总是提示第四个参数不对
请高手指点,谢谢,急盼!

解决方案 »

  1.   

    获得文件handle:
    Dim hFile as long
    hFile = CreateTheFile(sYourFileName, False, True)
    If hFile = INVALID_HANDLE_VALUE Or hFile = 0& Then Exit Function
    ...
    CloseHandle hFile
    Public Function CreateUniFile(ByVal Filename As String, bOpen As Boolean, bUseUnicode As Boolean) As Long    ' Function uses APIs to read/create files with unicode support    Const GENERIC_READ As Long = &H80000000
        Const OPEN_EXISTING = &H3
        Const FILE_SHARE_READ = &H1
        Const GENERIC_WRITE As Long = &H40000000
        Const FILE_SHARE_WRITE As Long = &H2
        Const CREATE_ALWAYS As Long = 2
        Const FILE_ATTRIBUTE_ARCHIVE As Long = &H20
        Const FILE_ATTRIBUTE_HIDDEN As Long = &H2
        Const FILE_ATTRIBUTE_READONLY As Long = &H1
        Const FILE_ATTRIBUTE_SYSTEM As Long = &H4
        
        Dim Flags As Long, Access As Long
        Dim Disposition As Long, Share As Long
        
        If bOpen Then
            Access = GENERIC_READ
            Share = FILE_SHARE_READ
            Disposition = OPEN_EXISTING
            Flags = FILE_ATTRIBUTE_ARCHIVE Or FILE_ATTRIBUTE_HIDDEN Or FILE_ATTRIBUTE_NORMAL _
                    Or FILE_ATTRIBUTE_READONLY Or FILE_ATTRIBUTE_SYSTEM
        Else
            Access = GENERIC_READ Or GENERIC_WRITE
            Share = 0&
            If bUseUnicode Then
                Flags = GetFileAttributesW(StrPtr(Filename))
            Else
                Flags = GetFileAttributes(Filename)
            End If
            If Flags < 0& Then Flags = FILE_ATTRIBUTE_NORMAL
            ' CREATE_ALWAYS will delete previous file if necessary
            Disposition = CREATE_ALWAYS
        End If
        
        If bUseUnicode Then
            CreateUniFile = CreateFileW(StrPtr(Filename), Access, Share, ByVal 0&, Disposition, Flags, 0&)
        Else
            CreateUniFile = CreateFile(Filename, Access, Share, ByVal 0&, Disposition, Flags, 0&)
        End IfEnd Function
      

  2.   

    Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, byval lpSecurityAttributes As long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long把声明改成这样就行了
      

  3.   

    http://download.csdn.net/source/1339593
      

  4.   

    Veron_04提供的网址有用,已经使用该程序,谢谢。