예제: MFC 사용 액티브 스크립트 호스트 MFCAxs.exe 구현

기술 자료 번역 기술 자료 번역
기술 자료: 168214 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

요약

MFCAxs.exe는 MfcAxscrVb 들어 샘플입니다. MfcAxscrVb은 MFC를 사용하여 작성된 사용하면 사용 안내 샘플 Active 호스트입니다. VBScript DLL을 호스팅하는, Active 메커니즘을 모든 액티브 스크립트 엔진에 제네릭. MfcAxscrVb은 디스패치 개체 액티브 스크립트 호스트 인터페이스를 구현할 수 및 스크립팅 엔진에서 발생한 이벤트를 호스트 창 메시지를 연결할 호스트에서 제공하는 한 가지 가능한 방법을 보여 줍니다.

MfcAxscrVb Visual C++ 5.0 작업 및 프로젝트 파일이 포함되어 있습니다. VC ++ 4.2 호환되는 메이크파일 또는 mdpfile 제공된 있지만 MfcAxscrVb 소스 코드 MFC 4.2b 호환됩니다.

전제 조건: COM 자동화

추가 정보

Microsoft 다운로드 센터에서 다음 파일을 다운로드 할 수 있습니다:
MFCAxs.exe
Microsoft 지원 파일을 다운로드하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
119591온라인 서비스로부터 Microsoft 지원 파일 구하는 방법
Microsoft는 이 파일에 대한 바이러스를 검색합니다. Microsoft는 파일을 게시한 날짜에 사용할 수 있었던 최신 바이러스 검색 소프트웨어가 사용됩니다. 해당 파일을 무단으로 변경할 수 없는 보안이 향상된 서버에 보관됩니다.

샘플 실행

MfcAxscrVb 예제 실행할 때 응용 프로그램의 왼쪽 위 큰 편집 컨트롤에서 알 수 있습니다. 이 창에 형식 스크립트 및 선택 "실행 스크립트" 스크립트를 호출하려면 단추를 붙여 넣을 수 있습니다. 여러 테스트 스크립트는 자동으로 Script.txt 및 Testevents.txt 파일이 제공됩니다.

호스트가 노출: 개체 디스패치

이 샘플의 주 포커스를 MFC를 사용하여 디스패치 개체 구현입니다. 그 이유는 간단합니다. 스크립트 아무 것도 없으면 많이 사용할 스크립트 언어를 아닙니다.

모든 액티브 스크립트 가 종속된 핵심 기술을 대부분의 확실히 자동화가 사용됩니다. 자동화 단색 실무 지식을 액티브 스크립트 호스트 코드 시도하기 전에 반드시 필요한 것입니다. 자동화 위한 몇 가지 좋은 참조가: Dale Rogerson "내부 COM," 및 "OLE 자동화 프로그래머 참조" 장을 14 및 15의 Brockshmidt의 "안쪽 OLE," 11 장

CCmdTargetPlus:

필요한 일부 개체 스크립트 가능한 속성 및 메서드를 통해 IDispatch 수는 있지만 스크립트 가능한 이벤트를 생성할 수도 있습니다. MFC 한정적으로 grunt 작업 대부분은 COM 개체에 대한 디스패치 인터페이스를 구현할 때 수행합니다. 그러나 들어오는 디스패치 인터페이스 및 나가는 디스패치 인터페이스 또는 이벤트 싱크를 모두 지원하는 유일한 MFC COleControl 클래스입니다. COleControl 훨씬 너무 대형 원하는 것에 대한 것입니다. 방금 이벤트, 디스패치 인터페이스, 정보를 입력합니다. 이벤트를 지원하는 디스패치 개체에 대한 형식 정보를 읽으려면 VBScript이 합니다. 수 중 하나를 이 즉석에서 또는 호스트 컴퓨터의 디스패치 개체에 대한 정적 형식 라이브러리를 만드는 만들고 각 개별 개체의 ITypeInfo 얻을 수 있습니다.

것 필요한 반면, MfcAxscrVb 이러한 세 가지 부분으로 지원하는 CCmdTargetPlus 라는 기본 클래스가 있습니다: 인터페이스, 컨트롤 스타일 이벤트 맵 및 IProvideClassInfo 통해 쉽게 액세스할 수 있도록 형식 정보를 사용하여 연결 지점을 디스패치합니다. CmdTargetPlus 코드에서 대부분의 이벤트를 추가하는 어떤 사용하면 파생 클래스가 훨씬 쉽게 이벤트 맵을 있도록 추가되었습니다.

개체 디스패치:

모든 호스트에서 제공한 디스패치 개체 CCmdTargetPlus 사용하여 구현됩니다. 잘 작동하도록 해야 할 몇 가지 있습니다. 디스패치 개체 (CAButtonDispatch, CBButtonDispatch, 등) 중 하나를 필요할 수 있는 상용구 참조하십시오. MfcAxscrvb의 개체 모델에 대한 간단한 개요입니다가 이 문서 끝에 나열됩니다.

개체를 직접 추가하는 경우 세 가지 고유한 GUID를 기본 디스패치 및 기본 이벤트는 인터페이스 및 합계가 있는 개체에 대한 CLSID를 다시 확인해야 합니다. 이 구현 파일 및 .odl 파일에 수행되어야 합니다. 잘라내기 및 붙여넣기 여기에 도움이 됩니다. 잘라내기 및 모든 클래스 마법사 매크로를 붙여 넣고 새 클래스 이름을 변경하십시오. 클래스 마법사 매우 특정 있지만 수행할 경우 모든 것이 바로 .odl, .h 및 .cpp 파일을 오른쪽, 새 이벤트, 속성, 추가할 수 있습니다, MFC OLE 컨트롤 것처럼 사용자의 디스패치 메서드를 개체 있습니다. 이 종류의 유용합니다.

MfcAxscrVb 데 실제로 참조하는 MFC 개체를 별도로 디스패치 메커니즘을 구현하는 개체를 유지합니다. 예를 들어, 대화 상자 "스크립팅할 수 있는 AButton," 라는 단추가 있습니다. MFC 단추를 CButton 것입니다. CCmdTargetPlus 파생된 클래스 CAButtonDispatch, 별도의 고유한 것입니다. 키 지점입니다. 대해서만 어떤 호스트 프로그래머가 명시적으로 기본 MFC 개체 및 Windows 컨트롤을 제공하도록 선택하는 스크립팅할 수 있습니다.

CEventsButton, CEventsEdit, CeventsListBox:

이벤트에 대한 필요합니다 일부 코드가 있는 경우를 가정해 있는 Windows 이벤트--봅니다 수, 단추 클릭--응답하고 스크립트 엔진에 대해 이벤트가 생성됩니다. 디스패치 인터페이스의 호스트 개체에 연결 지점을 처리할 Invoke 이벤트입니다 기억해야 합니다. 이 샘플에서는 다양한 클래스에서 파생된 개체로 표준 MFC 메시지 처리기 추가 작업을 수행합니다. 각 이 처리기를 단순히 디스패치 개체에서 수 CCmdTargetPlus 추가한 코드) 관례대로 FireEvent 호출할 수 있습니다. 다른 모든 자동으로 수행됩니다.

디스패치 개체 및 실제 MFC 창 개체가 이 샘플에서 별도의 있기 때문에 대화 부모 명시적으로 두 함께 후크 합니다. 이 Mfcaxscrvbdlg 생성자에서가 수행됩니다.

명명된 항목

디스패치 개체는 일단 스크립트 엔진에 대한 이를 알 수 있도록 이를 설정할 수 있습니다. 스크립트 엔진에 대한 알고 모든 명명된 디스패치 개체의 컬렉션은 "스크립트 네임스페이스" 라고 IActiveScript::AddNamedItem 메서드는 통해 스크립트 네임스페이스 항목이 추가됩니다. 앞에서 설명한 것처럼 호스트의 연락 가능한 날 개체의 IDispatch 구현 및 개체에 대한 형식 정보를 ITypeInfo 통해 지원할 수 있습니다. 스크립트 엔진이 명명된 항목에 대한 참조를 확인하려 할 때 주로 IDispatch 쿼리)는 IUnknown 포인터를 요청하고 ITypeInfo 포인터를 IActiveScriptSite::GetItemInfo 메서드를 사용합니다.

명명된 항목 않는 모든 호스트 스크립팅할 수 원합니다 합니다. 일반적으로 호스트 하위 개체를 더 높은 수준의 개체를 통해 액세스할 수 있는 개체 계층 구조를 갖게 됩니다. 일반적인 의미를 사용하여 응용 프로그램을. Document 개체를 Application 개체의 IDispatch 속성으로 최상위 Application 개체에서 액세스 가능한 위치 항목 계층-> 문서->. 동일한 방식으로 Document 개체를 여러 하위 개체를 노출하는 및 각 항목 배열 또는 다른 contrivance 통해 얻을 수 있는 항목이 됩니다.

이 구성표를 사용하면 스크립팅 엔진이 스마트 충분히 위해 sub-item 문서 필요 없이 다음 스크립트 코드를 라는 때 탐색할 수 또는 항목 스크립트 네임스페이스를 추가할 수 있습니다:
Set Obj = Application.Document.Item(1)
				
해당 하위 개체를 get-속성으로 해당 부모 개체의 노출된 것으로 동안에는 스크립트 엔진이 이를 성공적으로 찾습니다. 흥미롭게도 충분히 스크립트 엔진이 가정합니다"계층 구조의 최상위 항목에" 할 수 있습니다. 응용 프로그램 최상위 항목으로 선언된 경우 다음 이를 충분한 이전 스크립트 코드에 대해 다음 말할 수 있는지 즉:
Set Obj = Document.Item(1)
				
정확히 어떻게 Internet Explorer 3 창 개체 컨텍스트에서 스크립트 코드 "창" 함께 개체에 대한 모든 참조를 항상 접두사로 않고 사용하면 입니다 스크립트 호스트를 SCRIPTITEM_GLOBALMEMBERS 플래그를 사용하여 AddNamedItems 호출에서 최상위 스크립트 항목을 식별하는 데 필요합니다. 그러나 어떤 일반적으로 지우기 Active 설명서에서 내용이 없는, 명명된 항목을 해당 이벤트를 지원할 수 있습니다. 위의 예제를 사용하면 구문은 특정 항목 이벤트를 처리하려면 다음 말할 수 없습니다:
   Sub Application.Document.Item(1)_OnEvent ' this doesn't work!
				
계층 구조에 있는 모든 개체의 이벤트를 처리할 수 있도록 하려는 때문에 그래서, MfcAxscrvbdlg에 대한 모든 개체가 명명된 항목으로 추가됩니다. 각 개체는 이벤트를 현재 지원하지 않는 최상위 스크립터 개체를 통해 (대화 자체)를 액세스할 수 있습니다.

WebBrowser 컨트롤:

이 샘플에서는 스크립트 호스트를 스크립트 네임스페이스에 한 외부 개체를 노출합니다. MFC의 기본 컨트롤 포함을 지원 대화 상자 호스팅되는 WebBrowser 컨트롤입니다. 필요한 모든 컨트롤에 포인터를 사용하여 AddRef 디스패치 및 사용자가 설정한 것입니다. 이벤트에 대한 외부 개체를 ITypeInfo 포인터를 어떤 식으로든 노출해야 합니다. MfcAxscrVb이 IProvideClassInfo::GetClassInfo 통해 가져옵니다. 마지막 수단으로 개체의 형식-정보를 자체에 있는 ITypeInfo 노출하는 호스트 읽을 수 있습니다. 다행히 WebBrowser 컨트롤의 GetClassInfo, 지원하므로 MfcAxscrVb 이렇게 하지 않습니다.

네임스페이스에 다른 외부 자동화 개체를 추가하려는 경우 일반적으로 필요합니다 모든 CoCreateInstance 사용하여 IUnknown 인터페이스 가져오는 것입니다. 이벤트를 처리할 필요가 있는 있지만 또는 호스트 제네릭 수단을 외부 개체를 얻기 위해 지원할 수 있습니다. Visual Basic에서 CreateObject이 함수가 호출됩니다.

다른 응용 프로그램 가져오기: HostCreateObject

모든 자식 개체를 노출하는 데 사용되는 속성 집합이 아닌 기본 스크립터 개체 (대화 클래스 자체에) 한 특수 메서드를 노출합니다. 이 메서드는 단순 VB 프로그램의 CreateObject 함수에서 시뮬레이션 의미합니다 보여 줍니다. 메서드에 이 메서드를 스크립트 엔진에서 무료로 제공되는 있지만 호스트에서 구현해야 하는 강조하기 위해 HostCreateObject 인 참고 자체를. 일부 호스트를 명확하게 보안상의 이유로 이 기능을 제공하지 않을, IE3 문제라면 예입니다. HostCreateObject의 기본적인 목표는 요청된 개체의 디스패치 포인터를 반환하는 것입니다. 스크립팅 엔진이 디스패치 포인터를 가진 나면 여기에서 수행할 작업을 알고 있습니다.

참고: 이름으로 2.0 버전, 기본 제공 함수 CreateObject VBScript 및 JScript 엔진의 이제 지원합니다. 호스트가 이 함수를 구현할 필요는 없습니다. 그러나 이 함수의 개체를 사용할 수 있도록 허용하기 전에 스크립트 사용에 안전 있지 않도록 하려면 개체를 테스트할 것인지. 개체 자체는 IObjectSafety 인터페이스를 지원하는 또는 안전-For-스크립팅을 위한 적절한 구성 요소 범주 레지스트리 항목을 표시하면 스크립팅 작업에 안전한 여기는. 자세한 내용은 Microsoft 기술 자료 참조하십시오.

클래스 마법사 지원

MfcAxscrVb 책략 마지막 약간의 클래스 지원하도록 변경한 조작을 것입니다. 마법사 클래스, 기술적으로 "단순" 않습니다 문제가 더 방금 mentally 되는 것입니다. 이를 어떻게 이를, 있지만 이를 이러한 특수 클래스 의견은 찾고 파일을 방금 무턱대고 검색합니다에 대한 매우 편리합니다. COleControl에 대한 형식을 따를 경우 클래스의 자동화 및 이벤트 사용에 방금 get 즉시에 대한 탭으로 이동할 수 있습니다.

한 복잡도를 MfcAxscrVb 파생 개체 계층 구조의 일부 사용한다는 것입니다. 모든 단추 개체에 속성과 메서드를 모두 개별적으로 지원하는 것과 노출하는 공용 CButtonDispatch 개체에서가 파생됩니다. 그러나 .odl 파일을 체크 채우려면 시간이 들어오면 각 개별 개체의 모든 속성 및 부모 클래스의 메서드를 포함해야 합니다. 당연히 이 있는 DISPID의 번호를 때 클래스 마법사 혼동하지 될 것입니다. 클래스 마법사를 사용할 경우, 생성된 DISPID를 두 위치에 다시 확인하십시오: 자동화 클래스 및 클래스 정의 내에 열거형 .odl 파일이. 단추가 파생된 클래스를 사용하여 작업할 때 쉽게 여러 속성 및 메서드가 할당된 동일한 DISPID 볼 수 있습니다. 훨씬 쉽게 DISPID를, 수정할 수 있지만 모든 것을 처음부터에 의해 추가하는 것보다 있으므로 기능을 MfcAxscrVb 있는 나갔습니다 않은.

Visual C++ 5.0 향상된 지원을 IDL 메서드 및 속성을 통해 클래스, 클래스 또는 필요한 최대 toss 합니다. 그러나 MfcAxscrVb 지금은 지원합니다. 즐길 수 있습니다.

부록 A: 개체 모델

스크립터:

이것은 다른 모든 개체에 파생된 마스터 개체입니다. "IMfcaxscrvbDlg".odl 파일에 있지만 "스크립터" 명명된 항목으로 추가됩니다. 위에서 설명한 HostCreateObject 메서드 하나가 있습니다.

단추 개체:

AButton BButton, CancelButton, OKButton, RunScript

속성
  • 단추 모양에 캡션: 텍스트입니다.
메서드 누르기: 단추가 푸시되지 것처럼 동작합니다.
  • 누르기: 단추가 푸시되지 것처럼 동작합니다.
이벤트
  • OnClick: 단추를 밀어넣을 때 발생한.
  • OnMouseOver: 단추 위로 마우스를 굴릴 때 발생한.
  • OnFocus(bSet): 포커스가 지정되면 실행된 또는 단추에서 가져옵니다.
BroCon:

BroCon 대화 상자의 WebBrowser 컨트롤의 이름입니다. 모든 속성 및 인터넷 클라이언트 SDK를/ActiveX SDK WebBrowser 컨트롤에 대해 설명하는 대로 메서드를 지원합니다.

EditCon:

메서드
  • 끝까지 strToAdd AppendLine(strToAdd): 추가 편집 텍스트 창의.
  • InsertLine (strToAdd, nWhere): 한 줄 #nWhere strToAdd 추가합니다.
  • RemoveLine(nWhere): 줄 # nWhere 편집 창에서 제거합니다.
이벤트
  • OnMouseOver: 창 위로 마우스를 굴릴 때 발생한.
  • OnChar(strChar): 문자 strChar 창으로 입력될 때 발생한.
  • OnFocus(bSet): 포커스가 지정되면 실행된 또는 단추에서 가져옵니다.
Lbox:

메서드
  • StrIn AddString(strIn): 목록 상자에 추가합니다.
  • ClearList: 목록 상자에서 모든 문자열을 지웁니다.
  • RemoveString(strRemove): StrRemove 첫 번째 인스턴스를 제거합니다 및 목록 상자에서 제거합니다.
  • SelectString(strSelect): strSelect에 의해 지정된 문자열을 선택합니다.
이벤트
  • OnMouseOver: 창 위로 마우스를 굴릴 때 발생한.
  • OnFocus(bSet): 포커스가 지정되면 실행된 또는 단추에서 가져옵니다.
  • OnSelCancel(strCancelled): 때 목록 상자 요소를 strCancelled 선택이 취소됩니다.
  • OnSelChange(strChange): 사용자가 목록 상자에서 요소 strChange 경우 선택됩니다.

속성

기술 자료: 168214 - 마지막 검토: 2014년 2월 5일 수요일 - 수정: 2.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Internet Explorer 3.01
  • Microsoft Internet Explorer 3.02
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 4.01 서비스 팩 2
  • Visual Basic, Scripting Edition 1.0
  • Microsoft Visual Basic, Scripting Edition 1.1
  • Visual Basic, Scripting Edition 2.0
  • Microsoft Foundation Class Library 4.2?을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
키워드:?
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB168214 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com