使用msscript.ocx组件的ScriptControl调用VBS脚本

本文介绍了一种通过COM接口在C++中调用VBScript的方法。具体步骤包括初始化COM库、读取VBS脚本文件、创建IScriptControl对象并设置属性、执行脚本中的函数并获取返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   
在stdafx.h文件中,导入msscript.ocx
// 64位windows
#import "c:\windows\syswow64\msscript.ocx" /*raw_interfaces_only, raw_native_types,*/ no_namespace, named_guids \
    rename("Error", "ScriptError")
 
在cpp文件中,实现调用脚本。
 /**********************************************************
    Created on 2012/7/16
    ***********************************************************/
    CoInitialize(NULL);
    try
    {

        HANDLE hFile = CreateFile(
            _T("e:\\VBS脚本\\checklen.vbs"),
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL
            );

        DWORD dwFilesize = 0;
        DWORD dwActSize =0;
        dwFilesize = GetFileSize(hFile, NULL);
        BYTE *pBytes = new BYTE[dwFilesize+1];
        memset(pBytes, 0, dwFilesize+1);
        ReadFile(hFile, pBytes, dwFilesize, &dwActSize,NULL);
        CloseHandle(hFile);

        _bstr_t bstrScriptBody = (LPCTSTR)pBytes;

        _variant_t vtResult;
        int nTimeout = 30;
        IScriptControlPtr ptrScript;
        ptrScript.CreateInstance(__uuidof(ScriptControl));

        ptrScript->Timeout = 1000 * nTimeout; //超时设置
        ptrScript->PutAllowUI( VARIANT_TRUE );
        ptrScript->PutLanguage( _bstr_t(_T("VBScript")) );
        //HRESULT hr = ptrScript->ExecuteStatement(bstrScriptBody);
        
        // ptrScript->AddCode( _bstr_t("Function GetValue()\r\n MsgBox \"Hello world\" \r\n GetValue = 5 \r\n End Function\r\n"));
        ptrScript->AddCode(bstrScriptBody);
        vtResult = ptrScript->Eval(_bstr_t("GetValue"));
        // ptrScript->Run(_bstr_t("GetValue"), &vtResult);
        ptrScript.Release();
        delete[] pBytes;
        long lRet = vtResult.iVal;
        cout << "VBScript:GetValue->returnValue = " << lRet << std::endl;
        cin.get();
    }
    catch(_com_error   &e)   
    {   
        _bstr_t   bstrSource(e.Source());   
        _bstr_t   bstrDescription(e.Description());   
        std::cout<<"VBS Script Engine"<<std::endl;   
        std::cout<<"COM error occurred, source:"<<(LPCTSTR)bstrSource<<std::endl;   
        std::cout<<"Description:"<<(LPCTSTR)bstrDescription<<std::endl;   
        cin.get();
    }   

    CoUninitialize();

详见http://bbs.csdn.net/topics/390381933 另外里面有几个控件可能也用得着,你懂的。 驱动器 C 中的卷没有标签。 .\MSSCRIPT\VBE600CHS1\script 的目录 2013/08/19 11:03 <DIR> . 2013/08/19 11:03 <DIR> .. 1998/08/05 04:12 <DIR> CHINESE 1998/07/29 18:59 109,969 DISPEX.DLL 1998/07/29 18:59 1,209,970 JSCRIPT.DLL 1997/05/24 17:16 2,154 MSSCRIPT.CNT 1997/05/24 17:16 70,780 MSSCRIPT.HLP 1998/05/01 08:39 133,392 MSSCRIPT.OCX 1998/05/13 06:53 576 README.TXT 1998/07/29 18:59 989,779 VBSCRIPT.DLL 7 个文件 2,516,620 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE 的目录 1998/08/05 04:12 <DIR> . 1998/08/05 04:12 <DIR> .. 1998/08/05 04:12 <DIR> CONTROLS 1998/08/05 04:12 <DIR> CRYSREPT 1998/08/05 04:12 <DIR> MSAGENT 2013/08/19 11:03 <DIR> SCRIPT 2013/08/19 11:14 <DIR> WINLESS 0 个文件 0 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE\CONTROLS 的目录 1998/08/05 04:12 <DIR> . 1998/08/05 04:12 <DIR> .. 1997/03/19 11:40 28,160 DBGRDCHS.DLL 1997/03/19 11:40 86,016 MSCHTCHS.DLL 2 个文件 114,176 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE\CRYSREPT 的目录 1998/08/05 04:12 <DIR> . 1998/08/05 04:12 <DIR> .. 1997/03/18 19:40 21,504 CC245CHS.DLL 1 个文件 21,504 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE\MSAGENT 的目录 1998/08/05 04:12 <DIR> . 1998/08/05 04:12 <DIR> .. 1998/02/25 03:10 328,336 MSAGENT.CHS.EXE 1 个文件 328,336 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE\SCRIPT 的目录 2013/08/19 11:03 <DIR> . 2013/08/19 11:03 <DIR> .. 1998/06/15 04:46 18,104 JSCHS.DLL 1998/05/01 08:38 13,584 MSSCRCHS.DLL 1994/04/04 03:23 2,420 MSSCRIPT.CNT 1994/04/04 03:34 239,528 MSSCRIPT.HLP 1998/06/15 04:46 14,632 VBSCHS.DLL 5 个文件 288,268 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE\WINLESS 的目录 2013/08/19 11:14 <DIR> . 2013/08/19 11:14 <DIR> .. 1998/06/18 00:39 13,690 LTWTCT98.CHI 1998/06/18 00:39 19,382 LTWTCT98.CHM 2013/08/19 11:14 24,427 LTWTCT98.chw 1998/07/08 11:00 32,768 MSWLSCHS.DLL 4 个文件 90,267 字节 所列文件总数: 20 个文件 3,359,171 字节 20 个目录 984,694,784 可用字节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值