我在写一程序时,运用了DirectDraw的类编写有关游戏的一段代码,但编译的时候出错了,请各位大侠帮忙啊!
error LNK2001: unresolved external symbol _DirectDrawCreate@12
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

解决方案 »

  1.   

    看看LIBCD.lib库是否在工程中加上
      

  2.   

    代码如下:我添加了以上的库文件还是编译通不过,有大侠可以帮忙吧,谢谢!对了一定给分啦
    #include <windows.h>
    #include <windowsx.h>
    #include <ddraw.h>//全局变量
    LPDIRECTDRAW lpDD; //DirectDraw对象
    LPDIRECTDRAWSURFACE lpDDSPrimary ; //DirectDraw主表面
    LPDIRECTDRAWSURFACE lpDDSBack ; //后台缓冲表面
    HDC hdc ;
    char szMsg1[]="我的第一个DirectDraw程序" ;
    char szMsg2[]="按ESC退出" ;BOOL bActive = TRUE ;
    HWND hwnd ;//函数声明
    LRESULT CALLBACK WinProc ( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) ;
    BOOL InitWindow ( HINSTANCE hInstance, int nCmdShow ) ;
    BOOL InitDDraw ( void ) ; //初始化DirectX
    void FreeDDraw ( void ) ; //释放DirectX对象
    void MainLoop ( void ) ; //游戏主循环//-------------------------------------------------------
    //函数:WinMain()
    //功能:Win32应用程序入口函数.进行初始化工作,处理消息循环
    //-------------------------------------------------------
    int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow )
    {
    MSG msg ;

    //初始化主窗口
    if ( !InitWindow(hInstance,nCmdShow) )
    return FALSE ;

    //初始化DirectDraw环境,并实现DirectDraw功能
    if ( !InitDDraw() ){
    MessageBox ( GetActiveWindow(), "初始化DirectDraw过程中出错!", "Error", MB_OK ) ;
    FreeDDraw () ;
    DestroyWindow ( GetActiveWindow() ) ;
    return FALSE ;
    }

    while(1){
    if ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) ){ //如果有消息就处理消息
    if ( !GetMessage(&msg, NULL, 0, 0 ) ) 
    return msg.wParam;
    TranslateMessage ( &msg ); 
    DispatchMessage ( &msg );
    }
    else if(bActive){ //如果程序处于激活状态,进入游戏主循环

    MainLoop(); 
    }
    //等待消息
    else WaitMessage();
    }
    return msg.wParam ;
    }//--------------------------------------
    //函数:InitWindow()
    //功能:创建主窗口
    //--------------------------------------
    static BOOL InitWindow ( HINSTANCE hInstance, int nCmdShow )
    {
    // HWND hwnd ; //窗口句柄
    WNDCLASS wc ; //窗口类结构

    //填充窗口类结构
    wc.style = 0 ;
    wc.lpfnWndProc = WinProc ;
    wc.cbClsExtra = 0 ;
    wc.cbWndExtra = 0 ;
    wc.hInstance = hInstance ;
    wc.hIcon = LoadIcon ( hInstance, IDI_APPLICATION ) ;
    wc.hCursor = LoadCursor ( NULL, IDC_ARROW ) ;
    wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH) ;
    wc.lpszMenuName = NULL ;
    wc.lpszClassName = "dxHello" ;

    //注册窗口类
    RegisterClass ( &wc ) ;
    //创建主窗口
    hwnd = CreateWindowEx ( 0, "dxHello", "", WS_POPUP, 
    0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),
    NULL, NULL, hInstance, NULL ) ;

    if ( !hwnd )
    return FALSE ;
    ShowWindow ( hwnd, nCmdShow ) ;
    UpdateWindow ( hwnd ) ;

    return TRUE ;
    }//--------------------------------------------------
    //函数:WinProc()
    //功能:处理主窗口消息
    //--------------------------------------------------
    LRESULT CALLBACK WinProc ( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
    {


    switch ( message ){

    case WM_ACTIVATEAPP:
    bActive = wParam;
    break;

    case WM_KEYDOWN: //击键消息
    switch ( wParam ){
    case VK_ESCAPE:
    PostMessage ( hWnd, WM_CLOSE, 0, 0 ) ;
    break ;
    }
    break ;

    case WM_SETCURSOR:
    SetCursor ( NULL ) ;
    return TRUE ;

    case WM_DESTROY: //退出消息
    FreeDDraw () ;
    PostQuitMessage ( 0 ) ;
    break ;
    }

    //调用缺省消息处理过程
    return DefWindowProc ( hWnd, message, wParam, lParam ) ;
    }//----------------------------------------------------------------
    //函数: InitDDraw()
    //功能: 初始化DirectDraw环境并实现其功能.包括:创建DirectDraw对象,
    //设置显示模式,创建主表面
    //----------------------------------------------------------------
    BOOL InitDDraw (void)
    {
    DDSURFACEDESC ddsd ; //表面描述
    DDSCAPS ddscaps ;
    // HDC hdc ; //设备环境句柄
    //创建DirectDraw对象
    if ( DirectDrawCreate( NULL,&lpDD, NULL)!=DD_OK )
    return FALSE ;
    //取得独占和全屏模式
    if ( lpDD->SetCooperativeLevel(GetActiveWindow(),DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN)!=DD_OK )
    return FALSE ;
    //设置显示模式
    if ( lpDD->SetDisplayMode(640,480,8)!=DD_OK)
    return FALSE ;
    //填充主表面信息
    ZeroMemory( &ddsd, sizeof( ddsd ) );
    ZeroMemory( &ddscaps, sizeof( ddscaps ) );

    ddsd.dwSize = sizeof(ddsd) ;
    ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT ;
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX ;
    ddsd.dwBackBufferCount = 1 ;
    //创建主表面对象
    if ( lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL)!=DD_OK )
    return FALSE ;
    //提取后台缓存表面指针
    ddscaps.dwCaps = DDSCAPS_BACKBUFFER ;
    if ( lpDDSPrimary->GetAttachedSurface ( &ddscaps, &lpDDSBack )!=DD_OK )
    return FALSE ;




    return TRUE ;
    }//-------------------------------------------------------
    //函数:FreeDDraw()
    //功能:释放所有的DirectDraw对象
    //-------------------------------------------------------
    void FreeDDraw(void)
    {
    if ( lpDD!=NULL ){
    if ( lpDDSPrimary!=NULL ){
    lpDDSPrimary->Release() ;
    lpDDSPrimary = NULL ;
    }
    lpDD->Release() ;
    lpDD = NULL ;
    }
    }
    //-------------------------------------------------------
    //函数:MainLoop()
    //功能:游戏主循环
    //-------------------------------------------------------
    void MainLoop (void)
    {
    static int i = 0;


    //后台缓冲表面上的操作
    if ( lpDDSBack->GetDC(&hdc)==DD_OK ){
    SetBkColor ( hdc, RGB(0+i,255-i,0+i) ) ;
    SetTextColor ( hdc, RGB( 0+i,0+i,255-i) ) ;
    TextOut ( hdc, 220, 200, szMsg1, lstrlen(szMsg1) ) ;
    TextOut ( hdc, 280, 220, szMsg2, lstrlen(szMsg2) ) ;
    lpDDSBack->ReleaseDC (hdc) ;
    i+=10 ;
    if ( i>255) i=0 ;
    }
    if (lpDDSPrimary->Flip(NULL,0)!=DD_OK){ //一经Flip,两个表面的指针互换!lpDDSPrimary指向后台表面,所以
    FreeDDraw() ; //你就看到刚才在后台表面上写的字了,而lpDDSBack指向了原来的前台主表面
    PostQuitMessage(0); //把它掉到后台进行操作 

    }

    }
      

  3.   

    弱弱地问一下:装了direct sdk没有
    很像是没装的症状
      

  4.   

    请问dkight(黑剑),哪里有direct sdk下载安装的
      

  5.   

    大汗
    不装的话,就没法link 成功啦,就是这个症状,上microsoft下一个去
      

  6.   

    装好后按楼上的方法加入ddraw.lib就是了
      

  7.   

    真是不好意思,还是没有完全解决,还有错误,如下
    Linking...
    LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
    Debug/aa.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
    请以上大侠再帮忙