2012-12-21 90 views
0

可能重複:
undefined reference to `[email protected]'未定義的引用的WinMain @ 16個未知編譯指示

我運行的代碼塊,最新版本。我試圖編譯我在教程網站中找到的代碼,並且出於某種原因出現錯誤。我將我的項目設置爲DirectX9,並安裝了2010年6月的DirectX SDK。我也收到警告「未知的編譯指示」,即使編譯代碼也會無法正常運行。

// include the basic windows header files and the Direct3D header file 
#include <windows.h> 
#include <windowsx.h> 
#include <d3d9.h> 

// include the Direct3D Library file 
#pragma comment (lib, "d3d9.lib") 

// global declarations 
LPDIRECT3D9 d3d; // the pointer to our Direct3D interface 
LPDIRECT3DDEVICE9 d3ddev; // the pointer to the device class 

// function prototypes 
void initD3D(HWND hWnd); // sets up and initializes Direct3D 
void render_frame(void); // renders a single frame 
void cleanD3D(void); // closes Direct3D and releases memory 

// the WindowProc function prototype 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); 

// this function initializes and prepares Direct3D for use 
void initD3D(HWND hWnd) 
{ 
    d3d = Direct3DCreate9(D3D_SDK_VERSION); // create the Direct3D interface 

    D3DPRESENT_PARAMETERS d3dpp; // create a struct to hold various device information 

    ZeroMemory(&d3dpp, sizeof(d3dpp)); // clear out the struct for use 
    d3dpp.Windowed = TRUE; // program windowed, not fullscreen 
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // discard old frames 
    d3dpp.hDeviceWindow = hWnd; // set the window to be used by Direct3D 

    // create a device class using this information and information from the d3dpp stuct 
    d3d->CreateDevice(D3DADAPTER_DEFAULT, 
         D3DDEVTYPE_HAL, 
         hWnd, 
         D3DCREATE_SOFTWARE_VERTEXPROCESSING, 
         &d3dpp, 
         &d3ddev); 
} 

// this is the function used to render a single frame 
void render_frame(void) 
{ 
    // clear the window to a deep blue 
    d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0); 

    d3ddev->BeginScene(); // begins the 3D scene 

    // do 3D rendering on the back buffer here 

    d3ddev->EndScene(); // ends the 3D scene 

    d3ddev->Present(NULL, NULL, NULL, NULL); // displays the created frame 
} 

// this is the function that cleans up Direct3D and COM 
void cleanD3D(void) 
{ 
    d3ddev->Release(); // close and release the 3D device 
    d3d->Release(); // close and release Direct3D 
} 
+0

問題太多了。看起來你只是在猜測。請閱讀初學者的書或教程。投票結束,這不是一個真正的問題。 –

+0

您使用哪種編譯器?你得到的編譯錯誤告訴我它的gcc。無論如何,如果你試圖編寫一個Windows應用程序,你自己一個忙,並得到視覺工作室表達。隨着windows的sdk你有什麼版本的Windows。 – johnathon

回答

0

您可能正在用C++編譯器編譯C程序。 如果是這種情況,則需要將導出的函數聲明爲extern「C」。 例如:

extern "C" int CALLBACK WinMain(...); 
+0

CALLBACK是用於聲明正確調用約定的宏。 – johnathon

+0

但它並不包含extern「C」,這在這種情況下是重要的。 – grebulon

相關問題