다른 애플리케이션에 해당 컨트롤을 프로그래밍 방식으로 포함하고 애플리케이션에서 컨트롤의 메서드를 호출하기 위해 MFC ActiveX 컨트롤을 자동화 서버로 개발할 수 있습니다. 이러한 컨트롤은 여전히 ActiveX 컨트롤 컨테이너에서 호스트할 수 있습니다.
자동화 서버로 컨트롤을 만들려면
컨트롤을 만듭니다.
IsInvokeAllowed를 재정의합니다.
컨트롤을 빌드합니다.
Automation 서버의 메서드에 프로그래밍 방식으로 액세스하려면
애플리케이션(예: MFC exe)을 만듭니다.
함수의
InitInstance
시작 부분에 다음 줄을 추가합니다.AfxOleInit();
클래스 뷰에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 typelib에서 클래스 추가 를 선택하여 형식 라이브러리를 가져옵니다.
그러면 파일 이름 확장명 .h와 .cpp 파일이 프로젝트에 추가됩니다.
ActiveX 컨트롤에서 하나 이상의 메서드를 호출할 클래스의 헤더 파일에서 다음 줄을
#include filename.h
추가합니다. 여기서 파일 이름은 형식 라이브러리를 가져올 때 생성된 헤더 파일의 이름입니다.ActiveX 컨트롤의 메서드를 호출하는 함수에서 컨트롤의 래퍼 클래스 개체를 만들고 ActiveX 개체를 만드는 코드를 추가합니다. 예를 들어 다음 MFC 코드는 컨트롤을
CCirc
인스턴스화하고 Caption 속성을 가져오며 대화 상자에서 확인 단추를 클릭하면 결과를 표시합니다.void CCircDlg::OnOK() { UpdateData(); // Get the current data from the dialog box. CCirc2 circ; // Create a wrapper class for the ActiveX object. COleException e; // In case of errors // Create the ActiveX object. // The name is the control's progid; look it up using OleView if (circ.CreateDispatch(_T("CIRC.CircCtrl.1"), &e)) { // get the Caption property of your ActiveX object // get the result into m_strCaption m_strCaption = circ.GetCaption(); UpdateData(FALSE); // Display the string in the dialog box. } else { // An error TCHAR buf[255]; e.GetErrorMessage(buf, sizeof(buf) / sizeof(TCHAR)); AfxMessageBox(buf); // Display the error message. } }
애플리케이션에서 메서드를 사용한 후 ActiveX 컨트롤에 메서드를 추가하는 경우 형식 라이브러리를 가져올 때 만든 파일을 삭제하여 애플리케이션에서 최신 버전의 컨트롤 사용을 시작할 수 있습니다. 그런 다음 형식 라이브러리를 다시 가져옵니다.