2011-07-20 66 views
1

所以我一直在爲這兩個小時的更好的一部分工作,雖然我似乎遵循每個論壇/指南在互聯網上的確切說明,我仍然得到嘗試使用DirectX與Visual Studio 2010使用directX和Visual Studio 2010的鏈接器錯誤

以下鏈接錯誤,是我開始的代碼:

#include <D3DX10.h> 
#include <iostream> 
using namespace std; 

ostream& operator<<(ostream& os, D3DXVECTOR3& v){ 
     os << "(" << v.x << ", " << v.y << ", " << v.z << ")\n";  
     return os; 
} 

int main(){ 
    return 0; 
} 

我已經SDK的下載和安裝,我已經手動設置適當的包括和項目配置屬性中的庫目錄。我還設置了額外的鏈接器輸入的依賴關係:

d3dx10.lib
d3dx10d.lib

不過,我仍然在編譯得到以下錯誤:

1> MSVCRTD.LIB(crtexew。 OBJ):錯誤LNK2019:解析外部符號的WinMain @在函數引用_ _tmainCRTStartup 16

1> C:\用戶\本\文件\的Visual Studio 2010 \項目\ DX實踐\調試\ DX Practice.exe:致命錯誤LNK1120:1未解決外部

任何和所有的幫助表示讚賞。

編輯:將int main()更改爲int WinMain()。新錯誤:

1> c:\ users \ ben \ documents \ visual studio 2010 \ projects \ dx practice \ dx practice \ main.cpp(10):warning C4007:'WinMain':must''__stdcall'

1> C:\用戶\ \視覺工作室2010 \項目\ DX實踐\ DX實踐\ main.cpp中(10)本\文件:錯誤C2731: '的WinMain':功能不能被重載

1> c:\ users \ ben \ documents \ visual studio 2010 \ projects \ dx practice \ dx practice \ main.cpp(10):參見'WinMain'聲明

EDIT2:想通了 -

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 

感謝所有幫助:)

+1

我從來沒有說過'WinMain'被定義爲'main'的方式。 –

+0

爲什麼你需要首先使用'WinMain'?只要保持它'主'。更改鏈接器設置:鏈接器 - >系統 - >子系統 – Ajay

回答

3

除非你使用Visual Studio中的特殊設置,窗口可執行先從WinMain功能,而不是常規main功能。因此,您應該創建一個控制檯應用程序,使用WinMain或使用該設置使用常規main函數。

請注意,實際創建窗口不需要以WinMain開頭。這只是一個Visual Studio公約。

使用常規main的選項位於「項目設置」對話框中的「鏈接器 - >高級」下。它被稱爲「入口點」,並且使用常規main,您使用「mainCRTStartup」作爲值。


如果你堅持要用WinMain,那麼你需要正確地定義它:

int WINAPI WinMain(HINSTANCE hInstance,   // Instance 
        HINSTANCE hPrevInstance,  // Previous Instance 
        LPSTR  lpCmdLine,   // Command Line Parameters 
        int   nCmdShow)   // Window Show State 
+0

這是什麼標準約定?我應該更改選項以使用常規主體,還是使用WinMain? – Slims

+1

@Slims:這取決於你;這是你的代碼。如果你喜歡WinMain,請使用它。如果你不這樣做,只要確保你使用正常的項目設置。就我個人而言,我很久沒有使用WinMain,但這只是我的偏好。話雖如此,WinMain確實提供了一些有用的數據(以前的實例和窗口顯示狀態),根據您的應用程序可能會有用。 –

+0

已注意。非常感謝您的幫助! – Slims

1

如果包括Windows頭文件,則鏈接希望你提供一個WinMain功能,而不是常規main。 WinMain入口點提供了特定於Windows的數據,如HINSTANCE

+1

不正確。控制檯應用程序也可能包含Windows標頭。 – Ajay