Skip to content

Commit 76c7049

Browse files
committed
Initial commit
Call DirectDrawCreate or DirectDrawCreateEx with a GUID of NULL, DDCREATE_EMULATIONONLY or DDCREATE_HARDWAREONLY.
0 parents  commit 76c7049

3 files changed

Lines changed: 71 additions & 0 deletions

File tree

CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
cmake_minimum_required(VERSION 3.7.1)
2+
project("DirectDrawTest" CXX)
3+
4+
add_executable(DirectDrawTest DirectDrawTest.cpp)
5+
target_compile_definitions(DirectDrawTest PRIVATE -DUNICODE -D_UNICODE)
6+
target_link_libraries(DirectDrawTest ddraw.lib dxguid.lib)

DirectDrawTest.bat

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
@echo off
2+
3+
DirectDrawTest.exe
4+
DirectDrawTest.exe /emulationonly
5+
DirectDrawTest.exe /hardwareonly
6+
DirectDrawTest.exe /ex
7+
DirectDrawTest.exe /ex /emulationonly
8+
DirectDrawTest.exe /ex /hardwareonly

DirectDrawTest.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#include <cstdio>
2+
#include <cstdlib>
3+
#include <cwchar>
4+
5+
#include <ddraw.h>
6+
7+
int wmain(int argc, wchar_t **argv)
8+
{
9+
bool useDirectDrawCreateEx = false;
10+
const wchar_t *funcDesc = L"DirectDrawCreate";
11+
GUID *guid = nullptr;
12+
const wchar_t *guidDesc = L"NULL";
13+
14+
// Parse command line arguments
15+
for (int i = 1; i < argc; ++i)
16+
{
17+
if (wcsicmp(argv[i], L"/ex") == 0)
18+
{
19+
useDirectDrawCreateEx = true;
20+
funcDesc = L"DirectDrawCreateEx";
21+
}
22+
else if (wcsicmp(argv[i], L"/emulationonly") == 0)
23+
{
24+
guid = reinterpret_cast<GUID *>(DDCREATE_EMULATIONONLY);
25+
guidDesc = L"DDCREATE_EMULATIONONLY";
26+
}
27+
else if (wcsicmp(argv[i], L"/hardwareonly") == 0)
28+
{
29+
guid = reinterpret_cast<GUID *>(DDCREATE_HARDWAREONLY);
30+
guidDesc = L"DDCREATE_HARDWAREONLY";
31+
}
32+
else
33+
{
34+
std::fwprintf(stderr, L"Invalid command line argument: %s\n", argv[i]);
35+
return EXIT_FAILURE;
36+
}
37+
}
38+
39+
// Call DirectDrawCreate or DirectDrawCreateEx with the specified GUID
40+
HRESULT resultDDC;
41+
if (!useDirectDrawCreateEx)
42+
{
43+
IDirectDraw *lpDD;
44+
resultDDC = DirectDrawCreate(guid, &lpDD, nullptr);
45+
if (resultDDC == DD_OK) lpDD->Release();
46+
}
47+
else
48+
{
49+
IDirectDraw7 *lpDD;
50+
resultDDC = DirectDrawCreateEx(guid,
51+
reinterpret_cast<LPVOID *>(&lpDD), IID_IDirectDraw7, nullptr);
52+
if (resultDDC == DD_OK) lpDD->Release();
53+
}
54+
std::wprintf(L"%s returned 0x%08X for GUID %s\n", funcDesc, resultDDC, guidDesc);
55+
56+
return EXIT_SUCCESS;
57+
}

0 commit comments

Comments
 (0)