안녕하세요..
현재 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() )
요 부분만 해결하면 될텐데...애구 넘 어려워요..
어떻게 변환해야 할까요? 꼭 좀 도와주세요...
즐거운 추석 명절 보내시구요..
^^
사용하지 못했습니다.
AS를 쓰면 편하지여 그러나 기본적인 것은 QureyInterface라는 넘 입니다.,
컴기반이라 기본적 모든 언어에서 지원하는 거져..
아마도 FirstFin을 얻으신다음 QureyInterface를 사용하여 IAMStreamConfig를 얻으 셔야 할듯 합니다.
답변이