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
 
 
 
 
 
 
 
 
 

VB命令行参数分隔, 类似C语言中的main(int argc, char* argv[])的更多相关文章

  1. 解决 main(int argc, char** argv)这种情况下通过命令行传参,改为main函数里面给定参数。

    本文是原创文章,未经允许,请勿转载. 原来程序中是通过运行exe,然后加上参数,然程序运行起来的.也就是main(int argc, char** argv)这里是通过argv参数是从命令行 传过来的 ...

  2. C++中 int main(int argc, char **argv) 命令行传递参数

    C++中,比较常见的是不带参数的主函数int main(),如果使用命令行执行程序,主函数也可以接收预先输入的参数,形式如下. int main(int argc,char **argv) argc: ...

  3. [笔记] 命令行参数 int main(int argc,char *argv[])

    int main(int argc,char *argv[]) // argument count 变量个数 argument values 变量值 C程序的main函数有两个形参* argc:整数, ...

  4. int main(int argc,char* argv[])参数详解

    argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: int main(int argc, char* argv[] ...

  5. main()函数的输入参数 main(int argc, char** argv)

    一般简单的C++程序,main函数的写法都是 int main() {... ; return 0;},但是,如果在运行程序时需要有参数输入,可以是使用将主函数写成int main(int argv, ...

  6. [c language] getopt 其参数optind 及其main(int argc, char **argv) 参数解释

    getopt被用来解析命令行选项参数.#include <unistd.h> extern char *optarg; //选项的参数指针extern int optind, //下一次调 ...

  7. main(int argc, char **argv)参数解读

    main(int argc, char **argv)参数解读 编译生成了test.exe ,然后在控制台下相应的目录下输入:test  1  2  3 4 argc就是一个输入了多少个参数,包括te ...

  8. VS添加命令行参数main(int argc, char** argv)

  9. int main(int argc,char *argv[])参数的应用

    #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/sta ...

随机推荐

  1. Eclipse 相同变量背景高亮显示设置(Occurrences)

    为了你们查看设置的简便,本次书写重点用图片说明.

  2. Mysql 会导致锁表的语法

    最近再找一些Mysql锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我,方便 ...

  3. jenkins错误413 Request Entity Too Large<

    jenkins-nginx--sonar1/sonar2

  4. javascript刷新父页面方法总结

    用iframe.弹出子页面刷新父页面iframe <script language=JavaScript> parent.location.reload(); </script> ...

  5. PHP实现双向链表、栈

    前期写过一个PHP实现单向链表.实现排序单向链表的一篇文章,传送门:http://www.cnblogs.com/yydcdut/p/3777760.html.双向链表写过了,再拿出来提一提:http ...

  6. Libsvm和Liblinear的使用经验谈

    原文:http://blog.sina.com.cn/s/blog_5b29caf7010127vh.html Libsvm和Liblinear都是国立台湾大学的Chih-Jen Lin博士开发的,L ...

  7. 同步网络时间到linux服务器(先修改时区再进行同步网络时间)

    查看时区:date -R 修改整个系统时区: rm -f /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 网 ...

  8. 软件开发工具GCC

    重点掌握以下知识点: 了解gcc编译器的下载和安装方法,包括嵌入式交叉编译平台搭建的方法 重点掌握gcc的基本编译流程和编译方法 重点掌握gcc编译的高级操作及选项 了解gcc编译器性能分析工具,包括 ...

  9. JDBC-DAO经典模式 实现对数据库的增、删、改、查

    JDBC(Java Data Base Connection)的作用是连接数据库 先看下jdbc连接SQLServer数据库的简单例子 代码实现(FirstJDBC): package com.jdb ...

  10. Android中如何判断升级用户

    借助PackageInfo 转自:http://blog.saymagic.cn/2016/05/31/howto-judge-update-user.html 由于上面两种自定义的逻辑都不能很好的满 ...