C++에서 스크립트 컨트롤의 Run() 메서드 호출
이 문서에서는 Microsoft 스크립트 컨트롤을 사용하여 함수 또는 서브루틴을 호출하는 방법을 보여 줍니다.
원래 제품 버전: Visual C++
원래 KB 번호: 229669
요약
스크립트 컨트롤에는 네 가지 메서드가 있습니다. 그 Run()
중 하나는 서브루틴 또는 함수를 실행하는 입니다. 이 메서드를 호출하기 전에 스크립트의 언어를 지정하고, 를 설정하고 AllowUI
, 스크립트 컨트롤에 다음 코드를 추가합니다.
샘플 코드
#include <stdio.h>
#import "C:\winnt\system32\msscript.ocx" // msscript.ocx
using namespace MSScriptControl;
int main(void)
{
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 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
pScriptControl->Language = "JScript";
pScriptControl->AllowUI = TRUE;
pScriptControl->AddCode(
"function MyStringFunction(Argu1,Argu2,Argu3)\
{ return \"hi there\" ;}" );
// Call MyStringFunction with the two args:
_variant_t outpar = pScriptControl->Run("MyStringFunction", &psa);
// Convert VARIANT to C string:
_bstr_t bstrReturn = (_bstr_t)outpar;
char *pResult = (char *)bstrReturn;
// Print the result out:
printf("func=%s\n",pResult);
// Clean up:
SafeArrayDestroy(psa);
CoUninitialize();
return(0);
}
참조
피드백
https://aka.ms/ContentUserFeedback을 참조하세요.
출시 예정: 2024년 내내 콘텐츠 피드백 메커니즘인 GitHub 문제를 단계적으로 폐지하고 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은다음에 대한 사용자 의견 제출 및 보기