2012-12-21 57 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

相关问题