Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DLL char *EvaluateExpression(char *Expression, char *Subroutine, char *Language)
- {
- HRESULT hr = CoInitialize(NULL);
- IScriptControlPtr pScriptControl(__uuidof(ScriptControl));
- // Create a VARIANT array of VARIANTs which hold BSTRs
- LPSAFEARRAY psa;
- SAFEARRAYBOUND rgsabound[] = { 3, 0 }; // 3 elements, 0-based
- int i;
- psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
- if (!psa)
- {
- return (char *)E_OUTOFMEMORY;
- }
- VARIANT vFlavors[3];
- for (i = 0; i < 3; i++)
- {
- VariantInit(&vFlavors[i]);
- V_VT(&vFlavors[i]) = VT_BSTR;
- }
- V_BSTR(&vFlavors[0]) = SysAllocString(OLESTR("Vanilla"));
- V_BSTR(&vFlavors[1]) = SysAllocString(OLESTR("Chocolate"));
- V_BSTR(&vFlavors[2]) = SysAllocString(OLESTR("Espresso Chip"));
- long lZero = 0;
- long lOne = 1;
- long lTwo = 2;
- // Put Elements to the SafeArray:
- 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 < 3; i++)
- {
- SysFreeString(vFlavors[i].bstrVal);
- }
- // Set up Script control properties
- _bstr_t bstrLanguage(Language);
- pScriptControl->Language = bstrLanguage;
- pScriptControl->SitehWnd = (long)GetActiveWindow();
- pScriptControl->AllowUI = TRUE;
- // Add Subroutine Code:
- _bstr_t bstrSubroutine(Subroutine);
- pScriptControl->AddCode(bstrSubroutine);
- // Evaluate Expression:
- _bstr_t bstrExpression(Expression);
- _variant_t Evaluation = pScriptControl->Eval(bstrExpression);
- // Convert VARIANT to BSTR:
- static _bstr_t Result = (_bstr_t)Evaluation;
- // Clean up:
- SafeArrayDestroy(psa);
- CoUninitialize();
- return((char *)Result);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement