저번에 이어, 오늘은 드디어 ActiveX 개체를 한번 만들어봅시다. CreateCOM 라이브러리를 기준으로 설명해보겠습니다.
(5) ActiveX 만들기 일단 ActiveX 개체를 만들어봅시다. oNew 함수를 이용해서 할 수 있습니다.
먼저 만들고 싶은 ActiveX 개체의 ProgID 란 것을 알아야 합니다. ProgID는 ActiveX 개체의 이름 같은 것인데, 흔히 "회사.이름.버전" 같은 식으로 짓습니다.
예를 들면, 인터넷 익스플로러 => "InternetExplorer.Application" XML 파서 => "Microsoft.XMLDOM" 알파 변형 필터 => "DXImageTransform.Microsoft.Alpha"
이밖에도 수많은 ActiveX 개체가 있습니다.
ActiveX 개체를 만들려면 다음과 같이 합니다.
oNew(0, "InternetExplorer.Application", ""); |
첫 번째 인자와 세 번째 인자는 항상 0과 ""을 넣고, 두 번째 인자만 원하는 개체의 ProgID를 적어주면 됩니다. 개체를 제대로 만들었다면, 어떤 값이 반환됩니다. 실패하면 0이 반환되고, oResult 함수로 실패 이유를 알 수 있습니다.
(6) ActiveX 개체 다루기 ActiveX 개체는 창조의 객체와 매우 비슷합니다.
똑같이 함수와 속성이 있고, 함수를 호출하고, 속성의 값을 가져오거나 대입할 수 있습니다. 이 때 속성의 경우엔 문법적으로 따로 대입하거나 가져올 수 없으므로, 세 경우 모두 oInvoke 함수를 이용해 호출할 수 있습니다.
ㅎ창과 똑같은 ActiveX 개체가 있다고 치고, 예를 들어보겠습니다.
창.제목 := "ActiveX 예제"; 핸들 := 창.핸들; 창.보여; |
첫 번째 줄은 속성을 대입하는 것이고, 두 번째 줄은 속성을 가져오는 것, 세 번째 줄은 객체의 함수를 호출하는 것입니다. 위 코드를 CreateCOM 라이브러리로는 어떻게 하는지 봅시다.
oInvoke(2, 창, "제목", " 'ActiveX 예제' "); 핸들 := oInvoke(1, 창, "핸들", ""); oInvoke(0, 창, "보여", ""); |
상관 관계를 잘 보시기 바랍니다. 먼저 첫 번째 인자는 호출하는 방법인데, 0은 함수 호출, 1은 속성 가져오기, 2는 속성 대입하기입니다. 0, 1인 경우엔 함수의 결과와 속성 값을 반환 값으로 받을 수 있습니다. 만약 반환 값이 문자라면 oInvokeStr 함수를 쓰면 됩니다. 두 번째 인자는 객체 자체고, 세 번째 인자는 객체의 함수나 속성 이름입니다. 객체에 무슨 함수나 속성이 있는지는 그 ActiveX에 관련된 문서나 TypeLib 정보를 참조해야 합니다. 여기서는 모두 알고 있다고 가정합시다.
그러면 간단하게 익플 창을 하나 띄워볼까요?
익플 개체에 있는 Navigate 함수는 특정 주소로 이동하는 함수입니다. Visible 속성은 창조에 있는 보이기 속성과 같습니다.
위 코드가 제대로 작동한다면, cugz.com을 띄우는 익플 창이 하나 뜰 것입니다. 위 코드를 CreateCOM을 이용한 코드로 바꿔봅시다.
oInvoke(0, 익플, "Navigate", " 'http://cugz.com' "); oInvoke(2, 익플, "Visible", "참"); |
만약, 오류가 발생했다면 oResult 함수로 오류 코드를 얻을 수 있습니다. (0이 나오면 성공한 것입니다.) 또 '익플'이란 개체에 'Navigate'란 함수가 없었다면 실행되지 않고 오류 코드가 설정됩니다.
참, '익플'이란 개체를 쓰기 전에 당연하지만 그 개체를 미리 만들어둬야 합니다. 위에서 '익플'이란 개체를 얻기 위해서는,
실수: 익플;
익플 := oNew(0, "InternetExplorer.Application", ""); |
같은 식으로 하시면 됩니다.
(7) oInvoke에서 인자 넘기기 CreateCOM에서는 함수마다 다른 개수의 인자를 넘길 수 있도록, 인자 내용을 문자열로 통째로 넘기는 방법을 지원합니다.
규칙은 간단합니다. 각 인자를 , 으로 구분하고, 문자열은 ' 으로 묶습니다. 문자열 안에서 ' 자체를 쓰고 싶다면 '' 라고 쓰면 됩니다. 진리 값은 참, 거짓을 넣으면 됩니다.
123, "가나다라", 거짓 을 바꿔보면
"123, '가나다라', 거짓" 이 됩니다.
이 때, 두 번째 인자에 변수를 쓰게 된다면 어떻게 할까요? 예) 123, 에디트0.문자, 거짓
변수 이름을 그대로 쓰면 안 되고, 다음과 같이 실제 값만 넘어야 합니다. "123, '" + 에디트0.문자 + "', 거짓"
(8) 만든 개체 지우기 개체를 만들고 필요가 없다면 반드시 지워주는게 좋습니다. 간단하게 oDelete 함수를 이용해서 만들었던(혹은 다른 개체로부터 얻어온) 개체를 집어넣으면 개체를 제거할 수 있습니다.
지금까지 ActiveX 개체를 다루는 아주 기본적인 것들을 살펴봤습니다. 특정한 ActiveX 객체를 다루고 싶다면 먼저 그 ActiveX 개체에 어떤 속성들과 함수가 있는지 문서를 찾아봐야 합니다. 그런 것을 알면 CreateCOM으로 써먹을 수 있을 겁니다. |
|