MS Script Control in MFC
오전 1:28 2000/10/04 조경민 bro@shinbiro.com
=-===========================
MSVB Script Constrol 객체를 만들기
먼저 프로젝트에서 Project/Add Project/Controls and Component에서
Registered ActiveX Controls 부분에서 Script Control을 얻어온다.
1. ActiveX 폼 붙이기 식
다이얼로그 폼에다가 MSScript를 하나 붙인다. 그리고 Property에서
Language 를 VBScript로 준다.
그후 클래스 위자드에서 MSScript를 이용해 m_scptBro라는 맴버자료를
만든후 버튼을 누르면 다음 코드를 실행하게 한다.
#include <comdef.h>
#include <afxpriv.h>
#include "ScriptError.h"
를 한후
m_scptBro.AddCode( " \r\n\
Function fnMethod ( i ) \r\n\
a = cstr(i+1) \r\n\
a = a + \"날짜도\"+ cstr(date) \r\n\
fnMethod = a \r\n\
End Function \
" );
_variant_t vsRet = m_scptBro.Eval("fnMethod(100)");
_bstr_t bsRet(vsRet);
//char* pszRet = bsRet.Copy();
MessageBox( (LPCTSTR)bsRet );
2. 코드로 스크립트 객체 생성
CScriptControl sc;
if( sc.Create("aa", WS_CHILD, CRect(0,0,0,0), this, 6501 ) )
{
sc.SetLanguage(NULL);
sc.SetLanguage("VBScript");
MessageBox( sc.GetLanguage() );
sc.AddCode( " \r\n\
Functio 먼저 프로젝트에서 n fnMethod ( i ) \r\n\
a = cstr(i+1) \r\n\
a = a + \"날짜도\"+ cstr(date) \r\n\
fnMethod = a \r\n\
End Function \
" );
//_variant_t vsRet = m_scptBro.Eval("(\"xx\" = \"yy\")");
_variant_t vsRet = sc.Eval("fnMethod(100)");
_bstr_t bsRet(vsRet);
//char* pszRet = bsRet.Copy();
MessageBox( (LPCTSTR)bsRet );
}`
3. ocx 수준 COM 모듈로 불러 쓰기
// 다음은 MSVBScript Control 엑티브 엑스를 추가하지 않고 하는 방법이다.
// ocx위치를 탐색기로 찾아내서 import 패스를 넣으면 된다.
#import "C:\Program Files\Microsoft Script Control\msscript.ocx"
또는
#import "C:\\winnt\\system32\\msscript.ocx"
using namespace MSScriptControl;
한후
IScriptControlPtr spScriptCtl(__uuidof(ScriptControl));
하면 된다. 즉 아래처럼
try // Make sure exception handling is turned on.
{
_bstr_t bstrLanguage(L"VBScript");
_bstr_t bstrCode(L"MsgBox \"Hello World\"");
// Create the Script Control, initialize Language, and
// add code for processing.
IScriptControlPtr spScriptCtl(__uuidof(ScriptControl));
spScriptCtl->put_Language(bstrLanguage);
spScriptCtl->AddCode(bstrCode);
}
catch(_com_error e)
{
TRACE(_T("Error (%08x) in %s: %s\n"), e.Error(),
e.Source(), e.Description());
}
Run으로 실행한후 결과 받기
=============================================================
IScriptControlPtr m_pScript; 라면 ...
m_pScript.CreateInstance(__uuidof(ScriptControl));
m_pScript.AddCode(코드);
:
SAFEARRAY* sa; // 메소드의 인자가 들어갈 배열
long ix[1]; // 1차원 배열
_bstr_t bsParam(pszPram);
_variant_t vsParam(bsParam); // _variant_t에 넣음
// 1칸짜리 배열을 만든다.
sa = SafeArrayCreateVector(VT_VARIANT, 0, 1);
ix[0] = 0; // 첫째 인자
// 배열에 값을 넣는다.
SafeArrayPutElement(sa, ix, &vsMessage);
_variant_t vsOut = m_pScript->Run(_bstr_t(L"Main"), &sa);
TRACE("%s",(LPCTSTR)(_bstr_t)vsOut);
코드는
Function Main(sIn)
sIn ="스크립트"+cstr(2+4)
End Function
그러면 스크립트6 라고 출력된다.
트러블 슈팅
------------------------------------------------------------------
1. MFC시 CScriptControl 객체를 만들어서 할경우 언어를 설정하지
않았다고 나는 경우
sc.SetLanguage(NULL);
sc.SetLanguage("VBScript");
이렇게 먼저 설정을 NULL로 한다음 하면 된다.
오전 1:28 2000/10/04 조경민 bro@shinbiro.com
=-===========================
MSVB Script Constrol 객체를 만들기
먼저 프로젝트에서 Project/Add Project/Controls and Component에서
Registered ActiveX Controls 부분에서 Script Control을 얻어온다.
1. ActiveX 폼 붙이기 식
다이얼로그 폼에다가 MSScript를 하나 붙인다. 그리고 Property에서
Language 를 VBScript로 준다.
그후 클래스 위자드에서 MSScript를 이용해 m_scptBro라는 맴버자료를
만든후 버튼을 누르면 다음 코드를 실행하게 한다.
#include <comdef.h>
#include <afxpriv.h>
#include "ScriptError.h"
를 한후
m_scptBro.AddCode( " \r\n\
Function fnMethod ( i ) \r\n\
a = cstr(i+1) \r\n\
a = a + \"날짜도\"+ cstr(date) \r\n\
fnMethod = a \r\n\
End Function \
" );
_variant_t vsRet = m_scptBro.Eval("fnMethod(100)");
_bstr_t bsRet(vsRet);
//char* pszRet = bsRet.Copy();
MessageBox( (LPCTSTR)bsRet );
2. 코드로 스크립트 객체 생성
CScriptControl sc;
if( sc.Create("aa", WS_CHILD, CRect(0,0,0,0), this, 6501 ) )
{
sc.SetLanguage(NULL);
sc.SetLanguage("VBScript");
MessageBox( sc.GetLanguage() );
sc.AddCode( " \r\n\
Functio 먼저 프로젝트에서 n fnMethod ( i ) \r\n\
a = cstr(i+1) \r\n\
a = a + \"날짜도\"+ cstr(date) \r\n\
fnMethod = a \r\n\
End Function \
" );
//_variant_t vsRet = m_scptBro.Eval("(\"xx\" = \"yy\")");
_variant_t vsRet = sc.Eval("fnMethod(100)");
_bstr_t bsRet(vsRet);
//char* pszRet = bsRet.Copy();
MessageBox( (LPCTSTR)bsRet );
}`
3. ocx 수준 COM 모듈로 불러 쓰기
// 다음은 MSVBScript Control 엑티브 엑스를 추가하지 않고 하는 방법이다.
// ocx위치를 탐색기로 찾아내서 import 패스를 넣으면 된다.
#import "C:\Program Files\Microsoft Script Control\msscript.ocx"
또는
#import "C:\\winnt\\system32\\msscript.ocx"
using namespace MSScriptControl;
한후
IScriptControlPtr spScriptCtl(__uuidof(ScriptControl));
하면 된다. 즉 아래처럼
try // Make sure exception handling is turned on.
{
_bstr_t bstrLanguage(L"VBScript");
_bstr_t bstrCode(L"MsgBox \"Hello World\"");
// Create the Script Control, initialize Language, and
// add code for processing.
IScriptControlPtr spScriptCtl(__uuidof(ScriptControl));
spScriptCtl->put_Language(bstrLanguage);
spScriptCtl->AddCode(bstrCode);
}
catch(_com_error e)
{
TRACE(_T("Error (%08x) in %s: %s\n"), e.Error(),
e.Source(), e.Description());
}
Run으로 실행한후 결과 받기
=============================================================
IScriptControlPtr m_pScript; 라면 ...
m_pScript.CreateInstance(__uuidof(ScriptControl));
m_pScript.AddCode(코드);
:
SAFEARRAY* sa; // 메소드의 인자가 들어갈 배열
long ix[1]; // 1차원 배열
_bstr_t bsParam(pszPram);
_variant_t vsParam(bsParam); // _variant_t에 넣음
// 1칸짜리 배열을 만든다.
sa = SafeArrayCreateVector(VT_VARIANT, 0, 1);
ix[0] = 0; // 첫째 인자
// 배열에 값을 넣는다.
SafeArrayPutElement(sa, ix, &vsMessage);
_variant_t vsOut = m_pScript->Run(_bstr_t(L"Main"), &sa);
TRACE("%s",(LPCTSTR)(_bstr_t)vsOut);
코드는
Function Main(sIn)
sIn ="스크립트"+cstr(2+4)
End Function
그러면 스크립트6 라고 출력된다.
트러블 슈팅
------------------------------------------------------------------
1. MFC시 CScriptControl 객체를 만들어서 할경우 언어를 설정하지
않았다고 나는 경우
sc.SetLanguage(NULL);
sc.SetLanguage("VBScript");
이렇게 먼저 설정을 NULL로 한다음 하면 된다.
'KB > tutorial' 카테고리의 다른 글
[java] Jakarta-Tomcat 설치 JSP 예제 애플리케이션 만들기 JavaBeans 컴포넌트 설치 (0) | 2004.03.19 |
---|---|
[com] com객체 MTS에 올려 사용하기 (0) | 2004.03.19 |
Global Hooking in Win32 (0) | 2004.03.19 |
익스체인지2K 서버 까는 방법 (0) | 2004.03.19 |
ATL 조금 하기 (0) | 2004.03.19 |