Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. DLL char *EvaluateExpression(char *Expression, char *Subroutine, char *Language)
  2. {
  3. HRESULT hr = CoInitialize(NULL);
  4.  
  5. IScriptControlPtr pScriptControl(__uuidof(ScriptControl));
  6.  
  7. // Create a VARIANT array of VARIANTs which hold BSTRs
  8. LPSAFEARRAY psa;
  9. SAFEARRAYBOUND rgsabound[] = { 3, 0 }; // 3 elements, 0-based
  10. int i;
  11.  
  12. psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
  13. if (!psa)
  14. {
  15. return (char *)E_OUTOFMEMORY;
  16. }
  17.  
  18. VARIANT vFlavors[3];
  19. for (i = 0; i < 3; i++)
  20. {
  21. VariantInit(&vFlavors[i]);
  22. V_VT(&vFlavors[i]) = VT_BSTR;
  23. }
  24.  
  25. V_BSTR(&vFlavors[0]) = SysAllocString(OLESTR("Vanilla"));
  26. V_BSTR(&vFlavors[1]) = SysAllocString(OLESTR("Chocolate"));
  27. V_BSTR(&vFlavors[2]) = SysAllocString(OLESTR("Espresso Chip"));
  28.  
  29. long lZero = 0;
  30. long lOne = 1;
  31. long lTwo = 2;
  32.  
  33. // Put Elements to the SafeArray:
  34. hr = SafeArrayPutElement(psa, &lZero, &vFlavors[0]);
  35. hr = SafeArrayPutElement(psa, &lOne, &vFlavors[1]);
  36. hr = SafeArrayPutElement(psa, &lTwo, &vFlavors[2]);
  37.  
  38. // Free Elements from the SafeArray:
  39. for (i = 0; i < 3; i++)
  40. {
  41. SysFreeString(vFlavors[i].bstrVal);
  42. }
  43.  
  44. // Set up Script control properties
  45. _bstr_t bstrLanguage(Language);
  46. pScriptControl->Language = bstrLanguage;
  47. pScriptControl->SitehWnd = (long)GetActiveWindow();
  48. pScriptControl->AllowUI = TRUE;
  49.  
  50. // Add Subroutine Code:
  51. _bstr_t bstrSubroutine(Subroutine);
  52. pScriptControl->AddCode(bstrSubroutine);
  53.  
  54. // Evaluate Expression:
  55. _bstr_t bstrExpression(Expression);
  56. _variant_t Evaluation = pScriptControl->Eval(bstrExpression);
  57.  
  58.  
  59. // Convert VARIANT to BSTR:
  60. static _bstr_t Result = (_bstr_t)Evaluation;
  61.  
  62.  
  63. // Clean up:
  64. SafeArrayDestroy(psa);
  65.  
  66. CoUninitialize();
  67. return((char *)Result);
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement