mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Merge branch 'Mauler125:master' into master
This commit is contained in:
commit
e8c339083e
63
external/minhook/include/MinHook.h
vendored
63
external/minhook/include/MinHook.h
vendored
@ -99,45 +99,45 @@ extern "C" {
|
|||||||
// ONCE at the end of your program.
|
// ONCE at the end of your program.
|
||||||
MH_STATUS WINAPI MH_Uninitialize(VOID);
|
MH_STATUS WINAPI MH_Uninitialize(VOID);
|
||||||
|
|
||||||
// Creates a Hook for the specified target function, in disabled state.
|
// Creates a hook for the specified target function, in disabled state.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// pTarget [in] A pointer to the target function, which will be
|
// pTarget [in] A pointer to the target function, which will be
|
||||||
// overridden by the detour function.
|
// overridden by the detour function.
|
||||||
// pDetour [in] A pointer to the detour function, which will override
|
// pDetour [in] A pointer to the detour function, which will override
|
||||||
// the target function.
|
// the target function.
|
||||||
// ppOriginal [out] A pointer to the trampoline function, which will be
|
// ppOriginal [out] A pointer to the trampoline function, which will be
|
||||||
// used to call the original target function.
|
// used to call the original target function.
|
||||||
// This parameter can be NULL.
|
// This parameter can be NULL.
|
||||||
MH_STATUS WINAPI MH_CreateHook(LPVOID pTarget, LPVOID pDetour, LPVOID *ppOriginal);
|
MH_STATUS WINAPI MH_CreateHook(LPVOID pTarget, LPVOID pDetour, LPVOID *ppOriginal);
|
||||||
|
|
||||||
// Creates a Hook for the specified API function, in disabled state.
|
// Creates a hook for the specified API function, in disabled state.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// pszModule [in] A pointer to the loaded module name which contains the
|
// pszModule [in] A pointer to the loaded module name which contains the
|
||||||
// target function.
|
// target function.
|
||||||
// pszTarget [in] A pointer to the target function name, which will be
|
// pszProcName [in] A pointer to the target function name, which will be
|
||||||
// overridden by the detour function.
|
// overridden by the detour function.
|
||||||
// pDetour [in] A pointer to the detour function, which will override
|
// pDetour [in] A pointer to the detour function, which will override
|
||||||
// the target function.
|
// the target function.
|
||||||
// ppOriginal [out] A pointer to the trampoline function, which will be
|
// ppOriginal [out] A pointer to the trampoline function, which will be
|
||||||
// used to call the original target function.
|
// used to call the original target function.
|
||||||
// This parameter can be NULL.
|
// This parameter can be NULL.
|
||||||
MH_STATUS WINAPI MH_CreateHookApi(
|
MH_STATUS WINAPI MH_CreateHookApi(
|
||||||
LPCWSTR pszModule, LPCSTR pszProcName, LPVOID pDetour, LPVOID *ppOriginal);
|
LPCWSTR pszModule, LPCSTR pszProcName, LPVOID pDetour, LPVOID *ppOriginal);
|
||||||
|
|
||||||
// Creates a Hook for the specified API function, in disabled state.
|
// Creates a hook for the specified API function, in disabled state.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// pszModule [in] A pointer to the loaded module name which contains the
|
// pszModule [in] A pointer to the loaded module name which contains the
|
||||||
// target function.
|
// target function.
|
||||||
// pszTarget [in] A pointer to the target function name, which will be
|
// pszProcName [in] A pointer to the target function name, which will be
|
||||||
// overridden by the detour function.
|
// overridden by the detour function.
|
||||||
// pDetour [in] A pointer to the detour function, which will override
|
// pDetour [in] A pointer to the detour function, which will override
|
||||||
// the target function.
|
// the target function.
|
||||||
// ppOriginal [out] A pointer to the trampoline function, which will be
|
// ppOriginal [out] A pointer to the trampoline function, which will be
|
||||||
// used to call the original target function.
|
// used to call the original target function.
|
||||||
// This parameter can be NULL.
|
// This parameter can be NULL.
|
||||||
// ppTarget [out] A pointer to the target function, which will be used
|
// ppTarget [out] A pointer to the target function, which will be used
|
||||||
// with other functions.
|
// with other functions.
|
||||||
// This parameter can be NULL.
|
// This parameter can be NULL.
|
||||||
MH_STATUS WINAPI MH_CreateHookApiEx(
|
MH_STATUS WINAPI MH_CreateHookApiEx(
|
||||||
LPCWSTR pszModule, LPCSTR pszProcName, LPVOID pDetour, LPVOID *ppOriginal, LPVOID *ppTarget);
|
LPCWSTR pszModule, LPCSTR pszProcName, LPVOID pDetour, LPVOID *ppOriginal, LPVOID *ppTarget);
|
||||||
|
|
||||||
@ -183,4 +183,3 @@ extern "C" {
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
BIN
external/minhook/lib/libMinHook.x64.lib
vendored
BIN
external/minhook/lib/libMinHook.x64.lib
vendored
Binary file not shown.
8
license/minhook/AUTHORS.txt
Normal file
8
license/minhook/AUTHORS.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
Tsuda Kageyu <tsuda.kageyu@gmail.com>
|
||||||
|
Creator, maintainer
|
||||||
|
|
||||||
|
Michael Maltsev <leahcimmar@gmail.com>
|
||||||
|
Added "Queue" functions. A lot of bug fixes.
|
||||||
|
|
||||||
|
Andrey Unis <uniskz@gmail.com>
|
||||||
|
Rewrote the hook engine in plain C.
|
81
license/minhook/LICENSE.txt
Normal file
81
license/minhook/LICENSE.txt
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
MinHook - The Minimalistic API Hooking Library for x64/x86
|
||||||
|
Copyright (C) 2009-2017 Tsuda Kageyu.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
||||||
|
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Portions of this software are Copyright (c) 2008-2009, Vyacheslav Patkov.
|
||||||
|
================================================================================
|
||||||
|
Hacker Disassembler Engine 32 C
|
||||||
|
Copyright (c) 2008-2009, Vyacheslav Patkov.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Hacker Disassembler Engine 64 C
|
||||||
|
Copyright (c) 2008-2009, Vyacheslav Patkov.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
@ -1,16 +1,20 @@
|
|||||||
|
#include <string>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include <detours.h>
|
#include <detours.h>
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------
|
/*-----------------------------------------------------------------------------
|
||||||
* _main.cpp
|
* _main.cpp
|
||||||
*-----------------------------------------------------------------------------*/
|
*-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// Print the error message to the console if any
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
void PrintLastError()
|
void PrintLastError()
|
||||||
{
|
{
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
// Get the error message, if any.
|
|
||||||
DWORD errorMessageID = ::GetLastError();
|
DWORD errorMessageID = ::GetLastError();
|
||||||
if (errorMessageID == 0)
|
if (errorMessageID == 0)
|
||||||
{
|
{
|
||||||
@ -25,19 +29,21 @@ void PrintLastError()
|
|||||||
LocalFree(messageBuffer);
|
LocalFree(messageBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LaunchR5Apex()
|
//-----------------------------------------------------------------------------
|
||||||
|
// Purpose case switch:
|
||||||
|
// * Launch the game in user specified mode and state.
|
||||||
|
// * Load specified command line arguments from a file on the disk.
|
||||||
|
// * Format the file paths for the game exe and specified hook dll.
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
bool LaunchR5Apex(LAUNCHMODE lMode, LAUNCHSTATE lState)
|
||||||
{
|
{
|
||||||
|
BOOL result;
|
||||||
|
|
||||||
FILE* sLaunchParams;
|
FILE* sLaunchParams;
|
||||||
CHAR sArgumentBuffer[1024] = { 0 };
|
CHAR sArgumentBuffer[1024] = { 0 };
|
||||||
CHAR sCommandDirectory[MAX_PATH];
|
CHAR sCommandDirectory[MAX_PATH];
|
||||||
LPSTR sCommandLine = sCommandDirectory;
|
LPSTR sCommandLine = sCommandDirectory;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
// '+exec autoexec -dev -fnf -noplatform'
|
|
||||||
fopen_s(&sLaunchParams, "platform\\cfg\\startup_debug.cfg", "r");
|
|
||||||
|
|
||||||
BOOL result;
|
|
||||||
|
|
||||||
CHAR sDevDll[MAX_PATH];
|
CHAR sDevDll[MAX_PATH];
|
||||||
CHAR sGameExe[MAX_PATH];
|
CHAR sGameExe[MAX_PATH];
|
||||||
CHAR sGameDirectory[MAX_PATH];
|
CHAR sGameDirectory[MAX_PATH];
|
||||||
@ -49,24 +55,69 @@ bool LaunchR5Apex()
|
|||||||
// Initialize the startup info structure.
|
// Initialize the startup info structure.
|
||||||
StartupInfo.cb = sizeof(STARTUPINFO);
|
StartupInfo.cb = sizeof(STARTUPINFO);
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
GetCurrentDirectory(MAX_PATH, sGameDirectory);
|
||||||
// Load command line arguments from a file on the disk.
|
switch (lMode)
|
||||||
if (sLaunchParams)
|
|
||||||
{
|
{
|
||||||
while (fread(sArgumentBuffer, sizeof(sArgumentBuffer), 1, sLaunchParams) != NULL)
|
case LAUNCHMODE::LM_DEDI:
|
||||||
{
|
{
|
||||||
fclose(sLaunchParams);
|
fopen_s(&sLaunchParams, "platform\\cfg\\startup_dedi.cfg", "r");
|
||||||
|
if (sLaunchParams)
|
||||||
|
{
|
||||||
|
while (fread(sArgumentBuffer, sizeof(sArgumentBuffer), 1, sLaunchParams) != NULL)
|
||||||
|
{
|
||||||
|
fclose(sLaunchParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(sGameExe, sizeof(sGameExe), "%s\\r5apex.exe", sGameDirectory);
|
||||||
|
snprintf(sDevDll, sizeof(sDevDll), "%s\\dedicated.dll", sGameDirectory);
|
||||||
|
snprintf(sCommandLine, sizeof(sCommandDirectory), "%s\\r5apex.exe %s", sGameDirectory, sArgumentBuffer);
|
||||||
|
printf("*** LAUNCHING DEDICATED SERVER ***\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case LAUNCHMODE::LM_DEBUG:
|
||||||
|
{
|
||||||
|
fopen_s(&sLaunchParams, "platform\\cfg\\startup_debug.cfg", "r");
|
||||||
|
if (sLaunchParams)
|
||||||
|
{
|
||||||
|
while (fread(sArgumentBuffer, sizeof(sArgumentBuffer), 1, sLaunchParams) != NULL)
|
||||||
|
{
|
||||||
|
fclose(sLaunchParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(sGameExe, sizeof(sGameExe), "%s\\r5apex.exe", sGameDirectory);
|
||||||
|
snprintf(sDevDll, sizeof(sDevDll), "%s\\r5dev.dll", sGameDirectory);
|
||||||
|
snprintf(sCommandLine, sizeof(sCommandDirectory), "%s\\r5apex.exe %s", sGameDirectory, sArgumentBuffer);
|
||||||
|
printf("*** LAUNCHING GAME [DEBUG] ***\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case LAUNCHMODE::LM_GAME:
|
||||||
|
{
|
||||||
|
fopen_s(&sLaunchParams, "platform\\cfg\\startup_retail.cfg", "r");
|
||||||
|
if (sLaunchParams)
|
||||||
|
{
|
||||||
|
while (fread(sArgumentBuffer, sizeof(sArgumentBuffer), 1, sLaunchParams) != NULL)
|
||||||
|
{
|
||||||
|
fclose(sLaunchParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(sGameExe, sizeof(sGameExe), "%s\\r5apex.exe", sGameDirectory);
|
||||||
|
snprintf(sDevDll, sizeof(sDevDll), "%s\\r5detours.dll", sGameDirectory);
|
||||||
|
snprintf(sCommandLine, sizeof(sCommandDirectory), "%s\\r5apex.exe %s", sGameDirectory, sArgumentBuffer);
|
||||||
|
printf("*** LAUNCHING GAME [RETAIL] ***\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
printf("*** ERROR: NO LAUNCHMODE SPECIFIED ***\n");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// Format the file paths for the game exe and dll.
|
// Print the filepaths and arguments.
|
||||||
GetCurrentDirectory(MAX_PATH, sGameDirectory);
|
|
||||||
snprintf(sGameExe, sizeof(sGameExe), "%s\\r5apex.exe", sGameDirectory);
|
|
||||||
snprintf(sDevDll, sizeof(sDevDll), "%s\\r5detours.dll", sGameDirectory);
|
|
||||||
snprintf(sCommandLine, sizeof(sCommandDirectory), "%s\\r5apex.exe %s", sGameDirectory, sArgumentBuffer);
|
|
||||||
|
|
||||||
printf("Launching Apex Dev...\n");
|
|
||||||
printf(" - CWD: %s\n", sGameDirectory);
|
printf(" - CWD: %s\n", sGameDirectory);
|
||||||
printf(" - EXE: %s\n", sGameExe);
|
printf(" - EXE: %s\n", sGameExe);
|
||||||
printf(" - DLL: %s\n", sDevDll);
|
printf(" - DLL: %s\n", sDevDll);
|
||||||
@ -122,7 +173,23 @@ bool LaunchR5Apex()
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
int main(int argc, char* argv[], char* envp[])
|
int main(int argc, char* argv[], char* envp[])
|
||||||
{
|
{
|
||||||
LaunchR5Apex();
|
for (int i = 1; i < argc; ++i)
|
||||||
Sleep(1000);
|
{
|
||||||
return 0;
|
std::string arg = argv[i];
|
||||||
}
|
if ((arg == "-dedicated") || (arg == "-dedi"))
|
||||||
|
{
|
||||||
|
LaunchR5Apex(LAUNCHMODE::LM_DEDI, LAUNCHSTATE::LS_CHEATS);
|
||||||
|
Sleep(2000);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
if ((arg == "-debug") || (arg == "-dbg"))
|
||||||
|
{
|
||||||
|
LaunchR5Apex(LAUNCHMODE::LM_DEBUG, LAUNCHSTATE::LS_CHEATS);
|
||||||
|
Sleep(2000);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LaunchR5Apex(LAUNCHMODE::LM_GAME, LAUNCHSTATE::LS_CHEATS);
|
||||||
|
Sleep(2000);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
21
r5launcher/main.h
Normal file
21
r5launcher/main.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Launch and inject specified dll based on launchmode
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
enum class LAUNCHMODE : int
|
||||||
|
{
|
||||||
|
LM_GAME, // Dev DLL
|
||||||
|
LM_DEDI, // Dedi DLL
|
||||||
|
LM_DEBUG // Debug DLL
|
||||||
|
};
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// [TODO] Launch with FCVAR_DEVELOPMENTONLY and FCVAR_CHEATS disabled/enabled
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
enum class LAUNCHSTATE : int
|
||||||
|
{
|
||||||
|
LS_NOCHEATS, // Disabled cheats
|
||||||
|
LS_CHEATS, // Enable cheats
|
||||||
|
LS_DEBUG // Enable debug
|
||||||
|
};
|
@ -165,6 +165,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="main.cpp" />
|
<ClCompile Include="main.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="main.h" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
@ -19,4 +19,9 @@
|
|||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="main.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
Loading…
x
Reference in New Issue
Block a user