natvis support in build system + some natvis
This commit is contained in:
1 parent
2fd675cf11
commit
1367146503
5 files changed
+137
-6
No files matched your search
@@ -3,4 +3,7 @@
|
|||||||
<LLVMInstallDir>C:\Program Files\LLVM</LLVMInstallDir>
|
<LLVMInstallDir>C:\Program Files\LLVM</LLVMInstallDir>
|
||||||
<LLVMToolsVersion>19.1.0</LLVMToolsVersion>
|
<LLVMToolsVersion>19.1.0</LLVMToolsVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Natvis Include="$(MSBuildThisFileDirectory)Natvis\*.natvis" />
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
||||||
|
<Type Name="NonNullPtr<void>">
|
||||||
|
<DisplayString>{(void*)InternalPtr}</DisplayString>
|
||||||
|
<Expand>
|
||||||
|
<Item Name="[ptr]">InternalPtr</Item>
|
||||||
|
</Expand>
|
||||||
|
</Type>
|
||||||
|
|
||||||
|
<Type Name="NonNullPtr<*>">
|
||||||
|
<DisplayString Condition="InternalPtr == 0"><null></DisplayString>
|
||||||
|
<DisplayString>{InternalPtr}</DisplayString>
|
||||||
|
<Expand>
|
||||||
|
<ExpandedItem>InternalPtr</ExpandedItem>
|
||||||
|
</Expand>
|
||||||
|
</Type>
|
||||||
|
|
||||||
|
<Type Name="VectorArena<*,*>">
|
||||||
|
<DisplayString>{{ size={Count} capacity={Capacity} }}</DisplayString>
|
||||||
|
<Expand>
|
||||||
|
<Item Name="[size]">Count</Item>
|
||||||
|
<Item Name="[capacity]">Capacity</Item>
|
||||||
|
<ArrayItems>
|
||||||
|
<Size>Count</Size>
|
||||||
|
<ValuePointer>Data</ValuePointer>
|
||||||
|
</ArrayItems>
|
||||||
|
</Expand>
|
||||||
|
</Type>
|
||||||
|
|
||||||
|
<Type Name="Arena">
|
||||||
|
<DisplayString Condition="Name != 0">{Name,s} (used={Position} / reserved={ReserveSize})</DisplayString>
|
||||||
|
<DisplayString Condition="Name == 0">Arena (used={Position} / reserved={ReserveSize})</DisplayString>
|
||||||
|
<Expand>
|
||||||
|
<Item Name="[name]" Condition="Name != 0">Name,s</Item>
|
||||||
|
<Item Name="[used]">Position</Item>
|
||||||
|
<Item Name="[committed]">Committed</Item>
|
||||||
|
<Item Name="[reserved]">ReserveSize</Item>
|
||||||
|
<Item Name="[alignment]">Alignment</Item>
|
||||||
|
<Item Name="Current">Current</Item>
|
||||||
|
<Item Name="Previous">Previous</Item>
|
||||||
|
</Expand>
|
||||||
|
</Type>
|
||||||
|
</AutoVisualizer>
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
||||||
|
<Type Name="String8">
|
||||||
|
<DisplayString Condition="Str == 0 || Size == 0"><empty></DisplayString>
|
||||||
|
<DisplayString>{Str,[Size]s8}</DisplayString>
|
||||||
|
<StringView>Str,[Size]s8</StringView>
|
||||||
|
<Expand>
|
||||||
|
<Item Name="[size]">Size</Item>
|
||||||
|
<ArrayItems>
|
||||||
|
<Size>Size</Size>
|
||||||
|
<ValuePointer>Str</ValuePointer>
|
||||||
|
</ArrayItems>
|
||||||
|
</Expand>
|
||||||
|
</Type>
|
||||||
|
|
||||||
|
<Type Name="String16">
|
||||||
|
<DisplayString Condition="Str == 0 || Size == 0"><empty></DisplayString>
|
||||||
|
<DisplayString>{Str,[Size]su}</DisplayString>
|
||||||
|
<StringView>Str,[Size]su</StringView>
|
||||||
|
<Expand>
|
||||||
|
<Item Name="[size]">Size</Item>
|
||||||
|
<ArrayItems>
|
||||||
|
<Size>Size</Size>
|
||||||
|
<ValuePointer>Str</ValuePointer>
|
||||||
|
</ArrayItems>
|
||||||
|
</Expand>
|
||||||
|
</Type>
|
||||||
|
|
||||||
|
<Type Name="StringBuffer">
|
||||||
|
<DisplayString Condition="Str == 0 || Size == 0"><empty> (capacity={Capacity})</DisplayString>
|
||||||
|
<DisplayString>{Str,[Size]s8} (capacity={Capacity})</DisplayString>
|
||||||
|
<StringView>Str,[Size]s8</StringView>
|
||||||
|
<Expand>
|
||||||
|
<Item Name="[size]">Size</Item>
|
||||||
|
<Item Name="[capacity]">Capacity</Item>
|
||||||
|
<ArrayItems>
|
||||||
|
<Size>Size</Size>
|
||||||
|
<ValuePointer>Str</ValuePointer>
|
||||||
|
</ArrayItems>
|
||||||
|
</Expand>
|
||||||
|
</Type>
|
||||||
|
</AutoVisualizer>
|
||||||
+14
-6
@@ -9,7 +9,7 @@ cd /d "%~dp0\.."
|
|||||||
|
|
||||||
set BUILD_TOOL=misc\build_system.exe
|
set BUILD_TOOL=misc\build_system.exe
|
||||||
set BUILD_SRC=tools\build_system.c
|
set BUILD_SRC=tools\build_system.c
|
||||||
set BUILD_TOOL_VER=1.6
|
set BUILD_TOOL_VER=1.7
|
||||||
|
|
||||||
set COMMAND_GEN_VS=0
|
set COMMAND_GEN_VS=0
|
||||||
|
|
||||||
@@ -177,6 +177,14 @@ if /i "!CFG!"=="Debug" (
|
|||||||
|
|
||||||
set COMMON_LIBS=kernel32.lib user32.lib Advapi32.lib gdi32.lib dxguid.lib Ws2_32.lib dxgi.lib imm32.lib dwmapi.lib d3dcompiler.lib dxcompiler.lib shell32.lib winhttp.lib delayimp.lib
|
set COMMON_LIBS=kernel32.lib user32.lib Advapi32.lib gdi32.lib dxguid.lib Ws2_32.lib dxgi.lib imm32.lib dwmapi.lib d3dcompiler.lib dxcompiler.lib shell32.lib winhttp.lib delayimp.lib
|
||||||
|
|
||||||
|
set NATVIS_LINK_FLAGS=
|
||||||
|
for %%F in (Natvis\*.natvis) do (
|
||||||
|
set "NATVIS_LINK_FLAGS=!NATVIS_LINK_FLAGS! /NATVIS:%%F"
|
||||||
|
)
|
||||||
|
if exist External\imgui\misc\debuggers\imgui.natvis (
|
||||||
|
set "NATVIS_LINK_FLAGS=!NATVIS_LINK_FLAGS! /NATVIS:External\imgui\misc\debuggers\imgui.natvis"
|
||||||
|
)
|
||||||
|
|
||||||
if defined IMGUI_UNITY_SRCS (
|
if defined IMGUI_UNITY_SRCS (
|
||||||
echo STEP Compiling ImGui Shared Objs [!CFG!]>>"!PLAN_FILE!"
|
echo STEP Compiling ImGui Shared Objs [!CFG!]>>"!PLAN_FILE!"
|
||||||
echo OUTPUT Intermediate\x64-!CFG!\ImGui_Unity1.obj>>"!PLAN_FILE!"
|
echo OUTPUT Intermediate\x64-!CFG!\ImGui_Unity1.obj>>"!PLAN_FILE!"
|
||||||
@@ -206,7 +214,7 @@ set "JULIET_LINK_CMD=!LINK_FLAGS!"
|
|||||||
echo STEP Building Juliet.dll [!CFG!]>>"!PLAN_FILE!"
|
echo STEP Building Juliet.dll [!CFG!]>>"!PLAN_FILE!"
|
||||||
echo OUTPUT bin\x64-!CFG!\Juliet.dll>>"!PLAN_FILE!"
|
echo OUTPUT bin\x64-!CFG!\Juliet.dll>>"!PLAN_FILE!"
|
||||||
echo DEPENDS Juliet^|External\imgui^|Intermediate\x64-!CFG!\Juliet_PCH.obj>>"!PLAN_FILE!"
|
echo DEPENDS Juliet^|External\imgui^|Intermediate\x64-!CFG!\Juliet_PCH.obj>>"!PLAN_FILE!"
|
||||||
echo COMMAND %COMPILER% !JULIET_LINK_CMD! /DIMGUI_API=__declspec^(dllexport^) /DJULIET_EXPORT /LD /Fe"bin\x64-!CFG!\Juliet.dll" !JULIET_INPUTS! Intermediate\x64-!CFG!\Juliet_PCH.obj %IMGUI_OBJS% /link %COMMON_LIBS% /INCREMENTAL /ILK:Intermediate\x64-!CFG!\Juliet.ilk /PDB:Intermediate\x64-!CFG!\Juliet.pdb>>"!PLAN_FILE!"
|
echo COMMAND %COMPILER% !JULIET_LINK_CMD! /DIMGUI_API=__declspec^(dllexport^) /DJULIET_EXPORT /LD /Fe"bin\x64-!CFG!\Juliet.dll" !JULIET_INPUTS! Intermediate\x64-!CFG!\Juliet_PCH.obj %IMGUI_OBJS% /link %COMMON_LIBS% !NATVIS_LINK_FLAGS! /INCREMENTAL /ILK:Intermediate\x64-!CFG!\Juliet.ilk /PDB:Intermediate\x64-!CFG!\Juliet.pdb>>"!PLAN_FILE!"
|
||||||
|
|
||||||
:: --- Game.dll ---
|
:: --- Game.dll ---
|
||||||
if !BUILD_GAME_DLL! equ 1 (
|
if !BUILD_GAME_DLL! equ 1 (
|
||||||
@@ -231,7 +239,7 @@ if !BUILD_GAME_DLL! equ 1 (
|
|||||||
echo STEP Building !GAME_DLL_NAME!.dll [!CFG!]>>"!PLAN_FILE!"
|
echo STEP Building !GAME_DLL_NAME!.dll [!CFG!]>>"!PLAN_FILE!"
|
||||||
echo OUTPUT bin\x64-!CFG!\!GAME_DLL_NAME!.dll>>"!PLAN_FILE!"
|
echo OUTPUT bin\x64-!CFG!\!GAME_DLL_NAME!.dll>>"!PLAN_FILE!"
|
||||||
echo DEPENDS Game^|Juliet^|External\imgui^|Intermediate\x64-!CFG!\Game_PCH.obj>>"!PLAN_FILE!"
|
echo DEPENDS Game^|Juliet^|External\imgui^|Intermediate\x64-!CFG!\Game_PCH.obj>>"!PLAN_FILE!"
|
||||||
echo COMMAND %COMPILER% !GAME_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /DJULIET_EXPORT /LD /Fe"bin\x64-!CFG!\!GAME_DLL_NAME!.dll" !GAME_INPUTS! Intermediate\x64-!CFG!\Game_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib /INCREMENTAL /ILK:Intermediate\x64-!CFG!\!GAME_DLL_NAME!.ilk /PDB:Intermediate\x64-!CFG!\!GAME_DLL_NAME!.pdb>>"!PLAN_FILE!"
|
echo COMMAND %COMPILER% !GAME_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /DJULIET_EXPORT /LD /Fe"bin\x64-!CFG!\!GAME_DLL_NAME!.dll" !GAME_INPUTS! Intermediate\x64-!CFG!\Game_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib !NATVIS_LINK_FLAGS! /INCREMENTAL /ILK:Intermediate\x64-!CFG!\!GAME_DLL_NAME!.ilk /PDB:Intermediate\x64-!CFG!\!GAME_DLL_NAME!.pdb>>"!PLAN_FILE!"
|
||||||
)
|
)
|
||||||
|
|
||||||
:: --- JulietApp.exe ---
|
:: --- JulietApp.exe ---
|
||||||
@@ -254,7 +262,7 @@ if !TARGET_JULIET! equ 1 (
|
|||||||
echo STEP Building JulietApp.exe [!CFG!]>>"!PLAN_FILE!"
|
echo STEP Building JulietApp.exe [!CFG!]>>"!PLAN_FILE!"
|
||||||
echo OUTPUT bin\x64-!CFG!\JulietApp.exe>>"!PLAN_FILE!"
|
echo OUTPUT bin\x64-!CFG!\JulietApp.exe>>"!PLAN_FILE!"
|
||||||
echo DEPENDS JulietApp^|Game^|Juliet^|External\imgui^|Intermediate\x64-!CFG!\JulietApp_PCH.obj>>"!PLAN_FILE!"
|
echo DEPENDS JulietApp^|Game^|Juliet^|External\imgui^|Intermediate\x64-!CFG!\JulietApp_PCH.obj>>"!PLAN_FILE!"
|
||||||
echo COMMAND %COMPILER% !APP_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\JulietApp.exe" !APP_INPUTS! Intermediate\x64-!CFG!\JulietApp_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib /SUBSYSTEM:CONSOLE /INCREMENTAL /ILK:Intermediate\x64-!CFG!\JulietApp.ilk /PDB:Intermediate\x64-!CFG!\JulietApp.pdb>>"!PLAN_FILE!"
|
echo COMMAND %COMPILER% !APP_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\JulietApp.exe" !APP_INPUTS! Intermediate\x64-!CFG!\JulietApp_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib !NATVIS_LINK_FLAGS! /SUBSYSTEM:CONSOLE /INCREMENTAL /ILK:Intermediate\x64-!CFG!\JulietApp.ilk /PDB:Intermediate\x64-!CFG!\JulietApp.pdb>>"!PLAN_FILE!"
|
||||||
)
|
)
|
||||||
|
|
||||||
:: --- Romeo.exe ---
|
:: --- Romeo.exe ---
|
||||||
@@ -277,7 +285,7 @@ if !TARGET_ROMEO! equ 1 (
|
|||||||
echo STEP Building Romeo.exe [!CFG!]>>"!PLAN_FILE!"
|
echo STEP Building Romeo.exe [!CFG!]>>"!PLAN_FILE!"
|
||||||
echo OUTPUT bin\x64-!CFG!\Romeo.exe>>"!PLAN_FILE!"
|
echo OUTPUT bin\x64-!CFG!\Romeo.exe>>"!PLAN_FILE!"
|
||||||
echo DEPENDS Romeo^|Juliet^|External\imgui^|Intermediate\x64-!CFG!\Romeo_PCH.obj>>"!PLAN_FILE!"
|
echo DEPENDS Romeo^|Juliet^|External\imgui^|Intermediate\x64-!CFG!\Romeo_PCH.obj>>"!PLAN_FILE!"
|
||||||
echo COMMAND %COMPILER% !ROMEO_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\Romeo.exe" !ROMEO_INPUTS! Intermediate\x64-!CFG!\Romeo_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib /SUBSYSTEM:WINDOWS /INCREMENTAL /ILK:Intermediate\x64-!CFG!\Romeo.ilk /PDB:Intermediate\x64-!CFG!\Romeo.pdb>>"!PLAN_FILE!"
|
echo COMMAND %COMPILER% !ROMEO_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\Romeo.exe" !ROMEO_INPUTS! Intermediate\x64-!CFG!\Romeo_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib !NATVIS_LINK_FLAGS! /SUBSYSTEM:WINDOWS /INCREMENTAL /ILK:Intermediate\x64-!CFG!\Romeo.ilk /PDB:Intermediate\x64-!CFG!\Romeo.pdb>>"!PLAN_FILE!"
|
||||||
)
|
)
|
||||||
|
|
||||||
:: --- JulietShaderCompiler.exe ---
|
:: --- JulietShaderCompiler.exe ---
|
||||||
@@ -300,7 +308,7 @@ if !TARGET_SHADER! equ 1 (
|
|||||||
echo STEP Building JulietShaderCompiler.exe [!CFG!]>>"!PLAN_FILE!"
|
echo STEP Building JulietShaderCompiler.exe [!CFG!]>>"!PLAN_FILE!"
|
||||||
echo OUTPUT bin\x64-!CFG!\JulietShaderCompiler.exe>>"!PLAN_FILE!"
|
echo OUTPUT bin\x64-!CFG!\JulietShaderCompiler.exe>>"!PLAN_FILE!"
|
||||||
echo DEPENDS JulietShaderCompiler^|Juliet^|Intermediate\x64-!CFG!\JulietShaderCompiler_PCH.obj>>"!PLAN_FILE!"
|
echo DEPENDS JulietShaderCompiler^|Juliet^|Intermediate\x64-!CFG!\JulietShaderCompiler_PCH.obj>>"!PLAN_FILE!"
|
||||||
echo COMMAND %COMPILER% !SHADER_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\JulietShaderCompiler.exe" !SHADER_INPUTS! Intermediate\x64-!CFG!\JulietShaderCompiler_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib /SUBSYSTEM:CONSOLE /INCREMENTAL /ILK:Intermediate\x64-!CFG!\JulietShaderCompiler.ilk /PDB:Intermediate\x64-!CFG!\JulietShaderCompiler.pdb>>"!PLAN_FILE!"
|
echo COMMAND %COMPILER% !SHADER_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\JulietShaderCompiler.exe" !SHADER_INPUTS! Intermediate\x64-!CFG!\JulietShaderCompiler_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib !NATVIS_LINK_FLAGS! /SUBSYSTEM:CONSOLE /INCREMENTAL /ILK:Intermediate\x64-!CFG!\JulietShaderCompiler.ilk /PDB:Intermediate\x64-!CFG!\JulietShaderCompiler.pdb>>"!PLAN_FILE!"
|
||||||
)
|
)
|
||||||
|
|
||||||
exit /b 0
|
exit /b 0
|
||||||
@@ -1221,6 +1221,14 @@ static void GenerateProject(const char* projectName, const char* projectDir, con
|
|||||||
CollectFiles(projectDir, NULL, ".inl", srcFiles);
|
CollectFiles(projectDir, NULL, ".inl", srcFiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FilePathList* natvisFiles = CreateFilePathList();
|
||||||
|
if (DirectoryExists("Natvis")) {
|
||||||
|
CollectFiles("Natvis", NULL, ".natvis", natvisFiles);
|
||||||
|
}
|
||||||
|
if (FileExists("External\\imgui\\misc\\debuggers\\imgui.natvis")) {
|
||||||
|
FilePathListAdd(natvisFiles, "External\\imgui\\misc\\debuggers\\imgui.natvis");
|
||||||
|
}
|
||||||
|
|
||||||
char* buf = (char*)ArenaPush(4 * 1024 * 1024);
|
char* buf = (char*)ArenaPush(4 * 1024 * 1024);
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
@@ -1315,6 +1323,14 @@ static void GenerateProject(const char* projectName, const char* projectDir, con
|
|||||||
}
|
}
|
||||||
offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset, " </ItemGroup>\n");
|
offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset, " </ItemGroup>\n");
|
||||||
|
|
||||||
|
if (natvisFiles->Count > 0) {
|
||||||
|
offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset, " <ItemGroup>\n");
|
||||||
|
for (int i = 0; i < natvisFiles->Count; i++) {
|
||||||
|
offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset, " <Natvis Include=\"..\\%s\" />\n", natvisFiles->Paths[i]);
|
||||||
|
}
|
||||||
|
offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset, " </ItemGroup>\n");
|
||||||
|
}
|
||||||
|
|
||||||
offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset,
|
offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset,
|
||||||
" <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n"
|
" <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n"
|
||||||
" <ImportGroup Label=\"ExtensionTargets\">\n"
|
" <ImportGroup Label=\"ExtensionTargets\">\n"
|
||||||
@@ -1373,6 +1389,16 @@ static void GenerateProject(const char* projectName, const char* projectDir, con
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (natvisFiles->Count > 0) {
|
||||||
|
bool found = false;
|
||||||
|
for (int f = 0; f < filterCount; f++) {
|
||||||
|
if (_stricmp(filters[f], "Natvis") == 0) { found = true; break; }
|
||||||
|
}
|
||||||
|
if (!found && filterCount < 512) {
|
||||||
|
strcpy_s(filters[filterCount++], 256, "Natvis");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
char* filterBuf = (char*)ArenaPush(4 * 1024 * 1024);
|
char* filterBuf = (char*)ArenaPush(4 * 1024 * 1024);
|
||||||
int filterOffset = 0;
|
int filterOffset = 0;
|
||||||
filterOffset += sprintf_s(filterBuf + filterOffset, (4 * 1024 * 1024) - filterOffset,
|
filterOffset += sprintf_s(filterBuf + filterOffset, (4 * 1024 * 1024) - filterOffset,
|
||||||
@@ -1416,6 +1442,15 @@ static void GenerateProject(const char* projectName, const char* projectDir, con
|
|||||||
" <%s Include=\"..\\%s\" />\n", type, path);
|
" <%s Include=\"..\\%s\" />\n", type, path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (natvisFiles->Count > 0) {
|
||||||
|
for (int i = 0; i < natvisFiles->Count; i++) {
|
||||||
|
filterOffset += sprintf_s(filterBuf + filterOffset, (4 * 1024 * 1024) - filterOffset,
|
||||||
|
" <Natvis Include=\"..\\%s\">\n"
|
||||||
|
" <Filter>Natvis</Filter>\n"
|
||||||
|
" </Natvis>\n", natvisFiles->Paths[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
filterOffset += sprintf_s(filterBuf + filterOffset, (4 * 1024 * 1024) - filterOffset,
|
filterOffset += sprintf_s(filterBuf + filterOffset, (4 * 1024 * 1024) - filterOffset,
|
||||||
" </ItemGroup>\n</Project>\n");
|
" </ItemGroup>\n</Project>\n");
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user