Member 13798855 Ответов: 1

Scrip control VB и C++


у меня есть управление скриптами в vb, и там у нас есть несколько функций, таких как Run:

SCR.Timeout = 10000
ЮКЖД.Запуск "Основной"

то же самое я делаю в c+, где у нас есть scrip control object ocx, я пытался использовать его таким же образом в vb, но у меня возникла проблема.

потому что я не знаю, как передать safeparamter в функции run, так как в vb только один параметр передается:

я попробовал приведенный ниже код, он разбивается в invoke helper . пожалуйста, дайте мне знать, как мы можем это сделать ?

Что я уже пробовал:

teststt.put_Language(_T("VBScript"));

LPSAFEARRAY psa;
SAFEARRAYBOUND rgsabound[] = { 1, 0 }; // 3 elements, 0-based

int i;

psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
if (!psa)
{
    return ;
}

VARIANT vFlavors[1];
for (i = 0; i < 1; i++)
{
    VariantInit(&vFlavors[i]);
    V_VT(&vFlavors[i]) = VT_BSTR;
}

V_BSTR(&vFlavors[0]) = SysAllocString(OLESTR(""));
//V_BSTR(&vFlavors[1]) = SysAllocString(OLESTR(""));
//V_BSTR(&vFlavors[2]) = SysAllocString(OLESTR(""));

long lZero = 0;
//long lOne = 1;
//HRESULT hr;
//long lTwo = 2;

//// Put Elements to the SafeArray:
HRESULT hr = SafeArrayPutElement(psa, &lZero, &vFlavors[0]);
//hr = SafeArrayPutElement(psa, &lOne, &vFlavors[1]);
//hr = SafeArrayPutElement(psa, &lTwo, &vFlavors[2]);

//// Free Elements from the SafeArray:
for (i = 0; i < 1; i++)
{
    SysFreeString(vFlavors[i].bstrVal);
}
/*teststt.AddCode(
    _T("function Main()"));*/

teststt.put_AllowUI(TRUE);
CString lsCode = _T("Sub Main()") + CString("\r\n") + "       Dim WshShell" + "\r\n" + "       Set WshShell = CreateObject(\"Wscript.Shell\")" + "\r\n" + "       WshShell.Run \"c:\\windows\\calc.exe\"" + "\r\n" + "End Sub";// JUST FOR TEST PURPOSE

teststt.AddCode(lsCode);
teststt.put_Timeout(10000);
VARIANT l  = teststt.Run(_T("Main"), &psa);

1 Ответов

Рейтинг:
2

KarstenK

Код немного странный, но сначала установим язык и ЧЕМ сброс должен быть неправильным порядком.

Взгляните на это Пример SafeArrayCreate.

Для параметра AddCode следует использовать BSTR.