今天试了一下CLion代替VS,但这个构建失败了,不知道为啥
我看了这个地方,IDE没有报错:
d3d = Direct3DCreate9(D3D_SDK_VERSION);
构建结果:
#include <ctime>
#include <d3d9.h>
#include <windows.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "d3d9.lib")
// 项目设置
const string c_appTitle = "Direct3D_Windowed";
const int c_screenWidth = 1024;
const int c_screenHeight = 768;
// Direct3D设置
LPDIRECT3D9 d3d = NULL;
LPDIRECT3DDEVICE9 d3ddev = NULL;
bool gameOver = false;
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
// 游戏初始化
bool Game_Init(HWND hwnd) {
// 初始化d3d
d3d = Direct3DCreate9(D3D_SDK_VERSION);
if (d3d == NULL) {
MessageBox(hwnd, "无法初始化direct3d", "错误", MB_OK);
return FALSE;
}
// 设置d3d
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferWidth = c_screenWidth;
d3dpp.BackBufferHeight = c_screenHeight;
d3dpp.hDeviceWindow = hwnd;
d3d->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&d3ddev);
if (d3ddev == NULL) {
MessageBox(hwnd, "无法创建d3d驱动", "d3d驱动错误", MB_OK);
return FALSE;
}
return true;
}
void Game_Run(HWND hwnd) {
// 确保d3d已成功初始化
if (!d3ddev) return;
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255),1.0f,0);
if (d3ddev->BeginScene()) {
// 做什么?
d3ddev->EndScene();
d3ddev->Present(NULL, NULL, NULL, NULL);
}
if (KEYDOWN(VK_ESCAPE)) {
PostMessage(hwnd, WM_DESTROY, 0, 0);
}
}
void Game_End(HWND hwnd) {
if (d3ddev) {
d3ddev->Release();
d3ddev = NULL;
}
if (d3d) {
d3d->Release();
d3d = NULL;
}
}
LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_DESTROY:
gameOver = true;
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc;
MSG msg;
// 设置window属性
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = (WNDPROC)WinProc;
wc.style = 0;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hIcon = NULL;
wc.hIconSm = NULL;
wc.lpszMenuName = NULL;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszClassName = "MainWindowClass";
if (!RegisterClassEx(&wc)) return FALSE;
// 创建窗口
HWND hwnd = CreateWindow("MainWindowClass",
c_appTitle.c_str(),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
c_screenWidth,
c_screenHeight,
(HWND)NULL,
(HMENU)NULL,
hInstance,
(LPVOID)NULL);
if (hwnd == 0) return 0;
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
if (!Game_Init(hwnd)) return 0;
while (!gameOver) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Game_Run(hwnd);
}
Game_End(hwnd);
return msg.wParam;
}
VS能正常运行,但这个不行
谁知道怎么办啊?