我正在尝试从 C++ ATL 控制台应用程序(非 VBS 文件,而只是嵌入在我的代码中的脚本)执行 VBScript 并从中取回字符串。
我试过这样的事情:
HRESULT hr = S_OK;
CComVariant result;
EXCEPINFO ei = { };
LPCOLESTR sCmd = L"s = \"something\"\r\n"
"WScript.Echo s\r\n";
hr = spVBScriptParse->ParseScriptText(sCmd, NULL, NULL, NULL, 0, 0, 0, &result, &ei);
std::cout << "got:" << result.cVal << std::endl;
另请参阅此问题以了解如何设置:
如果我运行它,VBScript 会抱怨不存在的“WScript”对象。
我尝试替换WScript.Echo
为MsgBox
并且代码工作正常(但当然不会返回字符串)。
我试着用这个:
LPCOLESTR sCmd = L"s = \"something\"\r\n"
"Set fso = CreateObject (\"Scripting.FileSystemObject\")\r\n"
"Set stdout = fso.GetStandardStream (1)\r\n"
"stdout.WriteLine s\r\n"
这会将我的字符串写入启动 C++ 应用程序的控制台,但不要将字符串返回给我的代码。
如何s
从脚本中获取值到我的主机进程中?
只是为了澄清:我不想将 VBS,而不是字符串保存到临时文件中。
目标是在没有磁盘访问的情况下将所有内容保存在内存中。
我知道我可以利用注册表,但我想避免提升。不知道一些内存共享是否适用于 vbscript。
另一个想法是命名管道,但我不知道如何在 c++ 和 vbscript 之间共享一个。