zoukankan      html  css  js  c++  java
  • VB命令行参数分隔, 类似C语言中的main(int argc, char* argv[])

    VB6.0为了提供命令行参数的支持,提供了Command()接口,于是通过 Command() 函数可以得到所有传入的参数,但是很不友好的是,VB的所有参数都被合在了一起,成为了一个字符串,当有多个参数时,要想使用就不那么方便了,于是,于是就有了下面的代码,代码我不记得是来自哪里了,如果你是文章的作者,请通知我一下.@@

    复制代码
    Option Explicit

    Private Declare Function GetCommandLineW Lib "kernel32" () As Long
    Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
    Private Declare Function CommandLineToArgvW Lib "shell32" (ByVal lpCmdLine As Long, pnNumArgs As Long) As Long
    Private Declare Function LocalFree Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

    Public Function SplitCmd(ByRef Argc As Long, ByRef Argv() As String)
    Dim nNumArgs As Long '//命令行参数个数
    Dim lpszArglist As Long '//命令行参数数组地址
    Dim lpszArg As Long '//命令行各参数地址
    Dim nArgLength As Long '//命令行各参数长度
    Dim szArg() As Byte '//命令行各参数
    Dim i As Long

    lpszArglist = CommandLineToArgvW(GetCommandLineW(), nNumArgs)
    If lpszArglist Then
    Argc = nNumArgs '//输出总个数
    ReDim Argv(nNumArgs - 1)
    CopyMemory ByVal VarPtr(lpszArg), ByVal lpszArglist, 4 '//得到argv(0)的地址

    For i = 0 To nNumArgs - 1
    nArgLength = lstrlenW(lpszArg)
    ReDim szArg(nArgLength * 2 - 1)
    CopyMemory ByVal VarPtr(szArg(0)), ByVal lpszArg, nArgLength * 2
    Argv(i) = CStr(szArg)
    lpszArg = lpszArg + nArgLength * 2 + 2
    Next

    Erase szArg
    Call LocalFree(lpszArglist)
    End If
    End Function
    复制代码


      调用方式很简单,入口函数 SplitCmd(ByRef Argc As Long, ByRef Argv() As String) ,第一个参数为传入参数:参数的总个数,第二参数是参数数组,需要说明的是,这个函数的返回值同C语言的一样,Argc中至少有一个值,那就是程序本身的路径,Argv(0) 也即为程序本身的路径,下面提供一种使用方法.

    复制代码
    Option Explicit

    Private Sub Form_Load()
    Dim Argc As Long, Argv() As String
    Dim i As Integer, szCmd As String

    Call SplitCmd(Argc, Argv())
    For i = 0 To Argc - 1
    szCmd = szCmd & i & vbTab & Argv(i) & vbCrLf
    Next
    MsgBox szCmd
    End Sub
    复制代码

    这样,将得到类似如下的结果:


    到此,一切顺利.
    女孩不哭(QQ:191035066)@2011-11-13 16:02



     
    分类: VB6.0
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    C++学习笔记(十六):友元
    C++学习笔记(十五):异常
    C++学习笔记(十四):模板
    C++学习笔记(十三):类、包和接口
    C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类
    C++学习笔记(十一):void*指针、类型转换和动态内存分配
    C++学习笔记(十):类
    quartz 实现调度任务 SchedulerManager
    Session 活化与钝化 与tomcat钝化驱动器
    web listener
  • 原文地址:https://www.cnblogs.com/huhu0013/p/4468263.html
Copyright © 2011-2022 走看看