Q&A

  • 파스칼에서의 as 키워드를 빌더로의 변환에 어려움이....
안녕하세요..

현재 DSPack 을 사용하여 공부중인데요. 파스칼 샘플 소스를 보면서, 빌더로 하고 있어요.

잘 진행되다가 다음 파스칼 코드에서 막히네요...

if VideoSourceFilter.FilterGraph <> nil then
  begin
    PinList := TPinList.Create(VideoSourceFilter as IBaseFilter);
    if VideoFormats.ItemIndex <> -1 then
      with (PinList.First as IAMStreamConfig) do
        SetFormat(VideoMediaTypes.Items[VideoFormats.ItemIndex].AMMediaType^);
    PinList.Free;
  end;

위 코드에서

with (PinList.First as IAMStreamConfig) do

이 부분을 C++ 로 변환하지 못하고 있어요.

델파이 도움말을 보면

with Sender as TButton do
begin
  Caption := '&Ok';
  OnClick := OkClick;
end;

와 같은 소스가 있는데, 이를 보고 다른 as 키워드 관련 파스칼은 빌더로 변환을 하였는데,

with (PinList.First as IAMStreamConfig) do

이 부분은 빌더로 변환시 계속 에러가 나오네요.

((IAMStreamConfig *)PinList->First() )->SetFormat(VideoMediaTypes->Items->Item[VideoFormats->ItemIndex]->AMMediaType);

위와 같이 하면

E2031 Cannot cast from '_di_IPin' to 'IAMStreamConfig *'

와 같은 에러가 나구요.

((IAMStreamConfig )PinList->First() )->SetFormat(VideoMediaTypes->Items->Item[VideoFormats->ItemIndex]->AMMediaType);

이렇게 하면

E2352 Cannot create instance of abstract class 'IAMStreamConfig'

와 같이 에러가 납니다.

PinList->First 는 메쏘드라서 PinList->First() 로 했구요.

혹시 해서 dynamic_cast , static_cast 등등을 해보아도 같은 에러가 발생하네요.

델파이 코드는 에러 없이 정상 동작하구 있구요.

as 에 관련된 다른 코드는 빌더로 변환해서 모두 정상 동작하는데, 위 코드만 위와 같은 에러가 발생하고 있어요.

((IAMStreamConfig *)PinList->First() )

요 부분만 해결하면 될텐데...애구 넘 어려워요..

어떻게 변환해야 할까요? 꼭 좀 도와주세요...

즐거운 추석 명절 보내시구요..

^^
1  COMMENTS
  • Profile
    박상윤 2004.09.29 06:35
    C++하고 델파이는 사용법이 좀 틀리져.. 그리구.. Del5가지는 As 키워드를
    사용하지 못했습니다.
    AS를 쓰면 편하지여 그러나 기본적인 것은 QureyInterface라는 넘 입니다.,
    컴기반이라 기본적 모든 언어에서  지원하는 거져..
    아마도 FirstFin을 얻으신다음 QureyInterface를 사용하여 IAMStreamConfig를 얻으 셔야 할듯 합니다.

    답변이