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
VB命令行参数分隔, 类似C语言中的main(int argc, char* argv[])的更多相关文章
- 解决 main(int argc, char** argv)这种情况下通过命令行传参,改为main函数里面给定参数。
本文是原创文章,未经允许,请勿转载. 原来程序中是通过运行exe,然后加上参数,然程序运行起来的.也就是main(int argc, char** argv)这里是通过argv参数是从命令行 传过来的 ...
- C++中 int main(int argc, char **argv) 命令行传递参数
C++中,比较常见的是不带参数的主函数int main(),如果使用命令行执行程序,主函数也可以接收预先输入的参数,形式如下. int main(int argc,char **argv) argc: ...
- [笔记] 命令行参数 int main(int argc,char *argv[])
int main(int argc,char *argv[]) // argument count 变量个数 argument values 变量值 C程序的main函数有两个形参* argc:整数, ...
- int main(int argc,char* argv[])参数详解
argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: int main(int argc, char* argv[] ...
- main()函数的输入参数 main(int argc, char** argv)
一般简单的C++程序,main函数的写法都是 int main() {... ; return 0;},但是,如果在运行程序时需要有参数输入,可以是使用将主函数写成int main(int argv, ...
- [c language] getopt 其参数optind 及其main(int argc, char **argv) 参数解释
getopt被用来解析命令行选项参数.#include <unistd.h> extern char *optarg; //选项的参数指针extern int optind, //下一次调 ...
- main(int argc, char **argv)参数解读
main(int argc, char **argv)参数解读 编译生成了test.exe ,然后在控制台下相应的目录下输入:test 1 2 3 4 argc就是一个输入了多少个参数,包括te ...
- VS添加命令行参数main(int argc, char** argv)
- int main(int argc,char *argv[])参数的应用
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/sta ...
随机推荐
- Advanced Features of Delphi DLLs
http://www.delphisources.ru/pages/faq/master-delphi-7/content/LiB0104.html Beside this introductory ...
- linkhashmap实现原理
HashMap和双向链表合二为一即是LinkedHashMap.所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的HashMap. ...
- 一些值得学习的Unity教程 (很实用的包括源码)
***********************项目源码******************************** 1. 降临 2. 沉睡缤纷乐 3. 千炮捕鱼 4. Photon官方FSP示例 ...
- FAQ:枚举和常规的值,到底哪种更符合程序使用?
问: 枚举和常规的值,到底哪种更符合程序使用? 答: 肯定是根据不同的场景,做出不同的选择. 如果是不同的值需要不同的逻辑,肯定是枚举好一些.如果只是表示某个取值范围且这个范围会动态变化,用常规的值 ...
- 【转载】Redis Sentinel 高可用服务架构搭建
作者:田园里的蟋蟀 出处:http://www.cnblogs.com/xishuai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 阅读 ...
- OpenCV Shi-Tomasi角点检测子
Shi-Tomasi角点检测子 目标 在这个教程中我们将涉及: 使用函数 goodFeaturesToTrack 来调用Shi-Tomasi方法检测角点. 理论 代码 这个教程的代码如下所示.源代码还 ...
- [Android开发常见问题-16] FragmentActivity cannot be resolve to a type
只需要将android-support-v4.jar放到自己的libs目录下即可. 如果ADT版本比较低,则放到libs之后还需要按照下图导入这个jar包.
- 高性能CSS
避免使用@import 有两种方式加载样式文件,一种是link元素,另一种是CSS 2.1加入@import.而在外部的CSS文件中使用@import会使得页面在加载时增加额外的延迟.虽然规则允许在样 ...
- TextView文字横向自己主动滚动
效果截图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjI4Nj ...
- 浅析GitLab Flow的十一个规则
使用 Git 版本控制,是对使用它之前的所有版本控制方式的一种改进.然而,很多组织最终以太过混乱或过于复杂的流程来结束.这个问题对于刚从其他版本控制系统转过来的组织来说特别突出. 在本文中我们会列出 ...