이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

COM 객체 만들기

서버 프로세스 만들기 — 개요

MATLAB®은 COM 객체를 만들기 위한 다음 두 가지 함수를 제공합니다.

  • actxcontrol — MATLAB Figure 창에 Microsoft® ActiveX® 컨트롤을 만듭니다.

  • actxserver — DLL(동적 연결 라이브러리) 구성요소에 대한 in-process 서버 또는 실행 파일(EXE) 구성요소에 대한 out-of-process 서버를 만듭니다.

다음 도식은 서버 프로세스를 만들기 위한 기본 단계를 보여줍니다. MATLAB이 결과로 생성된 COM 객체에 대한 인터페이스를 설정하는 방법에 대한 자세한 내용은 COM Object Interfaces 항목을 참조하십시오.

ActiveX 컨트롤 만들기

사용자 인터페이스(actxcontrolselect)나 명령줄에서 actxcontrol 함수를 사용하여 MATLAB 클라이언트에서 ActiveX 컨트롤의 인스턴스를 만들 수 있습니다. 어떤 방법을 사용하든, MATLAB 클라이언트 프로세스에 컨트롤의 인스턴스가 생성되고 COM 객체에 대한 기본 인터페이스의 핸들이 반환됩니다. 이 인터페이스를 통해 객체의 퍼블릭 속성 또는 메서드에 액세스할 수 있습니다. IDispatch를 사용하는 인터페이스를 포함하여 객체에 대해 더 많은 인터페이스를 설정할 수도 있습니다.

이 섹션에서는 컨트롤의 인스턴스를 만들고 MATLAB Figure 창에 배치하는 방법을 설명합니다.

설치된 컨트롤 목록 표시하기

actxcontrollist 함수는 시스템에 현재 설치되어 있는 COM 컨트롤을 표시합니다. 다음을 입력합니다.

list = actxcontrollist

MATLAB은 이름, 프로그래밍 식별자(ProgID) 및 파일 이름을 포함하여 각 컨트롤을 나열하는 셀형 배열을 표시합니다.

이 예제에서는 여러 개의 컨트롤에 대한 정보를 표시합니다(사용자가 실행한 결과와 다를 수 있음).

list = actxcontrollist;
s = sprintf(' Name = %s\n ProgID = %s\n File = %s\n', list{114:115,:})

MATLAB에 다음이 표시됩니다.

s =

 Name = OleInstall Class
 ProgID = Outlook Express Mime Editor
 File = OlePrn.OleInstall.1
 Name = OutlookExpress.MimeEdit.1
 ProgID = C:\WINNT\System32\oleprn.dll
 File = C:\WINNT\System32\inetcomm.dll

특정 컨트롤 찾기

컨트롤의 이름을 알면 컨트롤의 ProgID와 컨트롤이 포함된 폴더의 경로를 표시할 수 있습니다. 예를 들어, 이 문서의 예제 중 일부에서는 Mwsamp2 컨트롤을 사용합니다. 다음 코드를 사용하여 이 컨트롤을 찾을 수 있습니다.

list = actxcontrollist;
for ii = 1:length(list)
   if ~isempty(strfind([list{ii,:}],'Mwsamp2')) 
      s = sprintf(' Name = %s\n ProgID = %s\n File = %s\n', ...
             list{ii,:})
   end
end
s =

   Name = Mwsamp2 Control
   ProgID = MWSAMP.MwsampCtrl.2
   File =
   D:\Apps\MATLAB\R2006a\toolbox\matlab\winfun\win32\mwsamp2.ocx

이 파일의 위치는 설치된 MATLAB 환경에 따라 다릅니다.

UI를 사용하여 컨트롤 객체 만들기

컨트롤 객체의 인스턴스를 만드는 가장 간단한 방법은 actxcontrolselect 함수를 사용하는 것입니다. 이 함수는 시스템에 설치되어 있는 모든 컨트롤을 표시합니다. 목록에서 항목을 선택하고 Create 버튼을 클릭하면 MATLAB이 컨트롤을 만들고 이 컨트롤에 대한 핸들을 반환합니다. 다음을 입력합니다.

h = actxcontrolselect

MATLAB이 Select an ActiveX Control 대화 상자를 표시합니다. 이 인터페이스의 왼쪽에는 ActiveX Control List 선택 창이 있고 오른쪽에는 Preview 창이 있습니다. 컨트롤의 미리보기를 표시하려면 선택 창에서 컨트롤 이름 중 하나를 클릭하십시오. (미리보기 창에 아무 내용도 표시되지 않으면 해당 컨트롤의 미리보기가 없는 것입니다.) MATLAB이 인스턴스를 만들 수 없으면 미리보기 창에 오류 메시지가 나타납니다.

actxcontrolselect를 사용하여 속성 설정하기.  컨트롤을 만들 때 속성값을 변경하려면 Preview 영역에서 Properties 버튼을 클릭하십시오. 컨트롤을 배치할 Figure 창(Parent 필드), 창에서 컨트롤의 위치(XY 필드), 컨트롤의 크기(WidthHeight)를 선택할 수 있습니다.

컨트롤이 응답하도록 할 이벤트를 이 창에 등록할 수 있습니다. 이벤트 오른쪽, 이벤트 핸들러 아래에 루틴 이름을 입력합니다.

이벤트 열에서 이름을 클릭하고 Browse 버튼을 클릭하여 콜백 루틴을 선택할 수 있습니다. 콜백 루틴을 둘 이상의 이벤트에 할당하려면 먼저 Ctrl 키를 누른 상태로 각 이벤트 이름을 클릭하십시오. 또는, 연이어 있는 이벤트 이름 위로 마우스를 끈 다음 Browse를 클릭하여 콜백 루틴을 선택하십시오.

MATLAB은 등록된 이벤트에만 응답하므로, 콜백을 지정하지 않으면 이벤트가 무시됩니다.

예를 들어, ActiveX Control List 창에서 Calendar Control 10.0(사용자 시스템에 표시되는 버전은 다를 수 있음)을 선택하고 Properties를 클릭합니다. MATLAB이 Choose ActiveX Control Creation Parameter 대화 상자를 표시합니다. 컨트롤의 디폴트 크기를 변경하기 위해 Width500을 입력하고 Height350을 입력하십시오. Calendar Control의 인스턴스를 만들려면 이 창에서 OK를 클릭하고 다음 창에서 Create를 클릭하십시오.

actxcontrol 함수를 사용하여 컨트롤 파라미터를 설정할 수도 있습니다. actxcontrol을 사용하여 설정할 수 있지만 actxcontrolselect로는 설정할 수 없는 한 가지 파라미터는 초기화 파일의 이름입니다. 이 파일 이름을 지정하면 MATLAB은 컨트롤의 초기 상태를 이전에 저장된 컨트롤의 초기 상태로 설정합니다.

actxcontrolselect에 의해 반환되는 정보.  actxcontrolselect 함수는 객체를 생성합니다. 이 객체는 MATLAB COM 클래스의 인스턴스입니다. 이 함수는 최대 2개의 인수, 즉 객체에 대한 핸들 h와, 컨트롤에 대한 정보를 포함하는 1x3 셀형 배열 info를 반환합니다. 이 정보를 가져오려면 다음을 입력하십시오.

[h, info] = actxcontrolselect

셀형 배열 info는 컨트롤의 이름, ProgID 및 파일 이름을 표시합니다.

Calendar Control을 선택한 다음 Create를 클릭하면 MATLAB이 다음과 같은 정보를 표시합니다.

h =
   COM.mscal.calendar.7
info = 
    [1x20 char]    'MSCAL.Calendar.7'    [1x41 char]

info 셀형 배열을 확장하려면 다음을 입력하십시오.

info{:}

MATLAB에 다음이 표시됩니다.

ans =
   Calendar Control 9.0
ans =
   MSCAL.Calendar.7
ans =
   D:\Applications\MSOffice\Office\MSCAL.OCX

명령줄에서 컨트롤 객체 만들기

어떤 컨트롤을 원하는지 이미 알고 있고 해당 컨트롤의 ProgID를 아는 경우, actxcontrol 함수를 사용하여 컨트롤의 인스턴스를 만드십시오.

ProgID는 이 함수의 유일한 필수 입력값입니다. 추가로, 컨트롤을 배치할 Figure 창, 창에서 컨트롤의 위치 및 컨트롤의 크기를 선택할 수 있습니다. 컨트롤이 응답하도록 할 이벤트를 등록하거나, 파일에서 컨트롤의 상태를 읽어와 초기 상태를 설정할 수도 있습니다. 입력 인수에 대한 전체 설명을 보려면 actxcontrol 함수 도움말 페이지를 참조하십시오.

actxcontrol 함수는 객체에 대한 기본 인터페이스의 핸들을 반환합니다. 다른 COM 함수 호출에서 이 핸들을 사용하여 객체를 참조하십시오. 핸들을 사용하여 객체에 대한 더 많은 인터페이스를 가져올 수도 있습니다. 인터페이스 사용에 대한 자세한 내용은 COM Object Interfaces 항목을 참조하십시오.

Figure 창에서 컨트롤 위치 변경하기

컨트롤을 만든 후 move 함수를 사용하여 창에서의 컨트롤의 모양과 위치를 변경할 수 있습니다.

새 원점 좌표(70, 120)와 새 너비 및 높이 치수(400350)를 지정할 경우 마지막 섹션에서 생성된 객체가 어떻게 변하는지 살펴보십시오.

move(h,[70 120 400 350]);

ActiveX 지원 제한 사항

MATLAB COM ActiveX 컨트롤 컨테이너는 컨트롤이 표시될 때까지 컨트롤을 바로 활성화하지 않습니다.

COM 서버 만들기

DLL 구성요소 인스턴스화하기

DLL(동적 연결 라이브러리)로 구현된 구성요소에 대한 서버를 만들려면 actxserver 함수를 사용하십시오. MATLAB은 클라이언트 응용 프로그램이 포함된 프로세스와 동일한 프로세스에 구성요소의 인스턴스를 만듭니다.

DLL 구성요소와 함께 사용 시, actxserver의 구문은 actxserver(ProgID)입니다. 여기서 ProgID는 구성요소의 프로그래밍 식별자입니다.

actxserver는 객체에 대한 기본 인터페이스의 핸들을 반환합니다. 다른 COM 함수 호출에서 이 핸들을 사용하여 객체를 참조하십시오. 핸들을 사용하여 객체에 대한 더 많은 인터페이스를 가져올 수도 있습니다. 인터페이스 사용에 대한 자세한 내용은 COM Object Interfaces 항목을 참조하십시오.

Microsoft ActiveX 컨트롤과 달리, 이 서버에 의해 표시되는 사용자 인터페이스는 별도의 창에 나타납니다.

64비트 MATLAB 응용 프로그램에서는 32비트 in-process DLL COM 객체를 사용할 수 없습니다. 이 제한 사항에 대한 자세한 내용은 https://www.mathworks.com/matlabcentral/answers/95116-why-am-i-not-able-to-use-32-bit-dll-com-objects-in-64-bit-matlab 항목을 참조하십시오.

EXE 구성요소 인스턴스화하기

actxserver 함수를 사용하여 실행 파일(EXE)로 구현된 구성요소에 대한 서버를 만들 수 있습니다. 이 경우 MATLAB은 out-of-process 서버에 구성요소를 인스턴스화합니다.

실행 파일을 만들기 위한 actxserver의 구문은 actxserver(ProgID, sysname)입니다. ProgID는 구성요소의 프로그래밍 식별자이고 sysname은 DCOM(분산 COM) 시스템을 구성하는 데 사용되는 선택적 인수입니다.

actxserver는 COM 객체에 대한 기본 인터페이스의 핸들을 반환합니다. 다른 COM 함수 호출에서 이 핸들을 사용하여 객체를 참조하십시오. 핸들을 사용하여 객체에 대한 더 많은 인터페이스를 가져올 수도 있습니다. 인터페이스 사용에 대한 자세한 내용은 COM Object Interfaces 항목을 참조하십시오.

이 서버에 의해 표시되는 사용자 인터페이스는 별도의 창에 나타납니다.

다음 예제에서는 Microsoft Excel® 스프레드시트 프로그램을 실행하는 COM 서버 응용 프로그램을 만듭니다. 핸들은 h에 할당됩니다.

h = actxserver('Excel.Application')

MATLAB에 다음이 표시됩니다.

h =
    COM.excel.application

MATLAB은 컴퓨터에서 이미 실행 중인 COM 자동화 서버 응용 프로그램의 인스턴스에 프로그래밍 방식으로 연결할 수 있습니다. 이러한 응용 프로그램에 대한 참조를 가져오려면 actxGetRunningServer 함수를 사용하십시오.

다음 예제에서는 Excel 프로그램에 대한 참조를 가져옵니다. 단, Excel 프로그램은 시스템에서 이미 실행 중이어야 합니다. 반환되는 핸들은 h에 할당됩니다.

h = actxGetRunningServer('Excel.Application')

MATLAB에 다음이 표시됩니다.

h =
    COM.excel.application

참고 항목

| |