Q&A

  • Com에서 IDispatch 와 QueryInterface에 관하여...
안녕하세요..

저는 ArcGis라는 Gis용 툴을 사용하고 있는 개발자(?)입니다..

ArcGis라는 놈이 Com으로 만들어 져 있다고 얘기를 듣고 VB를 사용하여

프로젝트를 하나 수행하였습니다.

VB를 사용하면 Com에 대한 이해가 별로 없어도 잘 사용할 수 있습니다.

근데 저는 프로젝트가 끝난후 이것을 Delphi로 한번 구현해보고자 하였습니다.

Delphi로 구현하고자 하니 Com에 대한 이해가 없이는 안되겠더라구요..

그래서 열심히 문서 읽었습니다.. 하지만 소스가 거의 C++로 되어있는 관계로 개론부분만 충실히 읽고 말았죠..

ArcGis에서 제공하는 Object Model Diagram을 보면

Application이라는 클래스(아마 coClass같습니다.)에는
IApplication이라는 인터페이스가 있고 이 IApplication이라는 인터페이스는 IDispatch인터페이스를 상속받고 있습니다.

제가 묻고자 하는 부분은

var
        m_pApp  : IApplication;

function TMyButt.OnCreate(const hook: IDispatch): HResult;
begin
    m_pApp := hook as iApplication;
end;

이 부분입니다.
이 코드가 하는일은 ArcGis라는 프로그램을 실행하고 이 프로그램의 포인터를 받아와서 m_pApp라는 변수에 넣는 겄입니다. 즉 m_pApp로 arcGis를 제어하겠다는 얘기 인데.

as라는 것을 몰라서(여기서 사용되는지 몰라서..^-^;;)
m_pApp := hook라고 쓰니 IDispatch와 IApplication은 Casting이 안된다는 에러 메시지를 받고 한창 좌절했습니다.

제가 아는바로는 IDispatch는 특정메소드를 사용할수 있게 해주고 IDispatch는 IUnknown인터페이스를 상속받고(모든 인터페이스는 IUnknown을 상속받는걸로 알고 있습니다.)IUnknown인터페이스는 QueryInterface를 통해서 특정 클래스에 있는 다른 인터페이스의 포인터를 얻어올수 있다고요..

어떤 소스를 보니 QueryInterface라는 것을 직접써서 하는게 있더라구요..
m_pApp.QueryInterface(IID_IObjectFactory, pObjFactory);

위에것을 이해하지 못하고 있는데..



여기서 제가 묻고자 하는것은
function TMyButt.OnCreate(const hook: IDispatch): HResult;
begin
    m_pApp := hook as iApplication;
end;

이부분에서 QueryInterface라는 것을 써서 as말구요..
어떻게 하면 되는지 좀 갈켜 주십시오..

제 질문에서 부족하고 빠진게 있으면 어떤건지 말씀해주시면 다시 글올리겠습니다.

제컴은 Win2000이고 delphi5에서 사용하고 있습니다.

그럼 좀 상세한 답변좀 부탁드립니다.
0  COMMENTS
    • 죠스고기
      2002.02.03 22:23
      여기 저기서 님이 쓰신 질문들을 봤는데, direct show사용해서 스트리밍 서비스를 하시려나 본데요......
    • 박상윤
      2002.02.02 10:34
      일단 수동으로 필터를 넣어야 함다.^^ 그냥 함 해보심도 도움이 될듯 해본적이 없어서리 일반적으로 미디...
    • 권민경
    • 2002.02.02 02:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2002.02.02 10:30
      os는 인스톨쉴드에서 알아서 해줍니다.. 자동설치하는 것은 인스톨 쉴드 옵션이구여..^^ 파일이 보내다 ...
    • 임재균
    • 2002.02.02 01:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 장명선
      2002.02.02 02:07
      도움말 작성하는 툴은 여러종류가 있습니다. 델파이에 있는 툴은 엔진인걸로 알고 있는데요 제가 사용...
    • 임재균
      2002.02.02 02:54
      그런데  HELP Scribble은 Hlp형식의 도움말제작이 가능합니까? Help Scribble은 .hsc 화일의 형...
    • 장명선
      2002.02.02 02:14
      에공...전 잘 되는데 ??? 님이 무엇인가를 잘못 선언을 했다든지 암튼 소스를 봐야 알것 같네요 그럼...
    • 최용일
      2002.02.02 01:28
      안녕하세요. 최용일입니다. 그냥 파일에서 읽어서 배열에 넣으세요... var     ...
    • 한규호
      2002.02.02 05:25
      덕분에 해결 했습니다. 해더가 62 바이트 차지 하는군요. ^^  감사 합니다. com 포트로 출력 ...
    • BlueSea
    • 2002.02.02 00:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.02.02 01:16
      안녕하세요. 최용일입니다. TFileListBox에 보시면 Selected란 속성이 있습니다. 이것에 아이템들이 ...
    • 우정민
    • 2002.02.01 23:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.02.02 01:17
      안녕하세요. 최용일입니다. Torry사이트나 Delphi Super Page같은곳에서 찾아보시면 움직이는 gif파일을...
    • 윤도상
    • 2002.02.01 23:22
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이준희
      2002.02.02 19:05
      한글 언어팩이 설치되어 있지 않다면 한글을 보여줄 수 없습니다. 일본어 언어팩이 없는 윈도우를 가지...
    • 최용일
      2002.02.02 01:09
      안녕하세요. 최용일입니다. 한글을 이미지로 만들어서 전송하고 보여주면 절대 깨질리가 없겠죠... ...
    • 이준희
      2002.02.02 19:01
      한글 폰트가 없는 곳에서 한글을 볼수는 없습니다. 한글 윈도우를 막 설치하고 일본어로 된 사이트에 들...
    • 배건환
      2002.02.01 23:28
      String Grid 이벤트에 SelectCell이 있습니다... 그 곳에서 옵션을 지정해주면 됩니다. 예를 들어 ...
    • 박현화
      2002.02.02 00:04
      성의있는 답변에 정말 감사합니다. 이렇게 빠른 답변을 주셔서 더욱 감사드리고, 잘 처리 했습니다. 건...
    • 최용일
      2002.02.02 01:06
      안녕하세요. 최용일입니다. type     PrdRec = ^TMyRecord;    &...
    • 김태룡
    • 2002.02.01 22:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 5782_Click
      2002.02.02 00:23
      FileListBox.update 하심 댑니다.. 즐코~~
    • jshope
    • 2002.02.01 21:29
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2002.02.01 22:04
      서브메뉴를 생성하시는걸 물으신거 같군요. 지금쯤이면 벌써 해답을 찾으셨을지도 모르겠군요..^^ ...
    • 장명선
      2002.02.01 21:33
      왜 팝업창을 3개뜨우는지 모르겠지만 팝업창 한개만 있어두 가능할것 같은데요 ? 꼭 3개창을 원하시나여...
    • 이인수
    • 2002.02.01 21:25
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 장명선
      2002.02.01 21:28
      Install Sheild라는 프로그램이 있습니다. 볼랜드 제품에 같이 포함된 제품이므로 인스톨만 해주면 바로 ...
    • 이인수
      2002.02.01 22:23
      답변 감사합니다. 그러면요.. 그렇게 만들어 사용하면 불법소프트웨어에 해당이 안되는건가요? 다...
    • 장명선
      2002.02.01 22:32
      불법이 아닙니다.. 개발한 프로그램을 배포하는건데...^^* 좋은 프로그램 많이 만드세요
    • 최선용
    • 2002.02.01 21:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 장명선
      2002.02.01 21:25
      정확히는 모르지만 ODBC문제는 오피스때문일수도 있을겁니다.. 오피스를 확인하세요
    • 최선용
      2002.02.01 22:27
      감사합니다.
    • 정진영
    • 2002.02.01 21:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      2002.02.01 21:08
      안녕하세요? 제 생각에는 정상인거 같은데요. 델파이 IDE가 본래 그케 생겼는데요. 글구 언인스톨은 제...
    • 김형달
    • 2002.02.01 20:54
    • 0 COMMENTS
    • /
    • 1 LIKES
    • 김진선
    • 2002.02.01 20:32
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김현
      2002.02.01 20:52
      MS SQL Server 의 경우는 SELECT TOP 10   ....... 하면 될검다....
    • 김진선
      2002.02.01 20:58
      근데요 interbase걸랑요.. 인터베이스에선 지원이 안되나봐요.. interbase에서 사용하는방법은 없나요??...
    • 배건환
      2002.02.01 23:20
      상위 10건만 자르고 싶다면 델파이 상에서 코딩을 해주면 될것 같네요. 예를 들어 i :=1; While ...
    • Tk
      2002.03.09 14:17
      borland interbase6.5 버전 사용방법 Select * from employee rows 0 to 10000 Firebird RC1또는...
    • 김윤곤
    • 2002.02.01 20:28
    • 0 COMMENTS
    • /
    • 0 LIKES