Q&A

  • COM으로 작업할 때, 오브젝트와 인터페이스간의 형변환은 어떻게???
델파이에서 COM을 이용하여 작업을 하고 있습니다.

function TForm1.GrabCurrentSurface(): ISpectreViewOverlaySurface;
var
  t_Grabber : ISpectreViewGrabSurface;
  t_Surface : ISpectreViewOverlaySurface;
begin
  //지금 이 함수에 에러가 발생한다...
  Memo1.Lines.Add('GrabCurrentSurface');
  t_Grabber := RecPlayback; //RecPlayback : TSpectreViewPlayback;

  result := t_Surface;
end;

TSpectreViewPlayback는 오브젝트이고, ISpectreViewGrabSurfaces는 그 오브젝트 하부에 있는 인터페이스입니다... 비주얼 베이직에서는 t_Grabber := RecPlayback와 같이 할당을 할 수 있나보더라구요...
근데 비주얼베이직 소스를 델파이로 옮기려 하니 자꾸 다음과 같은 에러가 발생합니다...

   Incompatible types: ISpectreViewGrabSurface and TSpectreViewPlayback

지금 비주얼 베이직에서 델파이로 소스를 포팅을 하려는데 위와 같은 에러가 무척 많이 발생하고 있습니다...
이것을 어찌하면 좋을까요???
2  COMMENTS
  • Profile
    최용일 2004.08.03 05:23
    안녕하세요. 최용일입니다.

    아래 문장은 맞습니다만...

    t_Grabber := RecPlayback; //RecPlayback : TSpectreViewPlayback;

    RecPlayback(TSpectreViewPlayback)란 객체에 ISpectreViewGrabSurface인터페이스가 구현이 되어 있어야 합니다.

    COM자체는 단지 Prototype일뿐이고 실제 구현은 객체에서 합니다.

    TSpectreViewPlayback객체에 ISpectreViewGrabSurface인터페이스가 구현이 되어 있는지 확인해보세요...

    ^^ 항상 즐코하세요...

  • Profile
    Maverick 2004.08.03 18:54
    답변 감사합니다... 음, 살펴보니 인터페이스를 구현해주는 부분이 없는 것 같네요... 근데 그 구현이라는 것이  객체와 인테페이스간의 관계를 정의해주는 것 같은데 그걸 어떻게 해줘야 할까요?
    책을 찾아봐도 모호하게 설명이 되어 있어서요???
    참고로 Import Type Library해서 생성된 파일을 사용하고 있습니다...