├── BonRecTest
├── Main.cpp
├── resource.h
├── stdafx.cpp
├── stdafx.h
├── Resource.rc
├── targetver.h
├── Include
│ ├── IBonDriver.h
│ ├── IB25Decoder.h
│ └── IBonDriver2.h
├── BonRecTest.h
├── BonRecTest.vcxproj.filters
├── BonRecTest.cpp
└── BonRecTest.vcxproj
├── BonRecTest.sln
└── .gitignore
/BonRecTest/Main.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rndomhack/BonRecTest/HEAD/BonRecTest/Main.cpp
--------------------------------------------------------------------------------
/BonRecTest/resource.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rndomhack/BonRecTest/HEAD/BonRecTest/resource.h
--------------------------------------------------------------------------------
/BonRecTest/stdafx.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rndomhack/BonRecTest/HEAD/BonRecTest/stdafx.cpp
--------------------------------------------------------------------------------
/BonRecTest/stdafx.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rndomhack/BonRecTest/HEAD/BonRecTest/stdafx.h
--------------------------------------------------------------------------------
/BonRecTest/Resource.rc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rndomhack/BonRecTest/HEAD/BonRecTest/Resource.rc
--------------------------------------------------------------------------------
/BonRecTest/targetver.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rndomhack/BonRecTest/HEAD/BonRecTest/targetver.h
--------------------------------------------------------------------------------
/BonRecTest/Include/IBonDriver.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rndomhack/BonRecTest/HEAD/BonRecTest/Include/IBonDriver.h
--------------------------------------------------------------------------------
/BonRecTest/Include/IB25Decoder.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rndomhack/BonRecTest/HEAD/BonRecTest/Include/IB25Decoder.h
--------------------------------------------------------------------------------
/BonRecTest/Include/IBonDriver2.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rndomhack/BonRecTest/HEAD/BonRecTest/Include/IBonDriver2.h
--------------------------------------------------------------------------------
/BonRecTest/BonRecTest.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | class CBonRecTest
4 | {
5 | public:
6 | CBonRecTest();
7 | ~CBonRecTest();
8 | bool Start();
9 | bool Stop();
10 |
11 | LPCTSTR bonDriverPath;
12 | LPCTSTR decoderPath;
13 | LPCTSTR outputPath;
14 | DWORD space;
15 | DWORD channel;
16 | bool emm;
17 | bool log;
18 |
19 | private:
20 | void LoadBonDriver();
21 | void UnloadBonDriver();
22 | void LoadDecoder();
23 | void UnloadDecoder();
24 | void OpenOutput();
25 | void CloseOutput();
26 | void OpenTuner();
27 | void CloseTuner();
28 | void StartThread();
29 | void StopThread();
30 |
31 | static unsigned int __stdcall RecThread(void *param);
32 | void RecMain();
33 |
34 | HMODULE hBonDriver;
35 | HMODULE hDecoder;
36 | IBonDriver2 *pBonDriver2;
37 | IB25Decoder2 *pDecoder2;
38 | HANDLE hRecThread;
39 | HANDLE hOutput;
40 | bool isThreadWorking;
41 | };
42 |
--------------------------------------------------------------------------------
/BonRecTest.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.24720.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BonRecTest", "BonRecTest\BonRecTest.vcxproj", "{17D8ADF8-F28B-4C2C-846E-37B3F62EDC62}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|x64 = Debug|x64
11 | Debug|x86 = Debug|x86
12 | Release|x64 = Release|x64
13 | Release|x86 = Release|x86
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {17D8ADF8-F28B-4C2C-846E-37B3F62EDC62}.Debug|x64.ActiveCfg = Debug|x64
17 | {17D8ADF8-F28B-4C2C-846E-37B3F62EDC62}.Debug|x64.Build.0 = Debug|x64
18 | {17D8ADF8-F28B-4C2C-846E-37B3F62EDC62}.Debug|x86.ActiveCfg = Debug|Win32
19 | {17D8ADF8-F28B-4C2C-846E-37B3F62EDC62}.Debug|x86.Build.0 = Debug|Win32
20 | {17D8ADF8-F28B-4C2C-846E-37B3F62EDC62}.Release|x64.ActiveCfg = Release|x64
21 | {17D8ADF8-F28B-4C2C-846E-37B3F62EDC62}.Release|x64.Build.0 = Release|x64
22 | {17D8ADF8-F28B-4C2C-846E-37B3F62EDC62}.Release|x86.ActiveCfg = Release|Win32
23 | {17D8ADF8-F28B-4C2C-846E-37B3F62EDC62}.Release|x86.Build.0 = Release|Win32
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | EndGlobal
29 |
--------------------------------------------------------------------------------
/BonRecTest/BonRecTest.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
7 |
8 |
9 | {93995380-89BD-4b04-88EB-625FBE52EBFB}
10 | h;hh;hpp;hxx;hm;inl;inc;xsd
11 |
12 |
13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
15 |
16 |
17 |
18 |
19 | ヘッダー ファイル
20 |
21 |
22 | ヘッダー ファイル
23 |
24 |
25 | ヘッダー ファイル
26 |
27 |
28 | ヘッダー ファイル
29 |
30 |
31 |
32 |
33 | ソース ファイル
34 |
35 |
36 | ソース ファイル
37 |
38 |
39 | ソース ファイル
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | リソース ファイル
48 |
49 |
50 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | bld/
21 | [Bb]in/
22 | [Oo]bj/
23 | [Ll]og/
24 |
25 | # Visual Studio 2015 cache/options directory
26 | .vs/
27 | # Uncomment if you have tasks that create the project's static files in wwwroot
28 | #wwwroot/
29 |
30 | # MSTest test Results
31 | [Tt]est[Rr]esult*/
32 | [Bb]uild[Ll]og.*
33 |
34 | # NUNIT
35 | *.VisualState.xml
36 | TestResult.xml
37 |
38 | # Build Results of an ATL Project
39 | [Dd]ebugPS/
40 | [Rr]eleasePS/
41 | dlldata.c
42 |
43 | # DNX
44 | project.lock.json
45 | artifacts/
46 |
47 | *_i.c
48 | *_p.c
49 | *_i.h
50 | *.ilk
51 | *.meta
52 | *.obj
53 | *.pch
54 | *.pdb
55 | *.pgc
56 | *.pgd
57 | *.rsp
58 | *.sbr
59 | *.tlb
60 | *.tli
61 | *.tlh
62 | *.tmp
63 | *.tmp_proj
64 | *.log
65 | *.vspscc
66 | *.vssscc
67 | .builds
68 | *.pidb
69 | *.svclog
70 | *.scc
71 |
72 | # Chutzpah Test files
73 | _Chutzpah*
74 |
75 | # Visual C++ cache files
76 | ipch/
77 | *.aps
78 | *.ncb
79 | *.opendb
80 | *.opensdf
81 | *.sdf
82 | *.cachefile
83 |
84 | # Visual Studio profiler
85 | *.psess
86 | *.vsp
87 | *.vspx
88 | *.sap
89 |
90 | # TFS 2012 Local Workspace
91 | $tf/
92 |
93 | # Guidance Automation Toolkit
94 | *.gpState
95 |
96 | # ReSharper is a .NET coding add-in
97 | _ReSharper*/
98 | *.[Rr]e[Ss]harper
99 | *.DotSettings.user
100 |
101 | # JustCode is a .NET coding add-in
102 | .JustCode
103 |
104 | # TeamCity is a build add-in
105 | _TeamCity*
106 |
107 | # DotCover is a Code Coverage Tool
108 | *.dotCover
109 |
110 | # NCrunch
111 | _NCrunch_*
112 | .*crunch*.local.xml
113 | nCrunchTemp_*
114 |
115 | # MightyMoose
116 | *.mm.*
117 | AutoTest.Net/
118 |
119 | # Web workbench (sass)
120 | .sass-cache/
121 |
122 | # Installshield output folder
123 | [Ee]xpress/
124 |
125 | # DocProject is a documentation generator add-in
126 | DocProject/buildhelp/
127 | DocProject/Help/*.HxT
128 | DocProject/Help/*.HxC
129 | DocProject/Help/*.hhc
130 | DocProject/Help/*.hhk
131 | DocProject/Help/*.hhp
132 | DocProject/Help/Html2
133 | DocProject/Help/html
134 |
135 | # Click-Once directory
136 | publish/
137 |
138 | # Publish Web Output
139 | *.[Pp]ublish.xml
140 | *.azurePubxml
141 | # TODO: Comment the next line if you want to checkin your web deploy settings
142 | # but database connection strings (with potential passwords) will be unencrypted
143 | *.pubxml
144 | *.publishproj
145 |
146 | # NuGet Packages
147 | *.nupkg
148 | # The packages folder can be ignored because of Package Restore
149 | **/packages/*
150 | # except build/, which is used as an MSBuild target.
151 | !**/packages/build/
152 | # Uncomment if necessary however generally it will be regenerated when needed
153 | #!**/packages/repositories.config
154 | # NuGet v3's project.json files produces more ignoreable files
155 | *.nuget.props
156 | *.nuget.targets
157 |
158 | # Microsoft Azure Build Output
159 | csx/
160 | *.build.csdef
161 |
162 | # Microsoft Azure Emulator
163 | ecf/
164 | rcf/
165 |
166 | # Windows Store app package directories and files
167 | AppPackages/
168 | BundleArtifacts/
169 | Package.StoreAssociation.xml
170 | _pkginfo.txt
171 |
172 | # Visual Studio cache files
173 | # files ending in .cache can be ignored
174 | *.[Cc]ache
175 | # but keep track of directories ending in .cache
176 | !*.[Cc]ache/
177 |
178 | # Others
179 | ClientBin/
180 | ~$*
181 | *~
182 | *.dbmdl
183 | *.dbproj.schemaview
184 | *.pfx
185 | *.publishsettings
186 | node_modules/
187 | orleans.codegen.cs
188 |
189 | # Since there are multiple workflows, uncomment next line to ignore bower_components
190 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
191 | #bower_components/
192 |
193 | # RIA/Silverlight projects
194 | Generated_Code/
195 |
196 | # Backup & report files from converting an old project file
197 | # to a newer Visual Studio version. Backup files are not needed,
198 | # because we have git ;-)
199 | _UpgradeReport_Files/
200 | Backup*/
201 | UpgradeLog*.XML
202 | UpgradeLog*.htm
203 |
204 | # SQL Server files
205 | *.mdf
206 | *.ldf
207 |
208 | # Business Intelligence projects
209 | *.rdl.data
210 | *.bim.layout
211 | *.bim_*.settings
212 |
213 | # Microsoft Fakes
214 | FakesAssemblies/
215 |
216 | # GhostDoc plugin setting file
217 | *.GhostDoc.xml
218 |
219 | # Node.js Tools for Visual Studio
220 | .ntvs_analysis.dat
221 |
222 | # Visual Studio 6 build log
223 | *.plg
224 |
225 | # Visual Studio 6 workspace options file
226 | *.opt
227 |
228 | # Visual Studio LightSwitch build output
229 | **/*.HTMLClient/GeneratedArtifacts
230 | **/*.DesktopClient/GeneratedArtifacts
231 | **/*.DesktopClient/ModelManifest.xml
232 | **/*.Server/GeneratedArtifacts
233 | **/*.Server/ModelManifest.xml
234 | _Pvt_Extensions
235 |
236 | # Paket dependency manager
237 | .paket/paket.exe
238 | paket-files/
239 |
240 | # FAKE - F# Make
241 | .fake/
242 |
243 | # JetBrains Rider
244 | .idea/
245 | *.sln.iml
246 |
--------------------------------------------------------------------------------
/BonRecTest/BonRecTest.cpp:
--------------------------------------------------------------------------------
1 | #include "stdafx.h"
2 | #include "BonRecTest.h"
3 |
4 | CBonRecTest::CBonRecTest() :
5 | bonDriverPath(NULL),
6 | decoderPath(NULL),
7 | outputPath(NULL),
8 | space(0UL),
9 | channel(0L),
10 | emm(false),
11 | log(false),
12 | hBonDriver(NULL),
13 | hDecoder(NULL),
14 | pBonDriver2(NULL),
15 | pDecoder2(NULL),
16 | hRecThread(NULL),
17 | hOutput(INVALID_HANDLE_VALUE),
18 | isThreadWorking(false)
19 | {
20 | }
21 |
22 | CBonRecTest::~CBonRecTest()
23 | {
24 | Stop();
25 | }
26 |
27 | bool CBonRecTest::Start()
28 | {
29 | try {
30 | LoadBonDriver();
31 | LoadDecoder();
32 | OpenOutput();
33 | OpenTuner();
34 | StartThread();
35 | }
36 | catch (LPCTSTR err) {
37 | fprintf(stderr, "Error: %S\n", err);
38 |
39 | return false;
40 | }
41 |
42 | return true;
43 | }
44 |
45 | bool CBonRecTest::Stop()
46 | {
47 | try {
48 | StopThread();
49 | CloseTuner();
50 | CloseOutput();
51 | UnloadDecoder();
52 | UnloadBonDriver();
53 | }
54 | catch (LPCTSTR err) {
55 | fprintf(stderr, "Error: %S\n", err);
56 |
57 | return false;
58 | }
59 |
60 | return true;
61 | }
62 |
63 | void CBonRecTest::LoadBonDriver()
64 | {
65 | if (log) std::cerr << "Load BonDriver..." << std::endl;
66 |
67 | if (hBonDriver) {
68 | throw TEXT("BonDriver is already loaded");
69 | }
70 |
71 | if (!bonDriverPath) {
72 | throw TEXT("BonDriver path is invalid");
73 | }
74 |
75 | hBonDriver = LoadLibrary(bonDriverPath);
76 |
77 | if (!hBonDriver) {
78 | throw TEXT("Could not load BonDriver");
79 | }
80 |
81 | IBonDriver2* (*CreateBonDriver)();
82 | CreateBonDriver = (IBonDriver2* (*)())GetProcAddress(hBonDriver, "CreateBonDriver");
83 |
84 | if (!CreateBonDriver) {
85 | FreeLibrary(hBonDriver);
86 | hBonDriver = NULL;
87 |
88 | throw TEXT("Could not get address CreateBonDriver()");
89 | }
90 |
91 | pBonDriver2 = CreateBonDriver();
92 |
93 | if (!pBonDriver2) {
94 | FreeLibrary(hBonDriver);
95 | hBonDriver = NULL;
96 |
97 | throw TEXT("Could not get IBonDriver");
98 | }
99 | }
100 |
101 | void CBonRecTest::UnloadBonDriver()
102 | {
103 | if (!hBonDriver) return;
104 |
105 | if (log) std::cerr << "Unload BonDriver..." << std::endl;
106 |
107 | pBonDriver2->Release();
108 | pBonDriver2 = NULL;
109 |
110 | FreeLibrary(hBonDriver);
111 | hBonDriver = NULL;
112 | }
113 |
114 | void CBonRecTest::LoadDecoder()
115 | {
116 | if (!decoderPath) return;
117 |
118 | if (log) std::cerr << "Load Decoder..." << std::endl;
119 |
120 | if (hDecoder) {
121 | throw TEXT("Decoder is already loaded");
122 | }
123 |
124 | hDecoder = LoadLibrary(decoderPath);
125 |
126 | if (!hDecoder) {
127 | throw TEXT("Could not load Decoder");
128 | }
129 |
130 | IB25Decoder2* (*CreateB25Decoder)();
131 | CreateB25Decoder = (IB25Decoder2* (*)())GetProcAddress(hDecoder, "CreateB25Decoder");
132 |
133 | if (!CreateB25Decoder) {
134 | FreeLibrary(hDecoder);
135 | hDecoder = NULL;
136 |
137 | throw TEXT("Could not get address CreateB25Decoder()");
138 | }
139 |
140 | pDecoder2 = CreateB25Decoder();
141 |
142 | if (!pDecoder2) {
143 | FreeLibrary(hDecoder);
144 | hDecoder = NULL;
145 |
146 | throw TEXT("Could not get IB25Decoder");
147 | }
148 |
149 | if (!pDecoder2->Initialize()) {
150 | FreeLibrary(hDecoder);
151 | hDecoder = NULL;
152 |
153 | throw TEXT("Could not initialize IB25Decoder");
154 | }
155 |
156 | pDecoder2->DiscardNullPacket(true);
157 | pDecoder2->DiscardScramblePacket(false);
158 | pDecoder2->EnableEmmProcess(emm);
159 | }
160 |
161 | void CBonRecTest::UnloadDecoder()
162 | {
163 | if (!hDecoder) return;
164 |
165 | if (log) std::cerr << "Unload Decoder..." << std::endl;
166 |
167 | pDecoder2->Release();
168 | pDecoder2 = NULL;
169 |
170 | FreeLibrary(hDecoder);
171 | hDecoder = NULL;
172 | }
173 |
174 | void CBonRecTest::OpenOutput()
175 | {
176 | if (log) std::cerr << "Open Output..." << std::endl;
177 |
178 | if (hOutput != INVALID_HANDLE_VALUE) {
179 | throw TEXT("Output already exists");
180 | }
181 |
182 | if (outputPath == NULL) {
183 | throw TEXT("Output path is invalid");
184 | }
185 |
186 | if (_tcscmp(outputPath, TEXT("-"))) {
187 | hOutput = CreateFile(outputPath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
188 |
189 | if (hOutput == INVALID_HANDLE_VALUE) {
190 | throw TEXT("Could not open output");
191 | }
192 | }
193 | else {
194 | hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
195 | }
196 | }
197 |
198 | void CBonRecTest::CloseOutput()
199 | {
200 | if (hOutput == INVALID_HANDLE_VALUE) return;
201 |
202 | if (log) std::cerr << "Close Output..." << std::endl;
203 |
204 | if (!CloseHandle(hOutput)) {
205 | throw TEXT("Could not close output");
206 | }
207 |
208 | hOutput = INVALID_HANDLE_VALUE;
209 | }
210 |
211 | void CBonRecTest::OpenTuner()
212 | {
213 | if (log) std::cerr << "Open Tuner..." << std::endl;
214 |
215 | if (!pBonDriver2->OpenTuner()) {
216 | throw TEXT("Could not open tuner");
217 | }
218 |
219 | if (!pBonDriver2->SetChannel(space, channel)) {
220 | pBonDriver2->CloseTuner();
221 |
222 | throw TEXT("Could not set channel");
223 | }
224 | }
225 |
226 | void CBonRecTest::CloseTuner()
227 | {
228 | if (!hBonDriver) return;
229 |
230 | if (log) std::cerr << "Close Tuner..." << std::endl;
231 |
232 | pBonDriver2->CloseTuner();
233 | }
234 |
235 | void CBonRecTest::StartThread()
236 | {
237 | if (log) std::cerr << "Start Thread..." << std::endl;
238 |
239 | isThreadWorking = true;
240 |
241 | hRecThread = (HANDLE)_beginthreadex(NULL, 0, RecThread, this, 0, NULL);
242 |
243 | if (!hRecThread) {
244 | isThreadWorking = false;
245 |
246 | throw TEXT("Could not start thread");
247 | }
248 | }
249 |
250 | void CBonRecTest::StopThread()
251 | {
252 | if (!hRecThread) return;
253 |
254 | if (log) std::cerr << "Stop Thread..." << std::endl;
255 |
256 | isThreadWorking = false;
257 |
258 | if (WaitForSingleObject(hRecThread, 5000UL) != WAIT_OBJECT_0) {
259 | std::cerr << "Terminate thread!" << std::endl;
260 |
261 | TerminateThread(hRecThread, -1);
262 | }
263 |
264 | CloseHandle(hRecThread);
265 | hRecThread = NULL;
266 | }
267 |
268 | unsigned int __stdcall CBonRecTest::RecThread(void *pParam)
269 | {
270 | CBonRecTest *pThis = static_cast(pParam);
271 |
272 | pThis->RecMain();
273 |
274 | return 0;
275 | }
276 |
277 | void CBonRecTest::RecMain()
278 | {
279 | BYTE *pStreamData = NULL;
280 | DWORD streamSize = 0UL;
281 | DWORD streamRemain = 0UL;
282 | BYTE *pDecodeData = NULL;
283 | DWORD decodeSize = 0UL;
284 | DWORD bytesWritten = 0UL;
285 | DWORD bytesRead = 0UL;
286 |
287 | while (isThreadWorking) {
288 | if (pBonDriver2->GetTsStream(&pStreamData, &streamSize, &streamRemain)) {
289 | if (pStreamData && streamSize) {
290 | if (hDecoder && pDecoder2->Decode(pStreamData, streamSize, &pDecodeData, &decodeSize)) {
291 | WriteFile(hOutput, pDecodeData, decodeSize, &bytesWritten, NULL);
292 | }
293 | else {
294 | WriteFile(hOutput, pStreamData, streamSize, &bytesWritten, NULL);
295 | }
296 | }
297 | }
298 |
299 | bytesRead += streamSize;
300 |
301 | if (bytesRead > 188 * 256 * 256) {
302 | if (log) std::cerr << "Signal: " << pBonDriver2->GetSignalLevel() << "dB" << std::endl;
303 | bytesRead = 0;
304 | }
305 |
306 | Sleep(streamRemain ? 0UL : 10UL);
307 | }
308 | }
309 |
--------------------------------------------------------------------------------
/BonRecTest/BonRecTest.vcxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | Win32
7 |
8 |
9 | Release
10 | Win32
11 |
12 |
13 | Debug
14 | x64
15 |
16 |
17 | Release
18 | x64
19 |
20 |
21 |
22 | {17D8ADF8-F28B-4C2C-846E-37B3F62EDC62}
23 | Win32Proj
24 | BonRecTest
25 | 8.1
26 |
27 |
28 |
29 | Application
30 | true
31 | v140
32 | Unicode
33 |
34 |
35 | Application
36 | false
37 | v140
38 | true
39 | Unicode
40 |
41 |
42 | Application
43 | true
44 | v140
45 | Unicode
46 |
47 |
48 | Application
49 | false
50 | v140
51 | true
52 | Unicode
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | true
74 |
75 |
76 | true
77 |
78 |
79 | false
80 |
81 |
82 | false
83 |
84 |
85 |
86 | Use
87 | Level3
88 | Disabled
89 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
90 |
91 |
92 | Console
93 | true
94 |
95 |
96 |
97 |
98 | Use
99 | Level3
100 | Disabled
101 | _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
102 |
103 |
104 | Console
105 | true
106 |
107 |
108 |
109 |
110 | Level3
111 | Use
112 | MaxSpeed
113 | true
114 | true
115 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
116 | MultiThreaded
117 |
118 |
119 | Console
120 | true
121 | true
122 | true
123 |
124 |
125 |
126 |
127 | Level3
128 | Use
129 | MaxSpeed
130 | true
131 | true
132 | NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
133 | MultiThreaded
134 |
135 |
136 | Console
137 | true
138 | true
139 | true
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 | Create
156 | Create
157 | Create
158 | Create
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
--------------------------------------------------------------------------------