做一个项目要用到DirectDraw。项目本身有ddraw.h和ddraw.lib两个文件。而dxguid.lib是从VC6的这个目录下(C:\\Program Files\\Microsoft Visual Studio\\VC98\\LIB\\DXGUID.LIB)找到的,所以不确定是不是DirectDraw所需要的dxguid.lib。然后在对话框工程源文件中添加了下面的代码。#include "ddraw.h" 
#pragma comment(lib, "ddraw.lib") 
#pragma comment(lib, "dxguid.lib")并在【右键点击解决方案---属性---配置属性--链接器---常规---附加库目录】中添加了“/ddraw.lib /dxguid.lib”这两个库的链接。但是却提示错误无法解析的外部符号 _IID_IDirectDraw7,这到底是怎么回事啊???是ddraw.lib或dxguid.lib不起作用???还是其它方面的原因???

解决方案 »

  1.   

    附上我在工程中添加的有关代码,就添加了一个函数,高手帮忙看看是不是这个函数中有什么问题。BOOL CXXXDlg::DirectDraw()
    {
    LPDIRECTDRAW7           lpDD;    // DirectDraw 对象指针
    LPDIRECTDRAWSURFACE7    lpDDSPrimary;  // DirectDraw 主表面指针
    LPDIRECTDRAWSURFACE7    lpDDSOffScr;  // DirectDraw 离屏表面指针
    DDSURFACEDESC2   ddsd;    // DirectDraw 表面描述 // 创建DirectCraw对象
    if (DirectDrawCreateEx(NULL, (VOID**)&lpDD, IID_IDirectDraw7, NULL) != DD_OK) 
    {
    //MessageBox("Error Create DDraw.");
    return FALSE;
    } // 设置协作层
    if (lpDD->SetCooperativeLevel(/*hWnd*/GetDlgItem(STATIC_SHOWVIDEO)->m_hWnd,
    DDSCL_NORMAL | DDSCL_NOWINDOWCHANGES) != DD_OK)
    {
    //MessageBox("Error Create Level.", s);
    return FALSE;
    } // 创建主表面
    ZeroMemory(&ddsd, sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwFlags = DDSD_CAPS;
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
    if (lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL) != DD_OK)
    {
    //MessageBox("Error Create Primary Surface.", s);
    return FALSE;
    } LPDIRECTDRAWCLIPPER  pcClipper;   // Cliper
    if( lpDD->CreateClipper( 0, &pcClipper, NULL ) != DD_OK )
    return FALSE; if( pcClipper->SetHWnd( 0, /*hWnd*/GetDlgItem(STATIC_SHOWVIDEO)->m_hWnd ) != DD_OK )
    {
    pcClipper->Release();
    return FALSE;
    } if( lpDDSPrimary->SetClipper( pcClipper ) != DD_OK )
    {
    pcClipper->Release();
    return FALSE;
    } // Done with clipper
    pcClipper->Release();
    // 创建YUV表面 
    ZeroMemory(&ddsd, sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
    ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
    ddsd.dwWidth = /*drawwidth*/ m_rcClientRect.Width();
    ddsd.dwHeight = /*drawheight*/ m_rcClientRect.Height();
    ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
    ddsd.ddpfPixelFormat.dwFlags  = DDPF_FOURCC | DDPF_YUV ;
    ddsd.ddpfPixelFormat.dwFourCC = MAKEFOURCC('Y','V', '1', '2');
    ddsd.ddpfPixelFormat.dwYUVBitCount = 8;
    if (lpDD->CreateSurface(&ddsd, &lpDDSOffScr, NULL) != DD_OK)
    {
    //MessageBox("Error Create Off Surface.", s);
    return FALSE;
    } return TRUE;
    }
      

  2.   

    按理说 加了 #pragma comment(lib, "dxguid.lib") 就不该会有问题的
      

  3.   


    问题解决了,ddraw.h版本太旧了