是否可以通过命令行将 vbscript 数组传递给 C++ exe?
Posted
技术标签:
【中文标题】是否可以通过命令行将 vbscript 数组传递给 C++ exe?【英文标题】:Is it possible to pass a vbscript array to a C++ exe by command line? 【发布时间】:2015-05-03 14:09:49 【问题描述】:我有一个 VBScript,其中有一个 2D 数组。我想从 VBScript 调用一个用 C++ 编写的 .exe。
我可以通过命令行或其他方式将此 VBScript 数组传递给 .exe 吗?如果是,如何以及如何处理它? (举个例子就好了。)
如果不可能,用二维数组,但用一维数组,也是一种解决方案。
谢谢!
更新: 只是为了澄清:我不希望一个接一个地传递数组的项目。我只想以某种方式传递整个数组一次调用 exe,并在 exe 中处理它。
更新 2: 该数组仅包含字符串,脚本的宿主环境是 Windows Script Host。不幸的是,在硬盘上创建任何文件都不是一种选择。
【问题讨论】:
有几个选项:a) 命令行参数 b) 文件 c) 共享内存 d) 管道,.... 完全取决于您的用例什么是最好的方法。 文件不是一个选项。命令行是最好的,也许共享内存也可以。但是我该怎么做呢? 对于命令行解决方案,您需要将数组转换为 ASCII,在命令行中传递,然后让 C++ 程序将其转换回实际数据。您可能会超出命令行的任何合理大小...查看WM_COPYDATA
-- here 是 SO 上的一个示例。
嗯,命令行采用字符串化参数 (int main(int argc,char* argv[])
),其中argc
告诉您有多少。这不是表示二维数组的一种很好的格式。但当然可以:您传递前 2 个参数来指定数组的维度,并且以下所有参数都是特定值。您能否详细说明,为什么 file 不是一个选项?
@kampi 我很明白你想做什么。 “我想以某种方式传递整个数组。” 那么您可能应该查找共享内存或管道。命令行将不支持您想要的,中间文件也会这样做。我没有告诉你任何关于你的事情,你应该不止一次打电话给你的.exe
。
【参考方案1】:
这有助于了解
您的数组包含什么(文本?数字?),以及
脚本的宿主环境(浏览器?Windows 脚本宿主? HTA?小部件?什么?),以及
您是否控制 C++ 代码。
问一个技术问题而忽略最相关的技术细节并不是一个好主意。
不管怎样,这里有一些 选项:
设计用于以文本方式表示数据的命令行语法。转换,使用该命令行调用 exe。请注意,命令行仅限于about 32 KB,并且命令解释器规定了 8 KB 的限制。
定义一个 C++ 自动化对象。在 C++ 接收端,您可能会使用 OLE SafeArray。从 VBScript 实例化并调用这样的对象。
或者您也可以反过来,在 VBScript 中实现一个自动化对象,打包在 WSH 文件中,然后从 C++ 调用它。
将数据存储在文件中,将文件名传递给 C++ exe。在 WSH 中,您可以轻松访问文本文件,但对浏览器主机不太确定。对于文本文件,非文本数据再次涉及到文本的转换。
使用 Windows 管道或 Windows 邮槽在运行时传递数据。
可能还有更多方法,具体取决于您在做什么。 ;-)
【讨论】:
我更新了我的问题。抱歉,我没想到数组包含的内容可能很重要。以上是关于是否可以通过命令行将 vbscript 数组传递给 C++ exe?的主要内容,如果未能解决你的问题,请参考以下文章