C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[6609] [질문] 완전 초보의 DirectShow 질문요..
한승수 [] 3120 읽음    2001-04-04 18:33
어떤어떤 사정으로 DirectX를 공부할 시간도 없이
DirectShow를 이용해서 피씨카메라를 통해서 화상캡쳐하는 프로그램을
만들어야하게 되었습니다... 하.. ㅠ_ㅠ..

DirectX 8.0a SDK 를 보고 프리뷰 하는 부분까지만 대충 짜봤습니다만..
이상한 Linker Error들이 뜨네요.. ㅠ_ㅠ

염치 없지만 조언을 구합니다..

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    CoInitialize(NULL);

    IVideoWindow  * g_pVW = NULL;
    IMediaControl * g_pMC = NULL;
    IMediaEventEx * g_pME = NULL;
    IGraphBuilder * g_pGraph = NULL;
    ICaptureGraphBuilder2 * g_pCapture = NULL;

    // Create the filter graph.
    CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,
        IID_IGraphBuilder, (void **)&g_pGraph);

    // Create the capture graph builder.
    CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC,
        IID_ICaptureGraphBuilder2, (void **)&g_pCapture);

    g_pGraph->QueryInterface(IID_IMediaControl,(LPVOID *) &g_pMC);
    g_pGraph->QueryInterface(IID_IVideoWindow, (LPVOID *) &g_pVW);
    g_pGraph->QueryInterface(IID_IMediaEvent, (LPVOID *) &g_pME);

    g_pCapture->SetFiltergraph(g_pGraph);

    // Create the system device enumerator.
    ICreateDevEnum *pDevEnum = NULL;
    CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
        IID_ICreateDevEnum, (void **)&pDevEnum);

    // Create an enumerator for video capture devices.
    IEnumMoniker *pClassEnum = NULL;
    pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pClassEnum, 0);

    ULONG cFetched;
    IMoniker *pMoniker = NULL;
    IBaseFilter *pSrc = NULL;
    if (pClassEnum->Next(1, &pMoniker, &cFetched) == S_OK)
    {
        // Bind the first moniker to a filter object.
        pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pSrc);
        pMoniker->Release();
    }
    pClassEnum->Release();
    pDevEnum->Release();

    // pSrc is the capture filter from the previous code example.
    g_pGraph->AddFilter(pSrc, L"Video Capture");

    g_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,
                                 pSrc, NULL, NULL);
    pSrc->Release();

//    g_pVW->put_Owner((long)ghApp);
    g_pVW->put_Owner((OAHWND)Handle);
    g_pVW->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN);
    g_pVW->SetWindowPosition(0, 0, 320, 240);
    g_pVW->put_Visible(OATRUE);

    g_pMC->Run();

    CoUninitialize();
}

소스코드는 위와 같구요..

Linker Error 메세지는

[Linker Error] Unresolved external '_MEDIATYPE_Video' referenced from C:\WORK\DSHOW2\UNIT1.OBJ
[Linker Error] Unresolved external '_PIN_CATEGORY_PREVIEW' referenced from C:\WORK\DSHOW2\UNIT1.OBJ

네요..

아.. 그리고 헤더엔
DShow.h, mtype.h, Uuids.h
이렇게 추가로 include 시켜줬구요..(뒤에 둘은 하나 안하나.. 마찬가지 였습니다만..;;)


그럼 행복한 하루 되세요.. ㅠ_ㅠ

+ -

관련 글 리스트
6609 [질문] 완전 초보의 DirectShow 질문요.. 한승수 3120 2001/04/04
6633         Re:Re:[질문] 완전 초보의 DirectShow 질문요.. 한승수 2393 2001/04/06
8492             Re:Re:Re:[질문] 완전 초보의 DirectShow 질문요.. 닐리리 2620 2001/06/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.