├── 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 | --------------------------------------------------------------------------------