From a8adb46472fb0c57347307e2c5b7ba06c8d37f60 Mon Sep 17 00:00:00 2001 From: Spearing Date: Wed, 5 Oct 2016 00:38:07 +0100 Subject: [PATCH] First commit --- 557.html | 19 + 919.pdf | Bin 0 -> 407019 bytes 920.pdf | Bin 0 -> 106135 bytes 9781590590508.jpg | Bin 0 -> 9405 bytes .../AspNetDebugDemo/AspNetDebugDemo.vbproj | 173 +++ .../AspNetDebugDemo.vbproj.webinfo | 4 + .../wwwroot/AspNetDebugDemo/AssemblyInfo.vb | 32 + .../AspNetDebugDemo/CustomErrorPage.aspx | 17 + .../AspNetDebugDemo/CustomErrorPage.aspx.resx | 109 ++ .../AspNetDebugDemo/CustomErrorPage.aspx.vb | 33 + .../AspNetDebugDemo/DefaultErrorPage.aspx | 18 + .../DefaultErrorPage.aspx.resx | 109 ++ .../AspNetDebugDemo/DefaultErrorPage.aspx.vb | 33 + Inetpub/wwwroot/AspNetDebugDemo/Global.asax | 1 + .../wwwroot/AspNetDebugDemo/Global.asax.resx | 42 + .../wwwroot/AspNetDebugDemo/Global.asax.vb | 60 + Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx | 50 + .../AspNetDebugDemo/MainForm.aspx.resx | 109 ++ .../wwwroot/AspNetDebugDemo/MainForm.aspx.vb | 94 ++ Inetpub/wwwroot/AspNetDebugDemo/Styles.css | 163 +++ Inetpub/wwwroot/AspNetDebugDemo/Web.config | 88 ++ .../AspNetDebugDemo/_vti_pvt/access.cnf | 4 + .../AspNetDebugDemo/_vti_pvt/deptodoc.btr | Bin 0 -> 324 bytes .../AspNetDebugDemo/_vti_pvt/doctodep.btr | Bin 0 -> 324 bytes .../AspNetDebugDemo/_vti_pvt/service.cnf | 20 + .../AspNetDebugDemo/_vti_pvt/service.lck | 0 .../AspNetDebugDemo/_vti_pvt/services.cnf | 1 + .../AspNetDebugDemo.vbproj | 173 +++ .../AspNetDebugDemo.vbproj.webinfo | 4 + .../AspNetDebugDemo_2002/AssemblyInfo.vb | 32 + .../AspNetDebugDemo_2002/CustomErrorPage.aspx | 17 + .../CustomErrorPage.aspx.resx | 109 ++ .../CustomErrorPage.aspx.vb | 33 + .../DefaultErrorPage.aspx | 18 + .../DefaultErrorPage.aspx.resx | 109 ++ .../DefaultErrorPage.aspx.vb | 33 + .../wwwroot/AspNetDebugDemo_2002/Global.asax | 1 + .../AspNetDebugDemo_2002/Global.asax.resx | 42 + .../AspNetDebugDemo_2002/Global.asax.vb | 60 + .../AspNetDebugDemo_2002/MainForm.aspx | 50 + .../AspNetDebugDemo_2002/MainForm.aspx.resx | 109 ++ .../AspNetDebugDemo_2002/MainForm.aspx.vb | 94 ++ .../wwwroot/AspNetDebugDemo_2002/Styles.css | 163 +++ .../wwwroot/AspNetDebugDemo_2002/Web.config | 88 ++ .../_vti_cnf/AspNetDebugDemo.vbproj | 5 + .../_vti_cnf/AspNetDebugDemo.vbproj.webinfo | 5 + .../_vti_cnf/AssemblyInfo.vb | 5 + .../_vti_cnf/CustomErrorPage.aspx | 5 + .../_vti_cnf/CustomErrorPage.aspx.resx | 5 + .../_vti_cnf/CustomErrorPage.aspx.vb | 5 + .../_vti_cnf/DefaultErrorPage.aspx | 5 + .../_vti_cnf/DefaultErrorPage.aspx.resx | 5 + .../_vti_cnf/DefaultErrorPage.aspx.vb | 5 + .../AspNetDebugDemo_2002/_vti_cnf/Global.asax | 5 + .../_vti_cnf/Global.asax.resx | 5 + .../_vti_cnf/Global.asax.vb | 5 + .../_vti_cnf/MainForm.aspx | 5 + .../_vti_cnf/MainForm.aspx.resx | 5 + .../_vti_cnf/MainForm.aspx.vb | 5 + .../AspNetDebugDemo_2002/_vti_cnf/Styles.css | 8 + .../AspNetDebugDemo_2002/_vti_cnf/Web.config | 5 + .../AspNetDebugDemo_2002/_vti_pvt/access.cnf | 4 + .../_vti_pvt/deptodoc.btr | Bin 0 -> 324 bytes .../_vti_pvt/doctodep.btr | Bin 0 -> 5616 bytes .../_vti_pvt/linkinfo.cnf | 1 + .../AspNetDebugDemo_2002/_vti_pvt/service.cnf | 24 + .../AspNetDebugDemo_2002/_vti_pvt/service.lck | 0 .../_vti_pvt/services.cnf | 1 + .../AspNetDebugDemo_2002/_vti_pvt/writeto.cnf | 1 + Inetpub/wwwroot/TimeServer/AssemblyInfo.vb | 32 + Inetpub/wwwroot/TimeServer/Global.asax | 1 + Inetpub/wwwroot/TimeServer/Global.asax.resx | 42 + Inetpub/wwwroot/TimeServer/Global.asax.vb | 59 + Inetpub/wwwroot/TimeServer/SoapMonitor.vb | 115 ++ Inetpub/wwwroot/TimeServer/TimeServer.vbproj | 141 +++ .../TimeServer/TimeServer.vbproj.webinfo | 4 + Inetpub/wwwroot/TimeServer/TimeService.asmx | 1 + .../wwwroot/TimeServer/TimeService.asmx.resx | 42 + .../wwwroot/TimeServer/TimeService.asmx.vb | 125 ++ Inetpub/wwwroot/TimeServer/Web.config | 87 ++ .../wwwroot/TimeServer/_vti_pvt/access.cnf | 4 + .../wwwroot/TimeServer/_vti_pvt/deptodoc.btr | Bin 0 -> 324 bytes .../wwwroot/TimeServer/_vti_pvt/doctodep.btr | Bin 0 -> 324 bytes .../wwwroot/TimeServer/_vti_pvt/service.cnf | 20 + .../wwwroot/TimeServer/_vti_pvt/service.lck | 0 .../wwwroot/TimeServer/_vti_pvt/services.cnf | 1 + Inetpub/wwwroot/TimeServer/bin/TimeServer.dll | Bin 0 -> 11776 bytes Inetpub/wwwroot/TimeServer/bin/TimeServer.pdb | Bin 0 -> 36352 bytes .../wwwroot/TimeServer_2002/AssemblyInfo.vb | 32 + Inetpub/wwwroot/TimeServer_2002/Global.asax | 1 + .../wwwroot/TimeServer_2002/Global.asax.resx | 42 + .../wwwroot/TimeServer_2002/Global.asax.vb | 59 + .../wwwroot/TimeServer_2002/SoapMonitor.vb | 115 ++ .../wwwroot/TimeServer_2002/TimeServer.vbproj | 141 +++ .../TimeServer_2002/TimeServer.vbproj.webinfo | 4 + .../wwwroot/TimeServer_2002/TimeService.asmx | 1 + .../TimeServer_2002/TimeService.asmx.resx | 42 + .../TimeServer_2002/TimeService.asmx.vb | 125 ++ Inetpub/wwwroot/TimeServer_2002/Web.config | 87 ++ .../TimeServer_2002/_vti_pvt/access.cnf | 4 + .../TimeServer_2002/_vti_pvt/deptodoc.btr | Bin 0 -> 324 bytes .../TimeServer_2002/_vti_pvt/doctodep.btr | Bin 0 -> 324 bytes .../TimeServer_2002/_vti_pvt/service.cnf | 20 + .../TimeServer_2002/_vti_pvt/service.lck | 0 .../TimeServer_2002/_vti_pvt/services.cnf | 1 + .../TimeServer_2002/bin/TimeServer.dll | Bin 0 -> 11776 bytes .../TimeServer_2002/bin/TimeServer.pdb | Bin 0 -> 36352 bytes LICENSE.txt | 27 + README.md | 15 + Source/Changes.txt | 0 Source/ReadMe.txt | 43 + .../Chapter02/Listing2-1/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-1/Listing2-1.sln | 21 + .../Chapter02/Listing2-1/Listing2-1.suo | Bin 0 -> 6656 bytes .../Chapter02/Listing2-1/Listing2-1.vbproj | 97 ++ .../Listing2-1/Listing2-1.vbproj.user | 48 + .../Chapter02/Listing2-1/Test.vb | 10 + .../Chapter02/Listing2-10/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-10/Listing2-10.sln | 21 + .../Chapter02/Listing2-10/Listing2-10.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-10/Listing2-10.vbproj | 97 ++ .../Listing2-10/Listing2-10.vbproj.user | 48 + .../Chapter02/Listing2-10/Test.vb | 75 ++ .../Chapter02/Listing2-11/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-11/Listing2-11.sln | 21 + .../Chapter02/Listing2-11/Listing2-11.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-11/Listing2-11.vbproj | 97 ++ .../Listing2-11/Listing2-11.vbproj.user | 48 + .../Chapter02/Listing2-11/Test.vb | 46 + .../Chapter02/Listing2-12/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-12/Listing2-12.sln | 21 + .../Chapter02/Listing2-12/Listing2-12.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-12/Listing2-12.vbproj | 97 ++ .../Listing2-12/Listing2-12.vbproj.user | 48 + .../Chapter02/Listing2-12/Test.vb | 32 + .../Listing2-12Stackframe/AssemblyInfo.vb | 31 + .../Listing2-12Stackframe.sln | 21 + .../Listing2-12Stackframe.suo | Bin 0 -> 7168 bytes .../Listing2-12Stackframe.vbproj | 97 ++ .../Listing2-12Stackframe.vbproj.user | 48 + .../Chapter02/Listing2-12Stackframe/Test.vb | 37 + .../Chapter02/Listing2-18/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-18/Listing2-18.sln | 21 + .../Chapter02/Listing2-18/Listing2-18.suo | Bin 0 -> 6656 bytes .../Chapter02/Listing2-18/Listing2-18.vbproj | 97 ++ .../Listing2-18/Listing2-18.vbproj.user | 48 + .../Chapter02/Listing2-18/Test.vb | 32 + .../Chapter02/Listing2-2/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-2/Listing2-2.sln | 21 + .../Chapter02/Listing2-2/Listing2-2.suo | Bin 0 -> 6656 bytes .../Chapter02/Listing2-2/Listing2-2.vbproj | 97 ++ .../Listing2-2/Listing2-2.vbproj.user | 48 + .../Chapter02/Listing2-2/Test.vb | 35 + .../Chapter02/Listing2-21/App.ico | Bin 0 -> 1078 bytes .../Chapter02/Listing2-21/AssemblyInfo.cs | 58 + .../Chapter02/Listing2-21/Listing2-21.csproj | 97 ++ .../Listing2-21/Listing2-21.csproj.user | 48 + .../Chapter02/Listing2-21/Listing2-21.sln | 21 + .../Chapter02/Listing2-21/Listing2-21.suo | Bin 0 -> 6656 bytes .../Chapter02/Listing2-21/Test.cs | 10 + .../obj/Debug/Listing2-21.exe.incr | Bin 0 -> 1164 bytes .../obj/Debug/Listing2-21.projdata | Bin 0 -> 3976 bytes .../Chapter02/Listing2-23/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-23/Listing2-23.sln | 21 + .../Chapter02/Listing2-23/Listing2-23.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-23/Listing2-23.vbproj | 97 ++ .../Listing2-23/Listing2-23.vbproj.user | 48 + .../Chapter02/Listing2-23/Test.vb | 23 + .../Chapter02/Listing2-24/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-24/Listing2-24.sln | 21 + .../Chapter02/Listing2-24/Listing2-24.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-24/Listing2-24.vbproj | 97 ++ .../Listing2-24/Listing2-24.vbproj.user | 48 + .../Chapter02/Listing2-24/Test.vb | 107 ++ .../Chapter02/Listing2-25/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-25/Listing2-25.sln | 21 + .../Chapter02/Listing2-25/Listing2-25.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-25/Listing2-25.vbproj | 97 ++ .../Listing2-25/Listing2-25.vbproj.user | 48 + .../Chapter02/Listing2-25/Test.vb | 19 + .../Chapter02/Listing2-26/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-26/Listing2-26.sln | 21 + .../Chapter02/Listing2-26/Listing2-26.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-26/Listing2-26.vbproj | 97 ++ .../Listing2-26/Listing2-26.vbproj.user | 48 + .../Chapter02/Listing2-26/Test.vb | 33 + .../Chapter02/Listing2-27/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-27/Listing2-27.sln | 21 + .../Chapter02/Listing2-27/Listing2-27.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-27/Listing2-27.vbproj | 97 ++ .../Listing2-27/Listing2-27.vbproj.user | 48 + .../Chapter02/Listing2-27/Test.vb | 15 + .../Chapter02/Listing2-28/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-28/Listing2-28.sln | 21 + .../Chapter02/Listing2-28/Listing2-28.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-28/Listing2-28.vbproj | 97 ++ .../Listing2-28/Listing2-28.vbproj.user | 48 + .../Chapter02/Listing2-28/Test.vb | 12 + .../Chapter02/Listing2-3/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-3/Listing2-3.sln | 21 + .../Chapter02/Listing2-3/Listing2-3.suo | Bin 0 -> 6656 bytes .../Chapter02/Listing2-3/Listing2-3.vbproj | 97 ++ .../Listing2-3/Listing2-3.vbproj.user | 48 + .../Chapter02/Listing2-3/Test.vb | 35 + .../Chapter02/Listing2-4/App.ico | Bin 0 -> 1078 bytes .../Chapter02/Listing2-4/AssemblyInfo.cs | 58 + .../Chapter02/Listing2-4/Listing2-4.csproj | 97 ++ .../Listing2-4/Listing2-4.csproj.user | 48 + .../Chapter02/Listing2-4/Listing2-4.sln | 21 + .../Chapter02/Listing2-4/Listing2-4.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-4/Test.cs | 32 + .../Listing2-4/obj/Debug/Listing2-4.exe.incr | Bin 0 -> 1180 bytes .../Listing2-4/obj/Debug/Listing2-4.projdata | Bin 0 -> 3208 bytes .../Chapter02/Listing2-5/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-5/Listing2-5.sln | 21 + .../Chapter02/Listing2-5/Listing2-5.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-5/Listing2-5.vbproj | 97 ++ .../Listing2-5/Listing2-5.vbproj.user | 48 + .../Chapter02/Listing2-5/Test.vb | 33 + .../Chapter02/Listing2-6/App.ico | Bin 0 -> 1078 bytes .../Chapter02/Listing2-6/AssemblyInfo.cs | 58 + .../Chapter02/Listing2-6/Listing2-6.csproj | 97 ++ .../Listing2-6/Listing2-6.csproj.user | 48 + .../Chapter02/Listing2-6/Listing2-6.sln | 21 + .../Chapter02/Listing2-6/Listing2-6.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-6/Test.cs | 35 + .../Listing2-6/obj/Debug/Listing2-6.exe.incr | Bin 0 -> 1172 bytes .../Listing2-6/obj/Debug/Listing2-6.projdata | Bin 0 -> 2312 bytes .../Chapter02/Listing2-7/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-7/Listing2-7.sln | 21 + .../Chapter02/Listing2-7/Listing2-7.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-7/Listing2-7.vbproj | 97 ++ .../Listing2-7/Listing2-7.vbproj.user | 48 + .../Chapter02/Listing2-7/Test.vb | 14 + .../Chapter02/Listing2-8/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-8/Listing2-8.sln | 21 + .../Chapter02/Listing2-8/Listing2-8.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-8/Listing2-8.vbproj | 97 ++ .../Listing2-8/Listing2-8.vbproj.user | 48 + .../Chapter02/Listing2-8/Test.vb | 59 + .../Listing2-8Shadows/AssemblyInfo.vb | 31 + .../Listing2-8Shadows/Listing2-8Shadows.sln | 21 + .../Listing2-8Shadows/Listing2-8Shadows.suo | Bin 0 -> 7168 bytes .../Listing2-8Shadows.vbproj | 97 ++ .../Listing2-8Shadows.vbproj.user | 48 + .../Chapter02/Listing2-8Shadows/Test.vb | 59 + .../Chapter02/Listing2-9/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-9/Listing2-9.sln | 21 + .../Chapter02/Listing2-9/Listing2-9.suo | Bin 0 -> 7168 bytes .../Chapter02/Listing2-9/Listing2-9.vbproj | 97 ++ .../Listing2-9/Listing2-9.vbproj.user | 48 + .../Chapter02/Listing2-9/Test.vb | 66 + .../Chapter04/SortingSpeed/AssemblyInfo.vb | 31 + .../Chapter04/SortingSpeed/DebugDemo.sln | 33 + .../Chapter04/SortingSpeed/DebugDemo.suo | Bin 0 -> 12800 bytes .../SortingSpeed/DebugDemoForm.vbproj | 117 ++ .../SortingSpeed/DebugDemoForm.vbproj.user | 48 + .../Chapter04/SortingSpeed/DemoForm.resx | 171 +++ .../Chapter04/SortingSpeed/DemoForm.vb | 207 +++ .../SortingSpeed/SortingDll/AssemblyInfo.vb | 30 + .../SortingDll/DebugDemoLogic.vbproj | 113 ++ .../SortingDll/DebugDemoLogic.vbproj.user | 64 + .../SortingSpeed/SortingDll/DemoSort.vb | 265 ++++ .../obj/Debug/DebugDemo.DebugDemo.resources | Bin 0 -> 4029 bytes .../Chapter05/ErrorHandling/AssemblyInfo.vb | 31 + .../Chapter05/ErrorHandling/ErrorHandling.sln | 21 + .../Chapter05/ErrorHandling/ErrorHandling.suo | Bin 0 -> 6656 bytes .../ErrorHandling/ErrorHandling.vbproj | 97 ++ .../ErrorHandling/ErrorHandling.vbproj.user | 48 + .../Chapter05/ErrorHandling/ErrorTest.vb | 41 + .../Chapter05/HelloWorld/AssemblyInfo.vb | 31 + .../Chapter05/HelloWorld/HelloWorld.sln | 21 + .../Chapter05/HelloWorld/HelloWorld.suo | Bin 0 -> 7168 bytes .../Chapter05/HelloWorld/HelloWorld.vb | 9 + .../Chapter05/HelloWorld/HelloWorld.vbproj | 97 ++ .../HelloWorld/HelloWorld.vbproj.user | 48 + .../StringPerfTestOne/AssemblyInfo.vb | 31 + .../StringPerfTestOne/StringPerfTestOne.sln | 21 + .../StringPerfTestOne/StringPerfTestOne.suo | Bin 0 -> 7168 bytes .../StringPerfTestOne.vbproj | 97 ++ .../StringPerfTestOne.vbproj.user | 48 + .../Chapter05/StringPerfTestOne/Test.vb | 15 + .../StringPerfTestTwo/AssemblyInfo.vb | 31 + .../StringPerfTestTwo/StringPerfTestTwo.sln | 21 + .../StringPerfTestTwo/StringPerfTestTwo.suo | Bin 0 -> 7168 bytes .../StringPerfTestTwo.vbproj | 97 ++ .../StringPerfTestTwo.vbproj.user | 48 + .../Chapter05/StringPerfTestTwo/Test.vb | 16 + .../BooleanSwitchTest/AssemblyInfo.vb | 31 + .../BooleanSwitchTest/BooleanSwitchTest.sln | 21 + .../BooleanSwitchTest/BooleanSwitchTest.suo | Bin 0 -> 7168 bytes .../BooleanSwitchTest.vbproj | 97 ++ .../BooleanSwitchTest.vbproj.user | 48 + .../Chapter06/BooleanSwitchTest/Test.vb | 25 + .../CustomSwitchTest/AssemblyInfo.vb | 31 + .../CustomSwitchTest/CustomSwitchTest.sln | 21 + .../CustomSwitchTest/CustomSwitchTest.suo | Bin 0 -> 7168 bytes .../CustomSwitchTest/CustomSwitchTest.vbproj | 97 ++ .../CustomSwitchTest.vbproj.user | 48 + .../Chapter06/CustomSwitchTest/Test.vb | 96 ++ .../CustomTraceListener/AssemblyInfo.vb | 31 + .../CustomTraceListener.sln | 21 + .../CustomTraceListener.suo | Bin 0 -> 7168 bytes .../CustomTraceListener.vbproj | 97 ++ .../CustomTraceListener.vbproj.user | 48 + .../Chapter06/CustomTraceListener/Test.vb | 114 ++ .../CustomTraceListener/bin/Performance.xml | 14 + .../RemoveDefaultTrace/AssemblyInfo.vb | 31 + .../RemoveDefaultTrace/RemoveDefaultTrace.sln | 21 + .../RemoveDefaultTrace/RemoveDefaultTrace.suo | Bin 0 -> 7168 bytes .../RemoveDefaultTrace.vbproj | 97 ++ .../RemoveDefaultTrace.vbproj.user | 48 + .../Chapter06/RemoveDefaultTrace/Test.vb | 12 + .../Chapter06/TraceAssert/AssemblyInfo.vb | 31 + .../Chapter06/TraceAssert/Test.vb | 21 + .../Chapter06/TraceAssert/TraceAssert.sln | 21 + .../Chapter06/TraceAssert/TraceAssert.suo | Bin 0 -> 7168 bytes .../Chapter06/TraceAssert/TraceAssert.vbproj | 97 ++ .../TraceAssert/TraceAssert.vbproj.user | 48 + .../Chapter06/TraceSwitchTest/AssemblyInfo.vb | 31 + .../Chapter06/TraceSwitchTest/Test.vb | 28 + .../TraceSwitchTest/TraceSwitchTest.sln | 21 + .../TraceSwitchTest/TraceSwitchTest.suo | Bin 0 -> 7168 bytes .../TraceSwitchTest/TraceSwitchTest.vbproj | 97 ++ .../TraceSwitchTest.vbproj.user | 48 + .../Chapter06/TraceToConsole/AssemblyInfo.vb | 31 + .../Chapter06/TraceToConsole/Test.vb | 23 + .../TraceToConsole/TraceToConsole.sln | 21 + .../TraceToConsole/TraceToConsole.suo | Bin 0 -> 7168 bytes .../TraceToConsole/TraceToConsole.vbproj | 97 ++ .../TraceToConsole/TraceToConsole.vbproj.user | 48 + .../Chapter06/TraceToEventLog/AssemblyInfo.vb | 31 + .../Chapter06/TraceToEventLog/Test.vb | 29 + .../TraceToEventLog/TraceToEventLog.sln | 21 + .../TraceToEventLog/TraceToEventLog.suo | Bin 0 -> 7168 bytes .../TraceToEventLog/TraceToEventLog.vbproj | 97 ++ .../TraceToEventLog.vbproj.user | 48 + .../Chapter06/TraceToText/AssemblyInfo.vb | 31 + .../Chapter06/TraceToText/Test.vb | 22 + .../Chapter06/TraceToText/TraceToText.sln | 21 + .../Chapter06/TraceToText/TraceToText.suo | Bin 0 -> 7168 bytes .../Chapter06/TraceToText/TraceToText.vbproj | 97 ++ .../TraceToText/TraceToText.vbproj.user | 48 + .../TraceToText/bin/TraceListener.txt | 1 + .../Chapter07/DebugAddIn/AssemblyInfo.vb | 36 + .../Chapter07/DebugAddIn/Connect.vb | 83 ++ .../Chapter07/DebugAddIn/DebugAddIn.sln | 25 + .../Chapter07/DebugAddIn/DebugAddIn.suo | Bin 0 -> 9216 bytes .../Chapter07/DebugAddIn/DebugAddIn.vbproj | 110 ++ .../DebugAddIn/DebugAddIn.vbproj.user | 54 + .../DebugAddInSetup/DebugAddInSetup.vdproj | 1108 +++++++++++++++++ .../Chapter07/DebugAddIn/ReCreateCommands.reg | 5 + .../Chapter07/NumericTextBox/AssemblyInfo.vb | 31 + .../NumericTextBox/ControlContainer.resx | 105 ++ .../NumericTextBox/ControlContainer.vb | 66 + .../NumericTextBox/NumericTextBox.resx | 42 + .../NumericTextBox/NumericTextBox.vb | 11 + .../NumericTextBox/NumericTextBoxTest.sln | 24 + .../NumericTextBox/NumericTextBoxTest.suo | Bin 0 -> 7168 bytes .../NumericTextBox/NumericTextBoxTest.vbproj | 122 ++ .../NumericTextBoxTest.vbproj.user | 48 + ...wsApplication10.ControlContainer.resources | Bin 0 -> 666 bytes .../Chapter07/SortingDebug/AssemblyInfo.vb | 31 + .../Chapter07/SortingDebug/DebugDemo.sln | 33 + .../Chapter07/SortingDebug/DebugDemo.suo | Bin 0 -> 12800 bytes .../SortingDebug/DebugDemoForm.vbproj | 117 ++ .../SortingDebug/DebugDemoForm.vbproj.user | 48 + .../Chapter07/SortingDebug/DemoForm.resx | 171 +++ .../Chapter07/SortingDebug/DemoForm.vb | 207 +++ .../SortingDebug/SortingDll/AssemblyInfo.vb | 30 + .../SortingDll/DebugDemoLogic.vbproj | 113 ++ .../SortingDll/DebugDemoLogic.vbproj.user | 64 + .../SortingDebug/SortingDll/DemoSort.vb | 265 ++++ .../obj/Debug/DebugDemo.DebugDemo.resources | Bin 0 -> 4029 bytes Source/VisualStudio2002/Chapter08/ReadMe.txt | 13 + .../TimeServerBrowserClient/TimeServer.sln | 27 + .../TimeServerBrowserClient/TimeServer.suo | Bin 0 -> 11776 bytes .../TimeServerClient/AssemblyInfo.vb | 32 + .../TimeServerClient/ClientForm.resx | 175 +++ .../TimeServerClient/ClientForm.vb | 206 +++ .../TimeServerClient/TimeServerClient.vbproj | 117 ++ .../TimeServerClient.vbproj.user | 48 + .../TimeServerClient.ClientForm.resources | Bin 0 -> 6134 bytes .../TimeServerSoapClient/TimeServer.sln | 27 + .../TimeServerSoapClient/TimeServer.suo | Bin 0 -> 11776 bytes .../TimeServerClient/AssemblyInfo.vb | 32 + .../TimeServerClient/ClientForm.resx | 175 +++ .../TimeServerClient/ClientForm.vb | 206 +++ .../TimeServerClient/TimeServerClient.vbproj | 117 ++ .../TimeServerClient.vbproj.user | 48 + .../TimeServerClient.ClientForm.resources | Bin 0 -> 6134 bytes .../AspNetDebugDemo/AspNetDebugDemo.sln | 21 + .../AspNetDebugDemo/AspNetDebugDemo.suo | Bin 0 -> 21504 bytes .../Chapter09/AspNetDebugDemo/ReadMe.txt | 7 + .../Chapter10/DebugOnStart/AssemblyInfo.vb | 31 + .../Chapter10/DebugOnStart/Client.vb | 130 ++ .../Chapter10/DebugOnStart/DummyService.resx | 42 + .../Chapter10/DebugOnStart/DummyService.vb | 50 + .../DebugOnStart/ProjectInstaller.resx | 136 ++ .../DebugOnStart/ProjectInstaller.vb | 89 ++ .../Chapter10/DebugOnStart/Service.resx | 42 + .../Chapter10/DebugOnStart/Service.vb | 82 ++ .../Chapter10/DebugOnStart/ServiceAdmin.sln | 21 + .../Chapter10/DebugOnStart/ServiceAdmin.suo | Bin 0 -> 10240 bytes .../DebugOnStart/ServiceAdmin.vbproj | 141 +++ .../DebugOnStart/ServiceAdmin.vbproj.user | 48 + .../Chapter10/DebugOnStart/ServiceListener.vb | 92 ++ .../Chapter10/DebugOnStart/bin/error.html | 16 + .../Chapter10/DebugOnStart/bin/status.html | 25 + .../Chapter10/DebugOnStart/error.html | 16 + .../Debug/ServiceAdmin.DummyService.resources | Bin 0 -> 188 bytes .../ServiceAdmin.ProjectInstaller.resources | Bin 0 -> 3087 bytes .../Debug/ServiceAdmin.ServiceAdmin.resources | Bin 0 -> 188 bytes .../DebugOnStart/obj/Debug/error.html | 16 + .../DebugOnStart/obj/Debug/status.html | 25 + .../ServiceAdmin.DummyService.resources | Bin 0 -> 188 bytes .../ServiceAdmin.ProjectInstaller.resources | Bin 0 -> 3087 bytes .../ServiceAdmin.ServiceAdmin.resources | Bin 0 -> 188 bytes .../DebugOnStart/obj/Release/error.html | 16 + .../DebugOnStart/obj/Release/status.html | 25 + .../Chapter10/DebugOnStart/status.html | 25 + .../Chapter10/ServiceAdmin/AssemblyInfo.vb | 31 + .../Chapter10/ServiceAdmin/Client.vb | 130 ++ .../ServiceAdmin/ProjectInstaller.resx | 127 ++ .../ServiceAdmin/ProjectInstaller.vb | 83 ++ .../Chapter10/ServiceAdmin/Service.resx | 42 + .../Chapter10/ServiceAdmin/Service.vb | 82 ++ .../Chapter10/ServiceAdmin/ServiceAdmin.sln | 21 + .../Chapter10/ServiceAdmin/ServiceAdmin.suo | Bin 0 -> 10240 bytes .../ServiceAdmin/ServiceAdmin.vbproj | 131 ++ .../ServiceAdmin/ServiceAdmin.vbproj.user | 48 + .../Chapter10/ServiceAdmin/ServiceListener.vb | 92 ++ .../Chapter10/ServiceAdmin/error.html | 16 + .../ServiceAdmin.ProjectInstaller.resources | Bin 0 -> 1990 bytes .../Debug/ServiceAdmin.ServiceAdmin.resources | Bin 0 -> 188 bytes .../Chapter10/ServiceAdmin/status.html | 25 + .../Vb6UsingVb7Component/FormInterop.frm | 42 + .../GoodComVersioning/AssemblyInfo.vb | 32 + .../GoodComVersioning/InteropClass.vb | 20 + .../GoodComVersioning/InteropDemoBetter.sln | 21 + .../GoodComVersioning/InteropDemoBetter.suo | Bin 0 -> 7168 bytes .../InteropDemoBetter.vbproj | 97 ++ .../InteropDemoBetter.vbproj.user | 54 + .../Vb6UsingVb7Component/InteropDebug.exe | Bin 0 -> 20542 bytes .../Vb6UsingVb7Component/InteropDebug.pdb | Bin 0 -> 74752 bytes .../Vb6UsingVb7Component/InteropDebug.vbp | 36 + .../Vb6UsingVb7Component/InteropDebug.vbw | 1 + .../InteropDemo/AssemblyInfo.vb | 32 + .../InteropDemo/InteropClass.vb | 17 + .../InteropDemo/InteropDemo.sln | 21 + .../InteropDemo/InteropDemo.suo | Bin 0 -> 7168 bytes .../InteropDemo/InteropDemo.vbproj | 97 ++ .../InteropDemo/InteropDemo.vbproj.user | 54 + .../Vb7UsingVb6Component/AssemblyInfo.vb | 31 + .../ComPrinting/ComPrintUtils.dll | Bin 0 -> 32864 bytes .../ComPrinting/ComPrintUtils.pdb | Bin 0 -> 91136 bytes .../ComPrinting/ComPrintUtils.vbp | 39 + .../ComPrinting/ComPrintUtils.vbw | 1 + .../ComPrinting/ComPrinting.cls | 259 ++++ .../Compatibility/ComPrintUtils.dll | Bin 0 -> 32878 bytes .../Vb7UsingVb6Component/FormInterop.resx | 105 ++ .../Vb7UsingVb6Component/FormInterop.vb | 67 + .../Vb7UsingVb6Component/InteropDebug.sln | 21 + .../Vb7UsingVb6Component/InteropDebug.suo | Bin 0 -> 8704 bytes .../Vb7UsingVb6Component/InteropDebug.vbproj | 120 ++ .../InteropDebug.vbproj.user | 48 + .../obj/Debug/InteropDebug.Form1.resources | Bin 0 -> 643 bytes .../Chapter12/SqlDebug/AssemblyInfo.vb | 31 + .../Chapter12/SqlDebug/SqlDebug.resx | 114 ++ .../Chapter12/SqlDebug/SqlDebug.sln | 21 + .../Chapter12/SqlDebug/SqlDebug.suo | Bin 0 -> 7680 bytes .../Chapter12/SqlDebug/SqlDebug.vb | 147 +++ .../Chapter12/SqlDebug/SqlDebug.vbproj | 112 ++ .../Chapter12/SqlDebug/SqlDebug.vbproj.user | 48 + .../Chapter12/SqlDebug/SqlDebug.zip | Bin 0 -> 8273 bytes .../SqlScripts/Corrected sp_DebugExample.sql | 23 + .../SqlScripts/Original sp_DebugExample.sql | 17 + .../Chapter12/SqlScripts/tb_DebugTest.sql | 20 + .../Chapter13/CustomException/AssemblyInfo.vb | 31 + .../CustomException/CustomException.sln | 21 + .../CustomException/CustomException.suo | Bin 0 -> 7680 bytes .../CustomException/CustomException.vbproj | 102 ++ .../CustomException.vbproj.user | 48 + .../Chapter13/CustomException/Test.vb | 40 + .../CustomException/UserLoadException.vb | 56 + .../Chapter13/HidingDetail/AssemblyInfo.vb | 31 + .../Chapter13/HidingDetail/HidingDetail.sln | 21 + .../Chapter13/HidingDetail/HidingDetail.suo | Bin 0 -> 7168 bytes .../HidingDetail/HidingDetail.vbproj | 97 ++ .../HidingDetail/HidingDetail.vbproj.user | 48 + .../Chapter13/HidingDetail/Test.vb | 40 + .../Chapter13/MoveFileWrapper/AssemblyInfo.vb | 31 + .../MoveFileWrapper/ExceptionWrapper.vb | 89 ++ .../MoveFileWrapper/MoveFileWrapper.sln | 21 + .../MoveFileWrapper/MoveFileWrapper.suo | Bin 0 -> 7168 bytes .../MoveFileWrapper/MoveFileWrapper.vbproj | 97 ++ .../MoveFileWrapper.vbproj.user | 48 + .../AssemblyInfo.vb | 31 + .../RealisticUnhandledExcFilter.sln | 21 + .../RealisticUnhandledExcFilter.suo | Bin 0 -> 7168 bytes .../RealisticUnhandledExcFilter.vbproj | 97 ++ .../RealisticUnhandledExcFilter.vbproj.user | 48 + .../RealisticUnhandledExcFilter/Startup.vb | 70 ++ .../UnhandledExcFilter/AssemblyInfo.vb | 31 + .../Chapter13/UnhandledExcFilter/Startup.vb | 86 ++ .../UnhandledExcFilter/UnhandledExcFilter.sln | 21 + .../UnhandledExcFilter/UnhandledExcFilter.suo | Bin 0 -> 7168 bytes .../UnhandledExcFilter.vbproj | 97 ++ .../UnhandledExcFilter.vbproj.user | 48 + .../AssemblyInfo.vb | 31 + .../UnhandledExceptionWinForms/TestForm.resx | 105 ++ .../UnhandledExceptionWinForms/TestForm.vb | 63 + .../UnhandledExceptions.vb | 41 + .../UnhandledExceptionsWinForms.sln | 21 + .../UnhandledExceptionsWinForms.suo | Bin 0 -> 9216 bytes .../UnhandledExceptionsWinForms.vbproj | 117 ++ .../UnhandledExceptionsWinForms.vbproj.user | 48 + ...ndledExceptionsWinForms.TestForm.resources | Bin 0 -> 658 bytes .../Chapter14/ThreadDeadlock/AssemblyInfo.vb | 32 + .../Chapter14/ThreadDeadlock/DeadlockTest.vb | 130 ++ .../ThreadDeadlock/ThreadDeadlock.sln | 21 + .../ThreadDeadlock/ThreadDeadlock.suo | Bin 0 -> 7680 bytes .../ThreadDeadlock/ThreadDeadlock.vbproj | 97 ++ .../ThreadDeadlock/ThreadDeadlock.vbproj.user | 48 + .../Chapter14/ThreadGui/AssemblyInfo.vb | 32 + .../Chapter14/ThreadGui/Calc.vb | 46 + .../Chapter14/ThreadGui/MainForm.resx | 193 +++ .../Chapter14/ThreadGui/MainForm.vb | 220 ++++ .../Chapter14/ThreadGui/ThreadGui.sln | 21 + .../Chapter14/ThreadGui/ThreadGui.suo | Bin 0 -> 8704 bytes .../Chapter14/ThreadGui/ThreadGui.vbproj | 117 ++ .../Chapter14/ThreadGui/ThreadGui.vbproj.user | 48 + .../obj/Debug/ThreadGui.MainForm.resources | Bin 0 -> 7011 bytes .../Chapter14/ThreadMonitor/AssemblyInfo.vb | 32 + .../Chapter14/ThreadMonitor/FactorialCalc.vb | 18 + .../Chapter14/ThreadMonitor/MainForm.resx | 211 ++++ .../Chapter14/ThreadMonitor/MainForm.vb | 328 +++++ .../Chapter14/ThreadMonitor/ThreadMonitor.sln | 21 + .../Chapter14/ThreadMonitor/ThreadMonitor.suo | Bin 0 -> 8704 bytes .../ThreadMonitor/ThreadMonitor.vbproj | 117 ++ .../ThreadMonitor/ThreadMonitor.vbproj.user | 48 + .../Debug/ThreadMonitor.MainForm.resources | Bin 0 -> 8492 bytes .../Chapter14/ThreadSynch/AssemblyInfo.vb | 32 + .../Chapter14/ThreadSynch/CountMonitor.vb | 86 ++ .../Chapter14/ThreadSynch/ThreadSynch.sln | 21 + .../Chapter14/ThreadSynch/ThreadSynch.suo | Bin 0 -> 7680 bytes .../Chapter14/ThreadSynch/ThreadSynch.vbproj | 97 ++ .../ThreadSynch/ThreadSynch.vbproj.user | 48 + .../Chapter15/Heartbeat/AssemblyInfo.vb | 32 + .../Chapter15/Heartbeat/Heartbeat.vb | 20 + .../Chapter15/Heartbeat/Heartbeat.vbproj | 97 ++ .../Chapter15/Heartbeat/Heartbeat.vbproj.user | 48 + .../Chapter15/HeartbeatClient/AssemblyInfo.vb | 32 + .../HeartbeatClient/HeartbeatClient.vb | 48 + .../HeartbeatClient/HeartbeatClient.vbproj | 102 ++ .../HeartbeatClient.vbproj.user | 48 + .../Chapter15/HeartbeatMonitor.sln | 39 + .../Chapter15/HeartbeatMonitor.suo | Bin 0 -> 9728 bytes .../Chapter15/LocalMonitor/AssemblyInfo.vb | 32 + .../LocalMonitor/LocalMonitor.config | 17 + .../Chapter15/LocalMonitor/LocalMonitor.vb | 65 + .../LocalMonitor/LocalMonitor.vbproj | 106 ++ .../LocalMonitor/LocalMonitor.vbproj.user | 48 + .../LocalMonitor/bin/LocalMonitor.config | 17 + .../Chapter15/RemoteMonitor/AssemblyInfo.vb | 32 + .../RemoteMonitor/RemoteMonitor.config | 17 + .../Chapter15/RemoteMonitor/RemoteMonitor.vb | 34 + .../RemoteMonitor/RemoteMonitor.vbproj | 106 ++ .../RemoteMonitor/RemoteMonitor.vbproj.user | 48 + .../RemoteMonitor/bin/RemoteMonitor.config | 17 + .../Chapter02/Listing2-1/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-1/Listing2-1.sln | 21 + .../Chapter02/Listing2-1/Listing2-1.sln.old | 21 + .../Chapter02/Listing2-1/Listing2-1.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-1/Listing2-1.vbproj | 97 ++ .../Listing2-1/Listing2-1.vbproj.user | 48 + .../Chapter02/Listing2-1/Test.vb | 10 + .../Chapter02/Listing2-10/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-10/Listing2-10.sln | 21 + .../Chapter02/Listing2-10/Listing2-10.sln.old | 21 + .../Chapter02/Listing2-10/Listing2-10.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-10/Listing2-10.vbproj | 97 ++ .../Listing2-10/Listing2-10.vbproj.user | 48 + .../Chapter02/Listing2-10/Test.vb | 75 ++ .../Chapter02/Listing2-11/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-11/Listing2-11.sln | 21 + .../Chapter02/Listing2-11/Listing2-11.sln.old | 21 + .../Chapter02/Listing2-11/Listing2-11.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-11/Listing2-11.vbproj | 97 ++ .../Listing2-11/Listing2-11.vbproj.user | 48 + .../Chapter02/Listing2-11/Test.vb | 46 + .../Chapter02/Listing2-12/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-12/Listing2-12.sln | 21 + .../Chapter02/Listing2-12/Listing2-12.sln.old | 21 + .../Chapter02/Listing2-12/Listing2-12.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-12/Listing2-12.vbproj | 97 ++ .../Listing2-12/Listing2-12.vbproj.user | 48 + .../Chapter02/Listing2-12/Test.vb | 32 + .../Listing2-12Stackframe/AssemblyInfo.vb | 31 + .../Listing2-12Stackframe.sln | 21 + .../Listing2-12Stackframe.sln.old | 21 + .../Listing2-12Stackframe.suo | Bin 0 -> 7680 bytes .../Listing2-12Stackframe.vbproj | 97 ++ .../Listing2-12Stackframe.vbproj.user | 48 + .../Chapter02/Listing2-12Stackframe/Test.vb | 37 + .../Chapter02/Listing2-18/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-18/Listing2-18.sln | 21 + .../Chapter02/Listing2-18/Listing2-18.sln.old | 21 + .../Chapter02/Listing2-18/Listing2-18.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-18/Listing2-18.vbproj | 97 ++ .../Listing2-18/Listing2-18.vbproj.user | 48 + .../Chapter02/Listing2-18/Test.vb | 32 + .../Chapter02/Listing2-2/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-2/Listing2-2.sln | 21 + .../Chapter02/Listing2-2/Listing2-2.sln.old | 21 + .../Chapter02/Listing2-2/Listing2-2.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-2/Listing2-2.vbproj | 97 ++ .../Listing2-2/Listing2-2.vbproj.user | 48 + .../Chapter02/Listing2-2/Test.vb | 35 + .../Chapter02/Listing2-21/App.ico | Bin 0 -> 1078 bytes .../Chapter02/Listing2-21/AssemblyInfo.cs | 58 + .../Chapter02/Listing2-21/Listing2-21.csproj | 104 ++ .../Listing2-21/Listing2-21.csproj.user | 48 + .../Chapter02/Listing2-21/Listing2-21.sln | 21 + .../Chapter02/Listing2-21/Listing2-21.sln.old | 21 + .../Chapter02/Listing2-21/Listing2-21.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-21/Test.cs | 10 + .../obj/Debug/Listing2-21.exe.incr | Bin 0 -> 1164 bytes .../obj/Debug/Listing2-21.projdata | Bin 0 -> 1288 bytes .../Chapter02/Listing2-23/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-23/Listing2-23.sln | 21 + .../Chapter02/Listing2-23/Listing2-23.sln.old | 21 + .../Chapter02/Listing2-23/Listing2-23.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-23/Listing2-23.vbproj | 97 ++ .../Listing2-23/Listing2-23.vbproj.user | 48 + .../Chapter02/Listing2-23/Test.vb | 23 + .../Chapter02/Listing2-24/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-24/Listing2-24.sln | 21 + .../Chapter02/Listing2-24/Listing2-24.sln.old | 21 + .../Chapter02/Listing2-24/Listing2-24.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-24/Listing2-24.vbproj | 97 ++ .../Listing2-24/Listing2-24.vbproj.user | 48 + .../Chapter02/Listing2-24/Test.vb | 107 ++ .../Chapter02/Listing2-25/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-25/Listing2-25.sln | 21 + .../Chapter02/Listing2-25/Listing2-25.sln.old | 21 + .../Chapter02/Listing2-25/Listing2-25.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-25/Listing2-25.vbproj | 97 ++ .../Listing2-25/Listing2-25.vbproj.user | 48 + .../Chapter02/Listing2-25/Test.vb | 19 + .../Chapter02/Listing2-26/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-26/Listing2-26.sln | 21 + .../Chapter02/Listing2-26/Listing2-26.sln.old | 21 + .../Chapter02/Listing2-26/Listing2-26.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-26/Listing2-26.vbproj | 97 ++ .../Listing2-26/Listing2-26.vbproj.user | 48 + .../Chapter02/Listing2-26/Test.vb | 33 + .../Chapter02/Listing2-27/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-27/Listing2-27.sln | 21 + .../Chapter02/Listing2-27/Listing2-27.sln.old | 21 + .../Chapter02/Listing2-27/Listing2-27.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-27/Listing2-27.vbproj | 97 ++ .../Listing2-27/Listing2-27.vbproj.user | 48 + .../Chapter02/Listing2-27/Test.vb | 15 + .../Chapter02/Listing2-28/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-28/Listing2-28.sln | 21 + .../Chapter02/Listing2-28/Listing2-28.sln.old | 21 + .../Chapter02/Listing2-28/Listing2-28.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-28/Listing2-28.vbproj | 97 ++ .../Listing2-28/Listing2-28.vbproj.user | 48 + .../Chapter02/Listing2-28/Test.vb | 12 + .../Chapter02/Listing2-3/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-3/Listing2-3.sln | 21 + .../Chapter02/Listing2-3/Listing2-3.sln.old | 21 + .../Chapter02/Listing2-3/Listing2-3.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-3/Listing2-3.vbproj | 97 ++ .../Listing2-3/Listing2-3.vbproj.user | 48 + .../Chapter02/Listing2-3/Test.vb | 35 + .../Chapter02/Listing2-4/App.ico | Bin 0 -> 1078 bytes .../Chapter02/Listing2-4/AssemblyInfo.cs | 58 + .../Chapter02/Listing2-4/Listing2-4.csproj | 104 ++ .../Listing2-4/Listing2-4.csproj.user | 48 + .../Chapter02/Listing2-4/Listing2-4.sln | 21 + .../Chapter02/Listing2-4/Listing2-4.sln.old | 21 + .../Chapter02/Listing2-4/Listing2-4.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-4/Test.cs | 32 + .../Listing2-4/obj/Debug/Listing2-4.exe.incr | Bin 0 -> 1180 bytes .../Listing2-4/obj/Debug/Listing2-4.projdata | Bin 0 -> 2056 bytes .../Chapter02/Listing2-5/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-5/Listing2-5.sln | 21 + .../Chapter02/Listing2-5/Listing2-5.sln.old | 21 + .../Chapter02/Listing2-5/Listing2-5.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-5/Listing2-5.vbproj | 97 ++ .../Listing2-5/Listing2-5.vbproj.user | 48 + .../Chapter02/Listing2-5/Test.vb | 33 + .../Chapter02/Listing2-6/App.ico | Bin 0 -> 1078 bytes .../Chapter02/Listing2-6/AssemblyInfo.cs | 58 + .../Chapter02/Listing2-6/Listing2-6.csproj | 104 ++ .../Listing2-6/Listing2-6.csproj.user | 48 + .../Chapter02/Listing2-6/Listing2-6.sln | 21 + .../Chapter02/Listing2-6/Listing2-6.sln.old | 21 + .../Chapter02/Listing2-6/Listing2-6.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-6/Test.cs | 35 + .../Listing2-6/obj/Debug/Listing2-6.exe.incr | Bin 0 -> 1172 bytes .../Listing2-6/obj/Debug/Listing2-6.projdata | Bin 0 -> 1928 bytes .../Chapter02/Listing2-7/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-7/Listing2-7.sln | 21 + .../Chapter02/Listing2-7/Listing2-7.sln.old | 21 + .../Chapter02/Listing2-7/Listing2-7.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-7/Listing2-7.vbproj | 97 ++ .../Listing2-7/Listing2-7.vbproj.user | 48 + .../Chapter02/Listing2-7/Test.vb | 14 + .../Chapter02/Listing2-8/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-8/Listing2-8.sln | 21 + .../Chapter02/Listing2-8/Listing2-8.sln.old | 21 + .../Chapter02/Listing2-8/Listing2-8.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-8/Listing2-8.vbproj | 97 ++ .../Listing2-8/Listing2-8.vbproj.user | 48 + .../Chapter02/Listing2-8/Test.vb | 59 + .../Listing2-8Shadows/AssemblyInfo.vb | 31 + .../Listing2-8Shadows/Listing2-8Shadows.sln | 21 + .../Listing2-8Shadows.sln.old | 21 + .../Listing2-8Shadows/Listing2-8Shadows.suo | Bin 0 -> 7680 bytes .../Listing2-8Shadows.vbproj | 97 ++ .../Listing2-8Shadows.vbproj.user | 48 + .../Chapter02/Listing2-8Shadows/Test.vb | 59 + .../Chapter02/Listing2-9/AssemblyInfo.vb | 31 + .../Chapter02/Listing2-9/Listing2-9.sln | 21 + .../Chapter02/Listing2-9/Listing2-9.sln.old | 21 + .../Chapter02/Listing2-9/Listing2-9.suo | Bin 0 -> 7680 bytes .../Chapter02/Listing2-9/Listing2-9.vbproj | 97 ++ .../Listing2-9/Listing2-9.vbproj.user | 48 + .../Chapter02/Listing2-9/Test.vb | 66 + .../Chapter04/SortingSpeed/AssemblyInfo.vb | 31 + .../Chapter04/SortingSpeed/DebugDemo.sln | 35 + .../Chapter04/SortingSpeed/DebugDemo.sln.old | 33 + .../Chapter04/SortingSpeed/DebugDemo.suo | Bin 0 -> 12800 bytes .../SortingSpeed/DebugDemoForm.vbproj | 117 ++ .../SortingSpeed/DebugDemoForm.vbproj.user | 48 + .../Chapter04/SortingSpeed/DemoForm.resx | 171 +++ .../Chapter04/SortingSpeed/DemoForm.vb | 207 +++ .../SortingSpeed/SortingDll/AssemblyInfo.vb | 30 + .../SortingDll/DebugDemoLogic.vbproj | 113 ++ .../SortingDll/DebugDemoLogic.vbproj.user | 64 + .../SortingSpeed/SortingDll/DemoSort.vb | 265 ++++ .../obj/Debug/DebugDemo.DebugDemo.resources | Bin 0 -> 4029 bytes .../Chapter05/ErrorHandling/AssemblyInfo.vb | 31 + .../Chapter05/ErrorHandling/ErrorHandling.sln | 21 + .../ErrorHandling/ErrorHandling.sln.old | 21 + .../Chapter05/ErrorHandling/ErrorHandling.suo | Bin 0 -> 7680 bytes .../ErrorHandling/ErrorHandling.vbproj | 97 ++ .../ErrorHandling/ErrorHandling.vbproj.user | 48 + .../Chapter05/ErrorHandling/ErrorTest.vb | 41 + .../Chapter05/HelloWorld/AssemblyInfo.vb | 31 + .../Chapter05/HelloWorld/HelloWorld.sln | 21 + .../Chapter05/HelloWorld/HelloWorld.sln.old | 21 + .../Chapter05/HelloWorld/HelloWorld.suo | Bin 0 -> 7680 bytes .../Chapter05/HelloWorld/HelloWorld.vb | 9 + .../Chapter05/HelloWorld/HelloWorld.vbproj | 97 ++ .../HelloWorld/HelloWorld.vbproj.user | 48 + .../StringPerfTestOne/AssemblyInfo.vb | 31 + .../StringPerfTestOne/StringPerfTestOne.sln | 21 + .../StringPerfTestOne.sln.old | 21 + .../StringPerfTestOne/StringPerfTestOne.suo | Bin 0 -> 7680 bytes .../StringPerfTestOne.vbproj | 97 ++ .../StringPerfTestOne.vbproj.user | 48 + .../Chapter05/StringPerfTestOne/Test.vb | 15 + .../StringPerfTestTwo/AssemblyInfo.vb | 31 + .../StringPerfTestTwo/StringPerfTestTwo.sln | 21 + .../StringPerfTestTwo.sln.old | 21 + .../StringPerfTestTwo/StringPerfTestTwo.suo | Bin 0 -> 7680 bytes .../StringPerfTestTwo.vbproj | 97 ++ .../StringPerfTestTwo.vbproj.user | 48 + .../Chapter05/StringPerfTestTwo/Test.vb | 16 + .../BooleanSwitchTest/AssemblyInfo.vb | 31 + .../BooleanSwitchTest/BooleanSwitchTest.sln | 21 + .../BooleanSwitchTest.sln.old | 21 + .../BooleanSwitchTest/BooleanSwitchTest.suo | Bin 0 -> 7680 bytes .../BooleanSwitchTest.vbproj | 97 ++ .../BooleanSwitchTest.vbproj.user | 48 + .../Chapter06/BooleanSwitchTest/Test.vb | 25 + .../CustomSwitchTest/AssemblyInfo.vb | 31 + .../CustomSwitchTest/CustomSwitchTest.sln | 21 + .../CustomSwitchTest/CustomSwitchTest.sln.old | 21 + .../CustomSwitchTest/CustomSwitchTest.suo | Bin 0 -> 8192 bytes .../CustomSwitchTest/CustomSwitchTest.vbproj | 97 ++ .../CustomSwitchTest.vbproj.user | 48 + .../Chapter06/CustomSwitchTest/Test.vb | 96 ++ .../CustomTraceListener/AssemblyInfo.vb | 31 + .../CustomTraceListener.sln | 21 + .../CustomTraceListener.sln.old | 21 + .../CustomTraceListener.suo | Bin 0 -> 7680 bytes .../CustomTraceListener.vbproj | 97 ++ .../CustomTraceListener.vbproj.user | 48 + .../Chapter06/CustomTraceListener/Test.vb | 114 ++ .../CustomTraceListener/bin/Performance.xml | 14 + .../RemoveDefaultTrace/AssemblyInfo.vb | 31 + .../RemoveDefaultTrace/RemoveDefaultTrace.sln | 21 + .../RemoveDefaultTrace.sln.old | 21 + .../RemoveDefaultTrace/RemoveDefaultTrace.suo | Bin 0 -> 7680 bytes .../RemoveDefaultTrace.vbproj | 97 ++ .../RemoveDefaultTrace.vbproj.user | 48 + .../Chapter06/RemoveDefaultTrace/Test.vb | 12 + .../Chapter06/TraceAssert/AssemblyInfo.vb | 31 + .../Chapter06/TraceAssert/Test.vb | 21 + .../Chapter06/TraceAssert/TraceAssert.sln | 21 + .../Chapter06/TraceAssert/TraceAssert.sln.old | 21 + .../Chapter06/TraceAssert/TraceAssert.suo | Bin 0 -> 7680 bytes .../Chapter06/TraceAssert/TraceAssert.vbproj | 97 ++ .../TraceAssert/TraceAssert.vbproj.user | 48 + .../Chapter06/TraceSwitchTest/AssemblyInfo.vb | 31 + .../Chapter06/TraceSwitchTest/Test.vb | 28 + .../TraceSwitchTest/TraceSwitchTest.sln | 21 + .../TraceSwitchTest/TraceSwitchTest.sln.old | 21 + .../TraceSwitchTest/TraceSwitchTest.suo | Bin 0 -> 8192 bytes .../TraceSwitchTest/TraceSwitchTest.vbproj | 97 ++ .../TraceSwitchTest.vbproj.user | 48 + .../Chapter06/TraceToConsole/AssemblyInfo.vb | 31 + .../Chapter06/TraceToConsole/Test.vb | 23 + .../TraceToConsole/TraceToConsole.sln | 21 + .../TraceToConsole/TraceToConsole.sln.old | 21 + .../TraceToConsole/TraceToConsole.suo | Bin 0 -> 7680 bytes .../TraceToConsole/TraceToConsole.vbproj | 97 ++ .../TraceToConsole/TraceToConsole.vbproj.user | 48 + .../Chapter06/TraceToEventLog/AssemblyInfo.vb | 31 + .../Chapter06/TraceToEventLog/Test.vb | 29 + .../TraceToEventLog/TraceToEventLog.sln | 21 + .../TraceToEventLog/TraceToEventLog.sln.old | 21 + .../TraceToEventLog/TraceToEventLog.suo | Bin 0 -> 7680 bytes .../TraceToEventLog/TraceToEventLog.vbproj | 97 ++ .../TraceToEventLog.vbproj.user | 48 + .../Chapter06/TraceToText/AssemblyInfo.vb | 31 + .../Chapter06/TraceToText/Test.vb | 22 + .../Chapter06/TraceToText/TraceToText.sln | 21 + .../Chapter06/TraceToText/TraceToText.sln.old | 21 + .../Chapter06/TraceToText/TraceToText.suo | Bin 0 -> 7680 bytes .../Chapter06/TraceToText/TraceToText.vbproj | 97 ++ .../TraceToText/TraceToText.vbproj.user | 48 + .../TraceToText/bin/TraceListener.txt | 1 + .../Chapter07/DebugAddIn/AssemblyInfo.vb | 36 + .../Chapter07/DebugAddIn/Connect.vb | 83 ++ .../Chapter07/DebugAddIn/DebugAddIn.sln | 27 + .../Chapter07/DebugAddIn/DebugAddIn.sln.old | 25 + .../Chapter07/DebugAddIn/DebugAddIn.suo | Bin 0 -> 9216 bytes .../Chapter07/DebugAddIn/DebugAddIn.vbproj | 110 ++ .../DebugAddIn/DebugAddIn.vbproj.user | 54 + .../DebugAddInSetup/DebugAddInSetup.vdproj | 1089 ++++++++++++++++ .../Chapter07/DebugAddIn/ReCreateCommands.reg | 5 + .../Chapter07/NumericTextBox/AssemblyInfo.vb | 31 + .../NumericTextBox/ControlContainer.resx | 105 ++ .../NumericTextBox/ControlContainer.vb | 66 + .../NumericTextBox/NumericTextBox.resx | 42 + .../NumericTextBox/NumericTextBox.vb | 11 + .../NumericTextBox/NumericTextBoxTest.sln | 24 + .../NumericTextBox/NumericTextBoxTest.sln.old | 24 + .../NumericTextBox/NumericTextBoxTest.suo | Bin 0 -> 7168 bytes .../NumericTextBox/NumericTextBoxTest.vbproj | 122 ++ .../NumericTextBoxTest.vbproj.user | 48 + ...wsApplication10.ControlContainer.resources | Bin 0 -> 666 bytes .../Chapter07/SortingDebug/AssemblyInfo.vb | 31 + .../Chapter07/SortingDebug/DebugDemo.sln | 35 + .../Chapter07/SortingDebug/DebugDemo.sln.old | 33 + .../Chapter07/SortingDebug/DebugDemo.suo | Bin 0 -> 12800 bytes .../SortingDebug/DebugDemoForm.vbproj | 117 ++ .../SortingDebug/DebugDemoForm.vbproj.user | 48 + .../Chapter07/SortingDebug/DemoForm.resx | 171 +++ .../Chapter07/SortingDebug/DemoForm.vb | 207 +++ .../SortingDebug/SortingDll/AssemblyInfo.vb | 30 + .../SortingDll/DebugDemoLogic.vbproj | 113 ++ .../SortingDll/DebugDemoLogic.vbproj.user | 64 + .../SortingDebug/SortingDll/DemoSort.vb | 265 ++++ .../obj/Debug/DebugDemo.DebugDemo.resources | Bin 0 -> 4029 bytes Source/VisualStudio2003/Chapter08/ReadMe.txt | 13 + .../TimeServerBrowserClient/TimeServer.sln | 30 + .../TimeServerBrowserClient/TimeServer.suo | Bin 0 -> 11776 bytes .../TimeServerClient/AssemblyInfo.vb | 32 + .../TimeServerClient/ClientForm.resx | 175 +++ .../TimeServerClient/ClientForm.vb | 206 +++ .../TimeServerClient/TimeServerClient.vbproj | 117 ++ .../TimeServerClient.vbproj.user | 48 + .../TimeServerClient.ClientForm.resources | Bin 0 -> 6134 bytes .../TimeServerSoapClient/TimeServer.sln | 30 + .../TimeServerSoapClient/TimeServer.suo | Bin 0 -> 11776 bytes .../TimeServerClient/AssemblyInfo.vb | 32 + .../TimeServerClient/ClientForm.resx | 175 +++ .../TimeServerClient/ClientForm.vb | 206 +++ .../TimeServerClient/TimeServerClient.vbproj | 117 ++ .../TimeServerClient.vbproj.user | 48 + .../TimeServerClient.ClientForm.resources | Bin 0 -> 6134 bytes .../AspNetDebugDemo/AspNetDebugDemo.sln | 21 + .../AspNetDebugDemo/AspNetDebugDemo.suo | Bin 0 -> 22016 bytes .../Chapter09/AspNetDebugDemo/ReadMe.txt | 10 + .../Chapter10/DebugOnStart/AssemblyInfo.vb | 31 + .../Chapter10/DebugOnStart/Client.vb | 130 ++ .../Chapter10/DebugOnStart/DummyService.resx | 42 + .../Chapter10/DebugOnStart/DummyService.vb | 50 + .../DebugOnStart/ProjectInstaller.resx | 136 ++ .../DebugOnStart/ProjectInstaller.vb | 89 ++ .../Chapter10/DebugOnStart/Service.resx | 42 + .../Chapter10/DebugOnStart/Service.vb | 82 ++ .../Chapter10/DebugOnStart/ServiceAdmin.sln | 21 + .../Chapter10/DebugOnStart/ServiceAdmin.suo | Bin 0 -> 10240 bytes .../DebugOnStart/ServiceAdmin.vbproj | 141 +++ .../DebugOnStart/ServiceAdmin.vbproj.user | 48 + .../Chapter10/DebugOnStart/ServiceListener.vb | 92 ++ .../Chapter10/DebugOnStart/bin/error.html | 16 + .../Chapter10/DebugOnStart/bin/status.html | 25 + .../Chapter10/DebugOnStart/error.html | 16 + .../Debug/ServiceAdmin.DummyService.resources | Bin 0 -> 188 bytes .../ServiceAdmin.ProjectInstaller.resources | Bin 0 -> 3087 bytes .../Debug/ServiceAdmin.ServiceAdmin.resources | Bin 0 -> 188 bytes .../DebugOnStart/obj/Debug/error.html | 16 + .../DebugOnStart/obj/Debug/status.html | 25 + .../ServiceAdmin.DummyService.resources | Bin 0 -> 188 bytes .../ServiceAdmin.ProjectInstaller.resources | Bin 0 -> 3087 bytes .../ServiceAdmin.ServiceAdmin.resources | Bin 0 -> 188 bytes .../DebugOnStart/obj/Release/error.html | 16 + .../DebugOnStart/obj/Release/status.html | 25 + .../Chapter10/DebugOnStart/status.html | 25 + .../Chapter10/ServiceAdmin/AssemblyInfo.vb | 31 + .../Chapter10/ServiceAdmin/Client.vb | 130 ++ .../ServiceAdmin/ProjectInstaller.resx | 127 ++ .../ServiceAdmin/ProjectInstaller.vb | 83 ++ .../Chapter10/ServiceAdmin/Service.resx | 42 + .../Chapter10/ServiceAdmin/Service.vb | 82 ++ .../Chapter10/ServiceAdmin/ServiceAdmin.sln | 21 + .../Chapter10/ServiceAdmin/ServiceAdmin.suo | Bin 0 -> 10240 bytes .../ServiceAdmin/ServiceAdmin.vbproj | 131 ++ .../ServiceAdmin/ServiceAdmin.vbproj.user | 48 + .../Chapter10/ServiceAdmin/ServiceListener.vb | 92 ++ .../Chapter10/ServiceAdmin/error.html | 16 + .../Chapter10/ServiceAdmin/status.html | 25 + .../Vb6UsingVb7Component/FormInterop.frm | 42 + .../GoodComVersioning/AssemblyInfo.vb | 32 + .../GoodComVersioning/InteropClass.vb | 20 + .../GoodComVersioning/InteropDemoBetter.sln | 21 + .../InteropDemoBetter.sln.old | 21 + .../GoodComVersioning/InteropDemoBetter.suo | Bin 0 -> 7680 bytes .../InteropDemoBetter.vbproj | 97 ++ .../InteropDemoBetter.vbproj.user | 54 + .../Vb6UsingVb7Component/InteropDebug.exe | Bin 0 -> 20542 bytes .../Vb6UsingVb7Component/InteropDebug.pdb | Bin 0 -> 74752 bytes .../Vb6UsingVb7Component/InteropDebug.vbp | 36 + .../Vb6UsingVb7Component/InteropDebug.vbw | 1 + .../InteropDemo/AssemblyInfo.vb | 32 + .../InteropDemo/InteropClass.vb | 17 + .../InteropDemo/InteropDemo.sln | 21 + .../InteropDemo/InteropDemo.sln.old | 21 + .../InteropDemo/InteropDemo.suo | Bin 0 -> 7680 bytes .../InteropDemo/InteropDemo.vbproj | 97 ++ .../InteropDemo/InteropDemo.vbproj.user | 54 + .../Vb7UsingVb6Component/AssemblyInfo.vb | 31 + .../ComPrinting/ComPrintUtils.dll | Bin 0 -> 32864 bytes .../ComPrinting/ComPrintUtils.pdb | Bin 0 -> 91136 bytes .../ComPrinting/ComPrintUtils.vbp | 39 + .../ComPrinting/ComPrintUtils.vbw | 1 + .../ComPrinting/ComPrinting.cls | 259 ++++ .../Compatibility/ComPrintUtils.dll | Bin 0 -> 32878 bytes .../Vb7UsingVb6Component/FormInterop.resx | 105 ++ .../Vb7UsingVb6Component/FormInterop.vb | 67 + .../Vb7UsingVb6Component/InteropDebug.sln | 21 + .../Vb7UsingVb6Component/InteropDebug.sln.old | 21 + .../Vb7UsingVb6Component/InteropDebug.suo | Bin 0 -> 8704 bytes .../Vb7UsingVb6Component/InteropDebug.vbproj | 120 ++ .../InteropDebug.vbproj.user | 48 + .../obj/Debug/InteropDebug.Form1.resources | Bin 0 -> 643 bytes .../Chapter12/SqlDebug/AssemblyInfo.vb | 31 + .../Chapter12/SqlDebug/SqlDebug.resx | 114 ++ .../Chapter12/SqlDebug/SqlDebug.sln | 21 + .../Chapter12/SqlDebug/SqlDebug.sln.old | 21 + .../Chapter12/SqlDebug/SqlDebug.suo | Bin 0 -> 8192 bytes .../Chapter12/SqlDebug/SqlDebug.vb | 147 +++ .../Chapter12/SqlDebug/SqlDebug.vbproj | 112 ++ .../Chapter12/SqlDebug/SqlDebug.vbproj.user | 48 + .../Chapter12/SqlDebug/SqlDebug.zip | Bin 0 -> 8273 bytes .../SqlScripts/Corrected sp_DebugExample.sql | 23 + .../SqlScripts/Original sp_DebugExample.sql | 17 + .../Chapter12/SqlScripts/tb_DebugTest.sql | 20 + .../Chapter13/CustomException/AssemblyInfo.vb | 31 + .../CustomException/CustomException.sln | 21 + .../CustomException/CustomException.sln.old | 21 + .../CustomException/CustomException.suo | Bin 0 -> 8192 bytes .../CustomException/CustomException.vbproj | 102 ++ .../CustomException.vbproj.user | 48 + .../Chapter13/CustomException/Test.vb | 40 + .../CustomException/UserLoadException.vb | 56 + .../Chapter13/HidingDetail/AssemblyInfo.vb | 31 + .../Chapter13/HidingDetail/HidingDetail.sln | 21 + .../HidingDetail/HidingDetail.sln.old | 21 + .../Chapter13/HidingDetail/HidingDetail.suo | Bin 0 -> 7680 bytes .../HidingDetail/HidingDetail.vbproj | 97 ++ .../HidingDetail/HidingDetail.vbproj.user | 48 + .../Chapter13/HidingDetail/Test.vb | 40 + .../Chapter13/MoveFileWrapper/AssemblyInfo.vb | 31 + .../MoveFileWrapper/ExceptionWrapper.vb | 89 ++ .../MoveFileWrapper/MoveFileWrapper.sln | 21 + .../MoveFileWrapper/MoveFileWrapper.sln.old | 21 + .../MoveFileWrapper/MoveFileWrapper.suo | Bin 0 -> 7680 bytes .../MoveFileWrapper/MoveFileWrapper.vbproj | 97 ++ .../MoveFileWrapper.vbproj.user | 48 + .../AssemblyInfo.vb | 31 + .../RealisticUnhandledExcFilter.sln | 21 + .../RealisticUnhandledExcFilter.sln.old | 21 + .../RealisticUnhandledExcFilter.suo | Bin 0 -> 8192 bytes .../RealisticUnhandledExcFilter.vbproj | 97 ++ .../RealisticUnhandledExcFilter.vbproj.user | 48 + .../RealisticUnhandledExcFilter/Startup.vb | 70 ++ .../UnhandledExcFilter/AssemblyInfo.vb | 31 + .../Chapter13/UnhandledExcFilter/Startup.vb | 86 ++ .../UnhandledExcFilter/UnhandledExcFilter.sln | 21 + .../UnhandledExcFilter.sln.old | 21 + .../UnhandledExcFilter/UnhandledExcFilter.suo | Bin 0 -> 7680 bytes .../UnhandledExcFilter.vbproj | 97 ++ .../UnhandledExcFilter.vbproj.user | 48 + .../AssemblyInfo.vb | 31 + .../UnhandledExceptionWinForms/TestForm.resx | 105 ++ .../UnhandledExceptionWinForms/TestForm.vb | 63 + .../UnhandledExceptions.vb | 41 + .../UnhandledExceptionsWinForms.sln | 21 + .../UnhandledExceptionsWinForms.sln.old | 21 + .../UnhandledExceptionsWinForms.suo | Bin 0 -> 9216 bytes .../UnhandledExceptionsWinForms.vbproj | 117 ++ .../UnhandledExceptionsWinForms.vbproj.user | 48 + ...ndledExceptionsWinForms.TestForm.resources | Bin 0 -> 658 bytes .../Chapter14/ThreadDeadlock/AssemblyInfo.vb | 32 + .../Chapter14/ThreadDeadlock/DeadlockTest.vb | 130 ++ .../ThreadDeadlock/ThreadDeadlock.sln | 21 + .../ThreadDeadlock/ThreadDeadlock.suo | Bin 0 -> 7680 bytes .../ThreadDeadlock/ThreadDeadlock.vbproj | 97 ++ .../ThreadDeadlock/ThreadDeadlock.vbproj.user | 48 + .../Chapter14/ThreadGui/AssemblyInfo.vb | 32 + .../Chapter14/ThreadGui/Calc.vb | 46 + .../Chapter14/ThreadGui/MainForm.resx | 193 +++ .../Chapter14/ThreadGui/MainForm.vb | 220 ++++ .../Chapter14/ThreadGui/ThreadGui.sln | 21 + .../Chapter14/ThreadGui/ThreadGui.suo | Bin 0 -> 8704 bytes .../Chapter14/ThreadGui/ThreadGui.vbproj | 117 ++ .../Chapter14/ThreadGui/ThreadGui.vbproj.user | 48 + .../obj/Debug/ThreadGui.MainForm.resources | Bin 0 -> 7011 bytes .../Chapter14/ThreadMonitor/AssemblyInfo.vb | 32 + .../Chapter14/ThreadMonitor/FactorialCalc.vb | 18 + .../Chapter14/ThreadMonitor/MainForm.resx | 211 ++++ .../Chapter14/ThreadMonitor/MainForm.vb | 328 +++++ .../Chapter14/ThreadMonitor/ThreadMonitor.sln | 21 + .../Chapter14/ThreadMonitor/ThreadMonitor.suo | Bin 0 -> 8704 bytes .../ThreadMonitor/ThreadMonitor.vbproj | 117 ++ .../ThreadMonitor/ThreadMonitor.vbproj.user | 48 + .../Debug/ThreadMonitor.MainForm.resources | Bin 0 -> 8492 bytes .../Chapter14/ThreadSynch/AssemblyInfo.vb | 32 + .../Chapter14/ThreadSynch/CountMonitor.vb | 86 ++ .../Chapter14/ThreadSynch/ThreadSynch.sln | 21 + .../Chapter14/ThreadSynch/ThreadSynch.suo | Bin 0 -> 7680 bytes .../Chapter14/ThreadSynch/ThreadSynch.vbproj | 97 ++ .../ThreadSynch/ThreadSynch.vbproj.user | 48 + .../Chapter15/Heartbeat/AssemblyInfo.vb | 32 + .../Chapter15/Heartbeat/Heartbeat.vb | 20 + .../Chapter15/Heartbeat/Heartbeat.vbproj | 97 ++ .../Chapter15/Heartbeat/Heartbeat.vbproj.user | 48 + .../Chapter15/HeartbeatClient/AssemblyInfo.vb | 32 + .../HeartbeatClient/HeartbeatClient.vb | 48 + .../HeartbeatClient/HeartbeatClient.vbproj | 102 ++ .../HeartbeatClient.vbproj.user | 48 + .../Chapter15/HeartbeatMonitor.sln | 48 + .../Chapter15/HeartbeatMonitor.suo | Bin 0 -> 9728 bytes .../Chapter15/LocalMonitor/AssemblyInfo.vb | 32 + .../LocalMonitor/LocalMonitor.config | 17 + .../Chapter15/LocalMonitor/LocalMonitor.vb | 65 + .../LocalMonitor/LocalMonitor.vbproj | 106 ++ .../LocalMonitor/LocalMonitor.vbproj.user | 48 + .../LocalMonitor/bin/LocalMonitor.config | 17 + .../Chapter15/RemoteMonitor/AssemblyInfo.vb | 32 + .../RemoteMonitor/RemoteMonitor.config | 17 + .../Chapter15/RemoteMonitor/RemoteMonitor.vb | 34 + .../RemoteMonitor/RemoteMonitor.vbproj | 106 ++ .../RemoteMonitor/RemoteMonitor.vbproj.user | 48 + .../RemoteMonitor/bin/RemoteMonitor.config | 17 + contributing.md | 14 + 1077 files changed, 49066 insertions(+) create mode 100644 557.html create mode 100644 919.pdf create mode 100644 920.pdf create mode 100644 9781590590508.jpg create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/AspNetDebugDemo.vbproj create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/AspNetDebugDemo.vbproj.webinfo create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/AssemblyInfo.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/Global.asax create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/Global.asax.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/Global.asax.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/Styles.css create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/Web.config create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/access.cnf create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/deptodoc.btr create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/doctodep.btr create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/service.cnf create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/service.lck create mode 100644 Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/services.cnf create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/AspNetDebugDemo.vbproj create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/AspNetDebugDemo.vbproj.webinfo create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/AssemblyInfo.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/Styles.css create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/Web.config create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AspNetDebugDemo.vbproj create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AspNetDebugDemo.vbproj.webinfo create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AssemblyInfo.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx.resx create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx.vb create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Styles.css create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Web.config create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/access.cnf create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/deptodoc.btr create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/doctodep.btr create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/linkinfo.cnf create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/service.cnf create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/service.lck create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/services.cnf create mode 100644 Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/writeto.cnf create mode 100644 Inetpub/wwwroot/TimeServer/AssemblyInfo.vb create mode 100644 Inetpub/wwwroot/TimeServer/Global.asax create mode 100644 Inetpub/wwwroot/TimeServer/Global.asax.resx create mode 100644 Inetpub/wwwroot/TimeServer/Global.asax.vb create mode 100644 Inetpub/wwwroot/TimeServer/SoapMonitor.vb create mode 100644 Inetpub/wwwroot/TimeServer/TimeServer.vbproj create mode 100644 Inetpub/wwwroot/TimeServer/TimeServer.vbproj.webinfo create mode 100644 Inetpub/wwwroot/TimeServer/TimeService.asmx create mode 100644 Inetpub/wwwroot/TimeServer/TimeService.asmx.resx create mode 100644 Inetpub/wwwroot/TimeServer/TimeService.asmx.vb create mode 100644 Inetpub/wwwroot/TimeServer/Web.config create mode 100644 Inetpub/wwwroot/TimeServer/_vti_pvt/access.cnf create mode 100644 Inetpub/wwwroot/TimeServer/_vti_pvt/deptodoc.btr create mode 100644 Inetpub/wwwroot/TimeServer/_vti_pvt/doctodep.btr create mode 100644 Inetpub/wwwroot/TimeServer/_vti_pvt/service.cnf create mode 100644 Inetpub/wwwroot/TimeServer/_vti_pvt/service.lck create mode 100644 Inetpub/wwwroot/TimeServer/_vti_pvt/services.cnf create mode 100644 Inetpub/wwwroot/TimeServer/bin/TimeServer.dll create mode 100644 Inetpub/wwwroot/TimeServer/bin/TimeServer.pdb create mode 100644 Inetpub/wwwroot/TimeServer_2002/AssemblyInfo.vb create mode 100644 Inetpub/wwwroot/TimeServer_2002/Global.asax create mode 100644 Inetpub/wwwroot/TimeServer_2002/Global.asax.resx create mode 100644 Inetpub/wwwroot/TimeServer_2002/Global.asax.vb create mode 100644 Inetpub/wwwroot/TimeServer_2002/SoapMonitor.vb create mode 100644 Inetpub/wwwroot/TimeServer_2002/TimeServer.vbproj create mode 100644 Inetpub/wwwroot/TimeServer_2002/TimeServer.vbproj.webinfo create mode 100644 Inetpub/wwwroot/TimeServer_2002/TimeService.asmx create mode 100644 Inetpub/wwwroot/TimeServer_2002/TimeService.asmx.resx create mode 100644 Inetpub/wwwroot/TimeServer_2002/TimeService.asmx.vb create mode 100644 Inetpub/wwwroot/TimeServer_2002/Web.config create mode 100644 Inetpub/wwwroot/TimeServer_2002/_vti_pvt/access.cnf create mode 100644 Inetpub/wwwroot/TimeServer_2002/_vti_pvt/deptodoc.btr create mode 100644 Inetpub/wwwroot/TimeServer_2002/_vti_pvt/doctodep.btr create mode 100644 Inetpub/wwwroot/TimeServer_2002/_vti_pvt/service.cnf create mode 100644 Inetpub/wwwroot/TimeServer_2002/_vti_pvt/service.lck create mode 100644 Inetpub/wwwroot/TimeServer_2002/_vti_pvt/services.cnf create mode 100644 Inetpub/wwwroot/TimeServer_2002/bin/TimeServer.dll create mode 100644 Inetpub/wwwroot/TimeServer_2002/bin/TimeServer.pdb create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 Source/Changes.txt create mode 100644 Source/ReadMe.txt create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-1/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-1/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-10/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-10/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-11/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-11/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-18/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-18/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-2/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-2/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-21/App.ico create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-21/AssemblyInfo.cs create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.csproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.csproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-21/Test.cs create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-21/obj/Debug/Listing2-21.exe.incr create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-21/obj/Debug/Listing2-21.projdata create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-23/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-23/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-24/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-24/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-25/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-25/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-26/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-26/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-27/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-27/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-28/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-28/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-3/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-3/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-4/App.ico create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-4/AssemblyInfo.cs create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.csproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.csproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-4/Test.cs create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-4/obj/Debug/Listing2-4.exe.incr create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-4/obj/Debug/Listing2-4.projdata create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-5/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-5/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-6/App.ico create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-6/AssemblyInfo.cs create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.csproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.csproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-6/Test.cs create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-6/obj/Debug/Listing2-6.exe.incr create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-6/obj/Debug/Listing2-6.projdata create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-7/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-7/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8Shadows/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Test.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-9/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.sln create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.suo create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.vbproj create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter02/Listing2-9/Test.vb create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemo.sln create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemo.suo create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemoForm.vbproj create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemoForm.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/DemoForm.resx create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/DemoForm.vb create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DemoSort.vb create mode 100644 Source/VisualStudio2002/Chapter04/SortingSpeed/obj/Debug/DebugDemo.DebugDemo.resources create mode 100644 Source/VisualStudio2002/Chapter05/ErrorHandling/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.sln create mode 100644 Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.suo create mode 100644 Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.vbproj create mode 100644 Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorTest.vb create mode 100644 Source/VisualStudio2002/Chapter05/HelloWorld/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.sln create mode 100644 Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.suo create mode 100644 Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vb create mode 100644 Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vbproj create mode 100644 Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestOne/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.sln create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.suo create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestOne/Test.vb create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestTwo/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.suo create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.vbproj create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter05/StringPerfTestTwo/Test.vb create mode 100644 Source/VisualStudio2002/Chapter06/BooleanSwitchTest/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln create mode 100644 Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.suo create mode 100644 Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj create mode 100644 Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter06/BooleanSwitchTest/Test.vb create mode 100644 Source/VisualStudio2002/Chapter06/CustomSwitchTest/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.sln create mode 100644 Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.suo create mode 100644 Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj create mode 100644 Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter06/CustomSwitchTest/Test.vb create mode 100644 Source/VisualStudio2002/Chapter06/CustomTraceListener/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.sln create mode 100644 Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.suo create mode 100644 Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.vbproj create mode 100644 Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter06/CustomTraceListener/Test.vb create mode 100644 Source/VisualStudio2002/Chapter06/CustomTraceListener/bin/Performance.xml create mode 100644 Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln create mode 100644 Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.suo create mode 100644 Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj create mode 100644 Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/Test.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceAssert/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceAssert/Test.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.sln create mode 100644 Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.suo create mode 100644 Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.vbproj create mode 100644 Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter06/TraceSwitchTest/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceSwitchTest/Test.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.sln create mode 100644 Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.suo create mode 100644 Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj create mode 100644 Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter06/TraceToConsole/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceToConsole/Test.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.sln create mode 100644 Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.suo create mode 100644 Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.vbproj create mode 100644 Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter06/TraceToEventLog/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceToEventLog/Test.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.sln create mode 100644 Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.suo create mode 100644 Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.vbproj create mode 100644 Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter06/TraceToText/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceToText/Test.vb create mode 100644 Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.sln create mode 100644 Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.suo create mode 100644 Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.vbproj create mode 100644 Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter06/TraceToText/bin/TraceListener.txt create mode 100644 Source/VisualStudio2002/Chapter07/DebugAddIn/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter07/DebugAddIn/Connect.vb create mode 100644 Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.sln create mode 100644 Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.suo create mode 100644 Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.vbproj create mode 100644 Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddInSetup/DebugAddInSetup.vdproj create mode 100644 Source/VisualStudio2002/Chapter07/DebugAddIn/ReCreateCommands.reg create mode 100644 Source/VisualStudio2002/Chapter07/NumericTextBox/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter07/NumericTextBox/ControlContainer.resx create mode 100644 Source/VisualStudio2002/Chapter07/NumericTextBox/ControlContainer.vb create mode 100644 Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBox.resx create mode 100644 Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBox.vb create mode 100644 Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.sln create mode 100644 Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.suo create mode 100644 Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.vbproj create mode 100644 Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter07/NumericTextBox/obj/Debug/WindowsApplication10.ControlContainer.resources create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemo.sln create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemo.suo create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemoForm.vbproj create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemoForm.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/DemoForm.resx create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/DemoForm.vb create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DemoSort.vb create mode 100644 Source/VisualStudio2002/Chapter07/SortingDebug/obj/Debug/DebugDemo.DebugDemo.resources create mode 100644 Source/VisualStudio2002/Chapter08/ReadMe.txt create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServer.sln create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServer.suo create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.resx create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.vb create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServer.sln create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServer.suo create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.resx create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.vb create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources create mode 100644 Source/VisualStudio2002/Chapter09/AspNetDebugDemo/AspNetDebugDemo.sln create mode 100644 Source/VisualStudio2002/Chapter09/AspNetDebugDemo/AspNetDebugDemo.suo create mode 100644 Source/VisualStudio2002/Chapter09/AspNetDebugDemo/ReadMe.txt create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/Client.vb create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/DummyService.resx create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/DummyService.vb create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/ProjectInstaller.resx create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/ProjectInstaller.vb create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/Service.resx create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/Service.vb create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.sln create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.suo create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.vbproj create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceListener.vb create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/bin/error.html create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/bin/status.html create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/error.html create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Debug/ServiceAdmin.DummyService.resources create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Debug/ServiceAdmin.ProjectInstaller.resources create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Debug/ServiceAdmin.ServiceAdmin.resources create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Debug/error.html create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Debug/status.html create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Release/ServiceAdmin.DummyService.resources create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Release/ServiceAdmin.ProjectInstaller.resources create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Release/ServiceAdmin.ServiceAdmin.resources create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Release/error.html create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Release/status.html create mode 100644 Source/VisualStudio2002/Chapter10/DebugOnStart/status.html create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/Client.vb create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/ProjectInstaller.resx create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/ProjectInstaller.vb create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/Service.resx create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/Service.vb create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.sln create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.suo create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.vbproj create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceListener.vb create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/error.html create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/obj/Debug/ServiceAdmin.ProjectInstaller.resources create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/obj/Debug/ServiceAdmin.ServiceAdmin.resources create mode 100644 Source/VisualStudio2002/Chapter10/ServiceAdmin/status.html create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/FormInterop.frm create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropClass.vb create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.suo create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.exe create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.pdb create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.vbp create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.vbw create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropClass.vb create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.suo create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.vbproj create mode 100644 Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.dll create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.pdb create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbp create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbw create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrinting.cls create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/Compatibility/ComPrintUtils.dll create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/FormInterop.resx create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/FormInterop.vb create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.sln create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.suo create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/obj/Debug/InteropDebug.Form1.resources create mode 100644 Source/VisualStudio2002/Chapter12/SqlDebug/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.resx create mode 100644 Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.sln create mode 100644 Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.suo create mode 100644 Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vb create mode 100644 Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vbproj create mode 100644 Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.zip create mode 100644 Source/VisualStudio2002/Chapter12/SqlScripts/Corrected sp_DebugExample.sql create mode 100644 Source/VisualStudio2002/Chapter12/SqlScripts/Original sp_DebugExample.sql create mode 100644 Source/VisualStudio2002/Chapter12/SqlScripts/tb_DebugTest.sql create mode 100644 Source/VisualStudio2002/Chapter13/CustomException/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter13/CustomException/CustomException.sln create mode 100644 Source/VisualStudio2002/Chapter13/CustomException/CustomException.suo create mode 100644 Source/VisualStudio2002/Chapter13/CustomException/CustomException.vbproj create mode 100644 Source/VisualStudio2002/Chapter13/CustomException/CustomException.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter13/CustomException/Test.vb create mode 100644 Source/VisualStudio2002/Chapter13/CustomException/UserLoadException.vb create mode 100644 Source/VisualStudio2002/Chapter13/HidingDetail/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.sln create mode 100644 Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.suo create mode 100644 Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.vbproj create mode 100644 Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter13/HidingDetail/Test.vb create mode 100644 Source/VisualStudio2002/Chapter13/MoveFileWrapper/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter13/MoveFileWrapper/ExceptionWrapper.vb create mode 100644 Source/VisualStudio2002/Chapter13/MoveFileWrapper/MoveFileWrapper.sln create mode 100644 Source/VisualStudio2002/Chapter13/MoveFileWrapper/MoveFileWrapper.suo create mode 100644 Source/VisualStudio2002/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj create mode 100644 Source/VisualStudio2002/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln create mode 100644 Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.suo create mode 100644 Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.vbproj create mode 100644 Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/Startup.vb create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExcFilter/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExcFilter/Startup.vb create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.suo create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/TestForm.resx create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/TestForm.vb create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptions.vb create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.suo create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/obj/Debug/UnhandledExceptionsWinForms.TestForm.resources create mode 100644 Source/VisualStudio2002/Chapter14/ThreadDeadlock/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter14/ThreadDeadlock/DeadlockTest.vb create mode 100644 Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.sln create mode 100644 Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.suo create mode 100644 Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj create mode 100644 Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter14/ThreadGui/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter14/ThreadGui/Calc.vb create mode 100644 Source/VisualStudio2002/Chapter14/ThreadGui/MainForm.resx create mode 100644 Source/VisualStudio2002/Chapter14/ThreadGui/MainForm.vb create mode 100644 Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.sln create mode 100644 Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.suo create mode 100644 Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.vbproj create mode 100644 Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter14/ThreadGui/obj/Debug/ThreadGui.MainForm.resources create mode 100644 Source/VisualStudio2002/Chapter14/ThreadMonitor/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter14/ThreadMonitor/FactorialCalc.vb create mode 100644 Source/VisualStudio2002/Chapter14/ThreadMonitor/MainForm.resx create mode 100644 Source/VisualStudio2002/Chapter14/ThreadMonitor/MainForm.vb create mode 100644 Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.sln create mode 100644 Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.suo create mode 100644 Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.vbproj create mode 100644 Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter14/ThreadMonitor/obj/Debug/ThreadMonitor.MainForm.resources create mode 100644 Source/VisualStudio2002/Chapter14/ThreadSynch/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter14/ThreadSynch/CountMonitor.vb create mode 100644 Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.sln create mode 100644 Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.suo create mode 100644 Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.vbproj create mode 100644 Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter15/Heartbeat/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vb create mode 100644 Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vbproj create mode 100644 Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter15/HeartbeatClient/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vb create mode 100644 Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vbproj create mode 100644 Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter15/HeartbeatMonitor.sln create mode 100644 Source/VisualStudio2002/Chapter15/HeartbeatMonitor.suo create mode 100644 Source/VisualStudio2002/Chapter15/LocalMonitor/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.config create mode 100644 Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vb create mode 100644 Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vbproj create mode 100644 Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter15/LocalMonitor/bin/LocalMonitor.config create mode 100644 Source/VisualStudio2002/Chapter15/RemoteMonitor/AssemblyInfo.vb create mode 100644 Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.config create mode 100644 Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vb create mode 100644 Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vbproj create mode 100644 Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vbproj.user create mode 100644 Source/VisualStudio2002/Chapter15/RemoteMonitor/bin/RemoteMonitor.config create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-1/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-1/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-10/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-10/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-11/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-11/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-18/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-18/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-2/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-2/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-21/App.ico create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-21/AssemblyInfo.cs create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.csproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.csproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-21/Test.cs create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-21/obj/Debug/Listing2-21.exe.incr create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-21/obj/Debug/Listing2-21.projdata create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-23/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-23/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-24/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-24/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-25/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-25/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-26/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-26/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-27/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-27/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-28/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-28/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-3/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-3/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-4/App.ico create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-4/AssemblyInfo.cs create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.csproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.csproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-4/Test.cs create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-4/obj/Debug/Listing2-4.exe.incr create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-4/obj/Debug/Listing2-4.projdata create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-5/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-5/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-6/App.ico create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-6/AssemblyInfo.cs create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.csproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.csproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-6/Test.cs create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-6/obj/Debug/Listing2-6.exe.incr create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-6/obj/Debug/Listing2-6.projdata create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-7/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-7/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8Shadows/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Test.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-9/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.sln create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.sln.old create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.suo create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.vbproj create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter02/Listing2-9/Test.vb create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.sln create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.sln.old create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.suo create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemoForm.vbproj create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemoForm.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/DemoForm.resx create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/DemoForm.vb create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DemoSort.vb create mode 100644 Source/VisualStudio2003/Chapter04/SortingSpeed/obj/Debug/DebugDemo.DebugDemo.resources create mode 100644 Source/VisualStudio2003/Chapter05/ErrorHandling/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.sln create mode 100644 Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.sln.old create mode 100644 Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.suo create mode 100644 Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.vbproj create mode 100644 Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorTest.vb create mode 100644 Source/VisualStudio2003/Chapter05/HelloWorld/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.sln create mode 100644 Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.sln.old create mode 100644 Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.suo create mode 100644 Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vb create mode 100644 Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vbproj create mode 100644 Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestOne/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.sln create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.sln.old create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.suo create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestOne/Test.vb create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestTwo/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln.old create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.suo create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.vbproj create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter05/StringPerfTestTwo/Test.vb create mode 100644 Source/VisualStudio2003/Chapter06/BooleanSwitchTest/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln create mode 100644 Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln.old create mode 100644 Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.suo create mode 100644 Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj create mode 100644 Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter06/BooleanSwitchTest/Test.vb create mode 100644 Source/VisualStudio2003/Chapter06/CustomSwitchTest/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.sln create mode 100644 Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.sln.old create mode 100644 Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.suo create mode 100644 Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj create mode 100644 Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter06/CustomSwitchTest/Test.vb create mode 100644 Source/VisualStudio2003/Chapter06/CustomTraceListener/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.sln create mode 100644 Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.sln.old create mode 100644 Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.suo create mode 100644 Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.vbproj create mode 100644 Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter06/CustomTraceListener/Test.vb create mode 100644 Source/VisualStudio2003/Chapter06/CustomTraceListener/bin/Performance.xml create mode 100644 Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln create mode 100644 Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln.old create mode 100644 Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.suo create mode 100644 Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj create mode 100644 Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/Test.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceAssert/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceAssert/Test.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.sln create mode 100644 Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.sln.old create mode 100644 Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.suo create mode 100644 Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.vbproj create mode 100644 Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter06/TraceSwitchTest/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceSwitchTest/Test.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.sln create mode 100644 Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.sln.old create mode 100644 Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.suo create mode 100644 Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj create mode 100644 Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter06/TraceToConsole/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceToConsole/Test.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.sln create mode 100644 Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.sln.old create mode 100644 Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.suo create mode 100644 Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.vbproj create mode 100644 Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter06/TraceToEventLog/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceToEventLog/Test.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.sln create mode 100644 Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.sln.old create mode 100644 Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.suo create mode 100644 Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.vbproj create mode 100644 Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter06/TraceToText/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceToText/Test.vb create mode 100644 Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.sln create mode 100644 Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.sln.old create mode 100644 Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.suo create mode 100644 Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.vbproj create mode 100644 Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter06/TraceToText/bin/TraceListener.txt create mode 100644 Source/VisualStudio2003/Chapter07/DebugAddIn/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter07/DebugAddIn/Connect.vb create mode 100644 Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.sln create mode 100644 Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.sln.old create mode 100644 Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.suo create mode 100644 Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.vbproj create mode 100644 Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddInSetup/DebugAddInSetup.vdproj create mode 100644 Source/VisualStudio2003/Chapter07/DebugAddIn/ReCreateCommands.reg create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/ControlContainer.resx create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/ControlContainer.vb create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBox.resx create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBox.vb create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.sln create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.sln.old create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.suo create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.vbproj create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter07/NumericTextBox/obj/Debug/WindowsApplication10.ControlContainer.resources create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.sln create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.sln.old create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.suo create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemoForm.vbproj create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemoForm.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/DemoForm.resx create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/DemoForm.vb create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DemoSort.vb create mode 100644 Source/VisualStudio2003/Chapter07/SortingDebug/obj/Debug/DebugDemo.DebugDemo.resources create mode 100644 Source/VisualStudio2003/Chapter08/ReadMe.txt create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServer.sln create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServer.suo create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.resx create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.vb create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServer.sln create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServer.suo create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.resx create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.vb create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources create mode 100644 Source/VisualStudio2003/Chapter09/AspNetDebugDemo/AspNetDebugDemo.sln create mode 100644 Source/VisualStudio2003/Chapter09/AspNetDebugDemo/AspNetDebugDemo.suo create mode 100644 Source/VisualStudio2003/Chapter09/AspNetDebugDemo/ReadMe.txt create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/Client.vb create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/DummyService.resx create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/DummyService.vb create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/ProjectInstaller.resx create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/ProjectInstaller.vb create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/Service.resx create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/Service.vb create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.sln create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.suo create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.vbproj create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceListener.vb create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/bin/error.html create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/bin/status.html create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/error.html create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Debug/ServiceAdmin.DummyService.resources create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Debug/ServiceAdmin.ProjectInstaller.resources create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Debug/ServiceAdmin.ServiceAdmin.resources create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Debug/error.html create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Debug/status.html create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Release/ServiceAdmin.DummyService.resources create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Release/ServiceAdmin.ProjectInstaller.resources create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Release/ServiceAdmin.ServiceAdmin.resources create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Release/error.html create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Release/status.html create mode 100644 Source/VisualStudio2003/Chapter10/DebugOnStart/status.html create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/Client.vb create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/ProjectInstaller.resx create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/ProjectInstaller.vb create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/Service.resx create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/Service.vb create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.sln create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.suo create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.vbproj create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceListener.vb create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/error.html create mode 100644 Source/VisualStudio2003/Chapter10/ServiceAdmin/status.html create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/FormInterop.frm create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropClass.vb create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln.old create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.suo create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.exe create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.pdb create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.vbp create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.vbw create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropClass.vb create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln.old create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.suo create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.vbproj create mode 100644 Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.dll create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.pdb create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbp create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbw create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrinting.cls create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/Compatibility/ComPrintUtils.dll create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/FormInterop.resx create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/FormInterop.vb create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.sln create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.sln.old create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.suo create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/obj/Debug/InteropDebug.Form1.resources create mode 100644 Source/VisualStudio2003/Chapter12/SqlDebug/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.resx create mode 100644 Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.sln create mode 100644 Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.sln.old create mode 100644 Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.suo create mode 100644 Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vb create mode 100644 Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vbproj create mode 100644 Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.zip create mode 100644 Source/VisualStudio2003/Chapter12/SqlScripts/Corrected sp_DebugExample.sql create mode 100644 Source/VisualStudio2003/Chapter12/SqlScripts/Original sp_DebugExample.sql create mode 100644 Source/VisualStudio2003/Chapter12/SqlScripts/tb_DebugTest.sql create mode 100644 Source/VisualStudio2003/Chapter13/CustomException/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter13/CustomException/CustomException.sln create mode 100644 Source/VisualStudio2003/Chapter13/CustomException/CustomException.sln.old create mode 100644 Source/VisualStudio2003/Chapter13/CustomException/CustomException.suo create mode 100644 Source/VisualStudio2003/Chapter13/CustomException/CustomException.vbproj create mode 100644 Source/VisualStudio2003/Chapter13/CustomException/CustomException.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter13/CustomException/Test.vb create mode 100644 Source/VisualStudio2003/Chapter13/CustomException/UserLoadException.vb create mode 100644 Source/VisualStudio2003/Chapter13/HidingDetail/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.sln create mode 100644 Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.sln.old create mode 100644 Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.suo create mode 100644 Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.vbproj create mode 100644 Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter13/HidingDetail/Test.vb create mode 100644 Source/VisualStudio2003/Chapter13/MoveFileWrapper/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter13/MoveFileWrapper/ExceptionWrapper.vb create mode 100644 Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.sln create mode 100644 Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.sln.old create mode 100644 Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.suo create mode 100644 Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj create mode 100644 Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln create mode 100644 Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln.old create mode 100644 Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.suo create mode 100644 Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.vbproj create mode 100644 Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/Startup.vb create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExcFilter/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExcFilter/Startup.vb create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln.old create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.suo create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/TestForm.resx create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/TestForm.vb create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptions.vb create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln.old create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.suo create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/obj/Debug/UnhandledExceptionsWinForms.TestForm.resources create mode 100644 Source/VisualStudio2003/Chapter14/ThreadDeadlock/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter14/ThreadDeadlock/DeadlockTest.vb create mode 100644 Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.sln create mode 100644 Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.suo create mode 100644 Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj create mode 100644 Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter14/ThreadGui/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter14/ThreadGui/Calc.vb create mode 100644 Source/VisualStudio2003/Chapter14/ThreadGui/MainForm.resx create mode 100644 Source/VisualStudio2003/Chapter14/ThreadGui/MainForm.vb create mode 100644 Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.sln create mode 100644 Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.suo create mode 100644 Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.vbproj create mode 100644 Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter14/ThreadGui/obj/Debug/ThreadGui.MainForm.resources create mode 100644 Source/VisualStudio2003/Chapter14/ThreadMonitor/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter14/ThreadMonitor/FactorialCalc.vb create mode 100644 Source/VisualStudio2003/Chapter14/ThreadMonitor/MainForm.resx create mode 100644 Source/VisualStudio2003/Chapter14/ThreadMonitor/MainForm.vb create mode 100644 Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.sln create mode 100644 Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.suo create mode 100644 Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.vbproj create mode 100644 Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter14/ThreadMonitor/obj/Debug/ThreadMonitor.MainForm.resources create mode 100644 Source/VisualStudio2003/Chapter14/ThreadSynch/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter14/ThreadSynch/CountMonitor.vb create mode 100644 Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.sln create mode 100644 Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.suo create mode 100644 Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.vbproj create mode 100644 Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter15/Heartbeat/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vb create mode 100644 Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vbproj create mode 100644 Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter15/HeartbeatClient/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vb create mode 100644 Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vbproj create mode 100644 Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter15/HeartbeatMonitor.sln create mode 100644 Source/VisualStudio2003/Chapter15/HeartbeatMonitor.suo create mode 100644 Source/VisualStudio2003/Chapter15/LocalMonitor/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.config create mode 100644 Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vb create mode 100644 Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vbproj create mode 100644 Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter15/LocalMonitor/bin/LocalMonitor.config create mode 100644 Source/VisualStudio2003/Chapter15/RemoteMonitor/AssemblyInfo.vb create mode 100644 Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.config create mode 100644 Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vb create mode 100644 Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vbproj create mode 100644 Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vbproj.user create mode 100644 Source/VisualStudio2003/Chapter15/RemoteMonitor/bin/RemoteMonitor.config create mode 100644 contributing.md diff --git a/557.html b/557.html new file mode 100644 index 0000000..285cd90 --- /dev/null +++ b/557.html @@ -0,0 +1,19 @@ +Part One Debugging in the VB .NET World
+Chapter 1: Strategic Debugging Issues
+Chapter 2: Language Surprises in VB .NET
+Part Two The Debugging Tools
+Chapter 3: The Visual Studio .NET Debugger
+Chapter 4: Using the Visual Studio .NET Debugger
+Chapter 5: Other Debugging Tools
+Chapter 6: Tracing and Instrumentation
+Part Three Debugging Applications
+Chapter 7: Windows Forms Debugging
+Chapter 8: Web Services Debugging
+Chapter 9: ASP.NET Debugging
+Chapter 10: Windows Services Debugging
+Chapter 11: VB.Classic Debugging
+Chapter 12: SQL Server Debugging
+Part Four Debugging Common Scenarios
+Chapter 13: Error Handling and Exception Management
+Chapter 14: Debugging Multithreaded Applications
+Chapter 15: Debugging Distributed Systems \ No newline at end of file diff --git a/919.pdf b/919.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bb9faf6ada1bb2bfd26216cc8a0e4b44fc8dc5ab GIT binary patch literal 407019 zcmeFYbyStx`aen|-7T7{4``>z(h6XMW~0pZU~SFl)%lb3wUz@tBuahR5)*VGt+?0&+C7 z#S;|;;el0b9N?xdHa>6*5EOV-2f-k`z*7-q0D|%e2moLFP|!2PKoBoP00I>Ps&XKH z7!My0P*Vf(AR2UlKA4~&1cWCp4#I;wSRlxQ{$G5&T;P^?2!sf-kUu|Ae$ek4$N>-g zk0vOT2iOGS^KWf1*gwX>1b77hJ`N@%#P|0$9w^^G#_{q({y~qAANG%Nd_qG1zyb{W z`#2ax2=b3MC{*C@SYS|I=-=r9Z9F`G!wiE#VgIF#_aF3N{Ct1k2f!(Te_-K({+Biw zz~TSoGmM8{P~abJ0uZ5pvU{fC_L!ytfc|0ho&zi-;# z+F%0zj>XNz)W#m}0^C_Vur_d8K`>qj9{7=ir6UL`2+#v*0oPE=(a{aKzpy`FHC*5x zzb_^~;*LI&H4qgNG7~bh_BOpNH4dk{@bnZXqrTTx?6Ixw$z6 z#$zsIDPSgGE?@@bHx+_g@|y9&fDzAtD~{*tX6oYh`>sOpn3?6&<$qsx;Nl{d{!6v! zcss#CU>Q?4Q+r1%0D*?772Fko3$Xn+TvfQ6sRhsrKn6JcyGhF2#ZlhT}%R4%_{jNMUl{EvF0!|$u0#=0EdjM~MJOXb3 zMX;QMxub=RgVpb`fP$2DH2=~x0?Rv`BOfQ8U8|JpTJ z8_<}*LSQ`*luv*MKxAX@26q9T_NH!dSvasPz!Md?gO!^#2!@b^KUM-*>H;@?j)$!n zRi^8!qW$>3cwu9?D5>vkTw3@NnPV6sGWg&-64;>iDbbeR21cJRRnT(iQcHPAG#43b zJVPYBXX@cl2VPB&1+>WX=M!dg$Vg;Cj|mA&2w7zRCyTRRAU7$%NE!CpR;TNx8 zP8UV_c14y^UgGtpPFj~^J!$j%ANXtOCDQVZ7;y!S{inzLII=xxyi3A2Qyj6Q{bQcW z)~Px0G|Uu-x_+}XbXk;NWnIvFT^#w~$>jjW4R7zEv&WaA1Qq>5nQ@$L1AOHkr{^qu zV+qGipDc>U)e=0QkMtsxzkOv?tysfid?5VTs-aly@+8%A--K)a1I=J@bIyJgR)+e^ z67oxHUH9)Xg$?~Y5)azqw?1D;#EpGX#SbEi`c5~unsQm15s#8mNFPonY)`GNoycTU zQzS4b@@4pR74zz)*K);HVCzuNmoHz!jR-VV&0k+&RhTSMqzn=M`IstH_E@Se(2QY9w_?ODV_P0 zl16Z(m?B!nvGs$p=jtizfq>6m@tYw{4_Q+p^R-I7`I(2%-VgGoOID?_WWjLbEl-Mc zQ*%_`sI#o6ef0r^yf~L`{H_}jJM{FD*ISh-fhuo zk{uGv$KJ?+Ki#~&NH}YW>l!#&8k%7CgcHF)I@6oHx zu%KBU_qSVe%@Y|cMI=MAjx-k5&)?ZJ*O~m_l&$(IFY^nkznSq#ggFK(_3I|*BypO3 z;mWX8=d3q)-024)Cv?>EBiMFu+~eX~d>{4O%?^y2VN|ZGw_jZ(zK`rK*saq|4K$Q1 z3~mR<3VPd-a3?J&ihGE=8Pjww5F5SoZeXrA9`50K$H1}i?el^AA>Jv^RpGaY)LxMX z2Sf8{@x|MC&dfiL=Sq%PqIyeW56*kyns@62&D9smrr95joiY*}6yu0CSjeOWW9s=W z`A(8E#Hz(e_@#L(m8ae=5r;~b!X1UA&_+Qa(xjb`0c9mC!bBZ5N>avNuQ0yheN9q7 zwcby#P6Mpq@u#2J8mi4Oq8=50oQa-}1aVaB$}G)@Cw6Lt&nXR&=jLeWkuRD|_1*6f zPLtB79l(zIj2Ę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
  • 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
    + This PAGE-level custom error page was defined in MainForm.ErrorPage + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx.resx b/Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx.resx new file mode 100644 index 0000000..cb94e8a --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx.resx @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Assembly + + + False + + \ No newline at end of file diff --git a/Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx.vb b/Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx.vb new file mode 100644 index 0000000..346af60 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx.vb @@ -0,0 +1,33 @@ +Public Class CustomErrorPage + Inherits System.Web.UI.Page + +#Region " Web Form Designer Generated Code " + + 'This call is required by the Web Form Designer. + Private Sub InitializeComponent() + + End Sub + Protected WithEvents lblText As System.Web.UI.WebControls.Label + Protected WithEvents btnBack As System.Web.UI.WebControls.Button + + 'NOTE: The following placeholder declaration is required by the Web Form Designer. + 'Do not delete or move it. + Private designerPlaceholderDeclaration As System.Object + + Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init + 'CODEGEN: This method call is required by the Web Form Designer + 'Do not modify it using the code editor. + InitializeComponent() + End Sub + +#End Region + + Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'Put user code to initialize the page here + End Sub + + Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click + Server.ClearError() + Response.Redirect(Request.QueryString("aspxErrorPath")) + End Sub +End Class diff --git a/Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx b/Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx new file mode 100644 index 0000000..3845a82 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx @@ -0,0 +1,18 @@ +<%@ Page Language="vb" AutoEventWireup="false" Codebehind="DefaultErrorPage.aspx.vb" Inherits="AspNetDebugDemo.DefaultErrorPage"%> + + + + DefaultErrorPage + + + + + + +
    + This APP-level custom error page was defined in Web.config +
    + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx.resx b/Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx.resx new file mode 100644 index 0000000..cb94e8a --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx.resx @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Assembly + + + False + + \ No newline at end of file diff --git a/Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx.vb b/Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx.vb new file mode 100644 index 0000000..be4fdd1 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/DefaultErrorPage.aspx.vb @@ -0,0 +1,33 @@ +Public Class DefaultErrorPage + Inherits System.Web.UI.Page + +#Region " Web Form Designer Generated Code " + + 'This call is required by the Web Form Designer. + Private Sub InitializeComponent() + + End Sub + Protected WithEvents btnBack As System.Web.UI.WebControls.Button + Protected WithEvents lblText As System.Web.UI.WebControls.Label + + 'NOTE: The following placeholder declaration is required by the Web Form Designer. + 'Do not delete or move it. + Private designerPlaceholderDeclaration As System.Object + + Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init + 'CODEGEN: This method call is required by the Web Form Designer + 'Do not modify it using the code editor. + InitializeComponent() + End Sub + +#End Region + + Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'Put user code to initialize the page here + End Sub + + Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click + Server.ClearError() + Response.Redirect(Request.QueryString("aspxErrorPath")) + End Sub +End Class diff --git a/Inetpub/wwwroot/AspNetDebugDemo/Global.asax b/Inetpub/wwwroot/AspNetDebugDemo/Global.asax new file mode 100644 index 0000000..b94fec6 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.vb" Inherits="AspNetDebugDemo.Global" %> \ No newline at end of file diff --git a/Inetpub/wwwroot/AspNetDebugDemo/Global.asax.resx b/Inetpub/wwwroot/AspNetDebugDemo/Global.asax.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/Global.asax.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo/Global.asax.vb b/Inetpub/wwwroot/AspNetDebugDemo/Global.asax.vb new file mode 100644 index 0000000..26c73b8 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/Global.asax.vb @@ -0,0 +1,60 @@ +Imports System.Web +Imports System.Web.SessionState + +Public Class Global + Inherits System.Web.HttpApplication + +#Region " Component Designer Generated Code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Component Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Component Designer + 'It can be modified using the Component Designer. + 'Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container() + End Sub + +#End Region + + Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the application is started + End Sub + + Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the session is started + End Sub + + Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) + ' Fires at the beginning of each request + End Sub + + Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) + ' Fires upon attempting to authenticate the use + End Sub + + Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when an error occurs + Context.Trace.Write(Server.GetLastError.InnerException.Message) + End Sub + + Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the session ends + End Sub + + Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the application ends + End Sub + +End Class diff --git a/Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx b/Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx new file mode 100644 index 0000000..1c9b7b0 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx @@ -0,0 +1,50 @@ +<%@ Page Language="vb" AutoEventWireup="false" Codebehind="MainForm.aspx.vb" Inherits="AspNetDebugDemo.MainForm" trace="False" traceMode="SortByTime"%> + + + + MainForm + + + + + + +
    + + ASP.NET tracing demo + +   + ASP.NET debugging and error-handling demo
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx.resx b/Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx.resx new file mode 100644 index 0000000..cb94e8a --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx.resx @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Assembly + + + False + + \ No newline at end of file diff --git a/Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx.vb b/Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx.vb new file mode 100644 index 0000000..70ebe73 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/MainForm.aspx.vb @@ -0,0 +1,94 @@ +Public Class MainForm : Inherits System.Web.UI.Page + +#Region " Web Form Designer Generated Code " + + 'This call is required by the Web Form Designer. + Private Sub InitializeComponent() + + End Sub + Protected WithEvents lblMain As System.Web.UI.WebControls.Label + Protected WithEvents lblException As System.Web.UI.WebControls.Label + Protected WithEvents btnPageLevel As System.Web.UI.WebControls.Button + Protected WithEvents btnNoLevel As System.Web.UI.WebControls.Button + Protected WithEvents btnAppLevel As System.Web.UI.WebControls.Button + Protected WithEvents btnProcLevel As System.Web.UI.WebControls.Button + Protected WithEvents btnPageTracingOn As System.Web.UI.WebControls.Button + Protected WithEvents btnAppTracingShow As System.Web.UI.WebControls.Button + Protected WithEvents lblTrace As System.Web.UI.WebControls.Label + + 'NOTE: The following placeholder declaration is required by the Web Form Designer. + 'Do not delete or move it. + Private designerPlaceholderDeclaration As System.Object + + Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init + 'CODEGEN: This method call is required by the Web Form Designer + 'Do not modify it using the code editor. + InitializeComponent() + End Sub + +#End Region + + Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'Put user code to initialize the page here + End Sub + + Private Sub btnNoLevel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNoLevel.Click + 'Doesn't catch error. + 'Doesn't deal with error. + 'Displays error using ASP.NET default error page. + 'NB Ensure page-level and app-level error handling + 'switched-off before testing this procedure. + Dim Test As Object + Test.ToString() + End Sub + + Private Sub btnProcLevel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcLevel.Click + 'Catches error at procedure-level + 'Deals with error in Catch clause + 'Displays error using Catch clause + Try + Dim Test As Object + Test.ToString() + Catch ex As Exception + Me.lblException.Text = ex.Message + Finally + Server.ClearError() + End Try + End Sub + + Private Sub btnPageLevel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPageLevel.Click + 'Catches error at page-level + 'Deals with error in Me.Page_Error event + 'Displays error using Me.ErrorPage property + Me.ErrorPage = "CustomErrorPage.aspx" + Dim Test As Object + Test.ToString() + End Sub + + Private Sub btnAppLevel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAppLevel.Click + 'Catches error at application-level + 'Deals with error in Global.asax.Application_Error event + 'Displays error using default redirect in Web.config + Dim Test As Object + Test.ToString() + End Sub + + Private Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Error + Trace.Write(Server.GetLastError.Message) + 'Server.ClearError() + End Sub + + Private Sub btnPageTracingOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPageTracingOn.Click + With Me.Trace + .IsEnabled = True + .TraceMode = TraceMode.SortByTime + .Write("Information", "This is some custom trace information") + .Warn("Warning", "This is a custom trace warning") + End With + End Sub + + Private Sub btnAppTracingShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAppTracingShow.Click + Response.Redirect("trace.axd") + End Sub + +End Class diff --git a/Inetpub/wwwroot/AspNetDebugDemo/Styles.css b/Inetpub/wwwroot/AspNetDebugDemo/Styles.css new file mode 100644 index 0000000..8fe2cd9 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/Styles.css @@ -0,0 +1,163 @@ +/* Default CSS Stylesheet for a new Web Application project */ + +BODY +{ + BACKGROUND-COLOR: white; + FONT-FAMILY: Verdana, Helvetica, sans-serif; + FONT-SIZE: .8em; + FONT-WEIGHT: normal; + LETTER-SPACING: normal; + TEXT-TRANSFORM: none; + WORD-SPACING: normal +} + +H1, H2, H3, H4, H5, TH, THEAD, TFOOT +{ + COLOR: #003366; +} +H1 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 2em; + font-weight: 700; + font-style: normal; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +H2 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 1.75em; + font-weight: 700; + font-style: normal; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +H3 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 1.58em; + font-weight: 500; + font-style: normal; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +H4 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 1.33em; + font-weight: 500; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +H5, DT { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 1em; + font-weight: 700; + font-style: normal; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +H6 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: .8em; + font-weight: 700; + font-style: normal; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +TFOOT, THEAD { + font-size: 1em; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + font-family: Arial, Helvetica, sans-serif; + } + +TH { + vertical-align: baseline; + font-size: 1em; + font-weight: bold; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + font-family: Arial, Helvetica, sans-serif; + } + + +A:link { + text-decoration: none; + color: #3333cc; + } + +A:visited { + text-decoration: none; + color: #333399; + } + +A:active { + text-decoration: none; + color: #333399; + } + +A:hover { + text-decoration: underline; + color: #3333cc; + } + +SMALL { + font-size: .7em; + } + +BIG { + font-size: 1.17em; + } + +BLOCKQUOTE, PRE { + font-family: Courier New, monospace; + } + + +UL LI { + list-style-type: square ; + } + +UL LI LI { + list-style-type: disc; + } + +UL LI LI LI { + list-style-type: circle; + } + +OL LI { + list-style-type: decimal; + } + +OL OL LI { + list-style-type: lower-alpha; + } + +OL OL OL LI { + list-style-type: lower-roman; + } + +IMG { + margin-top: 5px; + margin-left: 10px; + margin-right: 10px; + } diff --git a/Inetpub/wwwroot/AspNetDebugDemo/Web.config b/Inetpub/wwwroot/AspNetDebugDemo/Web.config new file mode 100644 index 0000000..301ff1c --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/Web.config @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/access.cnf b/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/access.cnf new file mode 100644 index 0000000..7759afe --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/access.cnf @@ -0,0 +1,4 @@ +vti_encoding:SR|utf8-nl +RealmName:CHEETAH +InheritPermissions:true +PasswordDir:c:\\inetpub\\wwwroot\\_vti_pvt diff --git a/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/deptodoc.btr b/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/deptodoc.btr new file mode 100644 index 0000000000000000000000000000000000000000..10a761c72f0c83fdc40429513f0b87868874442f GIT binary patch literal 324 zcmb1PWMFUsVjdti6-q5;7zGSGz%bAO;{Q;I=$nIH_3%E?L01IYjYO8^gf literal 0 HcmV?d00001 diff --git a/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/doctodep.btr b/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/doctodep.btr new file mode 100644 index 0000000000000000000000000000000000000000..4b85379668e9a1f2fa1b5208103367d12c5cdbb7 GIT binary patch literal 324 wcmb1PWMFUsVjdti6-q5;7zGSGz%bAO;{Q;I=$nIH_3f{HQ#06;(u(f|Me literal 0 HcmV?d00001 diff --git a/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/service.cnf b/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/service.cnf new file mode 100644 index 0000000..4e26c17 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/service.cnf @@ -0,0 +1,20 @@ +vti_encoding:SR|utf8-nl +vti_casesensitiveurls:IX|0 +vti_httpdversion:SX|Microsoft-IIS/5.0 +vti_textextensions:SX|.txt.actproj.asm.c.cc.cod.cpp.cs.cxx.dbs.def.dsp.dsw.etp.ext.fky.h.hpp.hxx.i.idl.inc.inl.kci.lgn.lst.mak.map.mk.odh.odl.prc.rc.rc2.rct.rgs.rul.s.sql.srf.tab.tlh.tli.trg.txt.udf.udt.user.usr.vap.vb.vcproj.viw.vspscc.vsscc.vssscc. +vti_featurelist:VX|vti_ACIPAddresses vti_ACCreateNewUsers vti_ACChangePassword vti_ACNoUserGroup vti_ACCreateNewGroups vti_ACModifyGroups vti_ServiceMarkUrlDirExec vti_ServerEmailTransport +vti_dependenciesood:IR|0 +vti_webservertype:SR|msiis +vti_publishmetainfokeys:VR|vti_assignedto vti_approvallevel vti_categories vti_description +vti_categories:VR|Travel Expense\\ Report Business Competition Goals/Objectives Ideas Miscellaneous Waiting VIP In\\ Process Planning Schedule +vti_htmlextensions:SX|.htm.html.htx.stm.stm.html.htm.shtml.shtm.htt.asp.alx.asa. +vti_approvallevels:VR|Content\\ Review Legal\\ Review Code\\ Review Manager\\ Review +vti_timecreated:TR|01 Mar 2003 13:49:55 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_longfilenames:IX|1 +vti_welcomenames:VX|Default.htm Default.asp iisstart.asp Default.aspx +vti_insecureserverurl:SR|http://localhost +vti_secureserverurl:SR|https://localhost +vti_disableautoimgsizeexts:SX|.asp +vti_oldestcompatibleversion:SR|2.0.0.0 +vti_restartmanual:IX|0 diff --git a/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/service.lck b/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/service.lck new file mode 100644 index 0000000..e69de29 diff --git a/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/services.cnf b/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/services.cnf new file mode 100644 index 0000000..b498fd4 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/_vti_pvt/services.cnf @@ -0,0 +1 @@ +/ diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/AspNetDebugDemo.vbproj b/Inetpub/wwwroot/AspNetDebugDemo_2002/AspNetDebugDemo.vbproj new file mode 100644 index 0000000..69032e0 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/AspNetDebugDemo.vbproj @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/AspNetDebugDemo.vbproj.webinfo b/Inetpub/wwwroot/AspNetDebugDemo_2002/AspNetDebugDemo.vbproj.webinfo new file mode 100644 index 0000000..7b2a46a --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/AspNetDebugDemo.vbproj.webinfo @@ -0,0 +1,4 @@ + + + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/AssemblyInfo.vb b/Inetpub/wwwroot/AspNetDebugDemo_2002/AssemblyInfo.vb new file mode 100644 index 0000000..e9e06d0 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx b/Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx new file mode 100644 index 0000000..1c53086 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx @@ -0,0 +1,17 @@ +<%@ Page Language="vb" AutoEventWireup="false" Codebehind="CustomErrorPage.aspx.vb" Inherits="AspNetDebugDemo.CustomErrorPage"%> + + + + CustomErrorPage + + + + + + +
    + This PAGE-level custom error page was defined in MainForm.ErrorPage
    + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx.resx b/Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx.resx new file mode 100644 index 0000000..cb94e8a --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx.resx @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Assembly + + + False + + \ No newline at end of file diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx.vb b/Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx.vb new file mode 100644 index 0000000..346af60 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/CustomErrorPage.aspx.vb @@ -0,0 +1,33 @@ +Public Class CustomErrorPage + Inherits System.Web.UI.Page + +#Region " Web Form Designer Generated Code " + + 'This call is required by the Web Form Designer. + Private Sub InitializeComponent() + + End Sub + Protected WithEvents lblText As System.Web.UI.WebControls.Label + Protected WithEvents btnBack As System.Web.UI.WebControls.Button + + 'NOTE: The following placeholder declaration is required by the Web Form Designer. + 'Do not delete or move it. + Private designerPlaceholderDeclaration As System.Object + + Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init + 'CODEGEN: This method call is required by the Web Form Designer + 'Do not modify it using the code editor. + InitializeComponent() + End Sub + +#End Region + + Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'Put user code to initialize the page here + End Sub + + Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click + Server.ClearError() + Response.Redirect(Request.QueryString("aspxErrorPath")) + End Sub +End Class diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx b/Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx new file mode 100644 index 0000000..3845a82 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx @@ -0,0 +1,18 @@ +<%@ Page Language="vb" AutoEventWireup="false" Codebehind="DefaultErrorPage.aspx.vb" Inherits="AspNetDebugDemo.DefaultErrorPage"%> + + + + DefaultErrorPage + + + + + + +
    + This APP-level custom error page was defined in Web.config +
    + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx.resx b/Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx.resx new file mode 100644 index 0000000..cb94e8a --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx.resx @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Assembly + + + False + + \ No newline at end of file diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx.vb b/Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx.vb new file mode 100644 index 0000000..be4fdd1 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/DefaultErrorPage.aspx.vb @@ -0,0 +1,33 @@ +Public Class DefaultErrorPage + Inherits System.Web.UI.Page + +#Region " Web Form Designer Generated Code " + + 'This call is required by the Web Form Designer. + Private Sub InitializeComponent() + + End Sub + Protected WithEvents btnBack As System.Web.UI.WebControls.Button + Protected WithEvents lblText As System.Web.UI.WebControls.Label + + 'NOTE: The following placeholder declaration is required by the Web Form Designer. + 'Do not delete or move it. + Private designerPlaceholderDeclaration As System.Object + + Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init + 'CODEGEN: This method call is required by the Web Form Designer + 'Do not modify it using the code editor. + InitializeComponent() + End Sub + +#End Region + + Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'Put user code to initialize the page here + End Sub + + Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click + Server.ClearError() + Response.Redirect(Request.QueryString("aspxErrorPath")) + End Sub +End Class diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax b/Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax new file mode 100644 index 0000000..b94fec6 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.vb" Inherits="AspNetDebugDemo.Global" %> \ No newline at end of file diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax.resx b/Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax.vb b/Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax.vb new file mode 100644 index 0000000..26c73b8 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/Global.asax.vb @@ -0,0 +1,60 @@ +Imports System.Web +Imports System.Web.SessionState + +Public Class Global + Inherits System.Web.HttpApplication + +#Region " Component Designer Generated Code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Component Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Component Designer + 'It can be modified using the Component Designer. + 'Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container() + End Sub + +#End Region + + Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the application is started + End Sub + + Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the session is started + End Sub + + Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) + ' Fires at the beginning of each request + End Sub + + Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) + ' Fires upon attempting to authenticate the use + End Sub + + Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when an error occurs + Context.Trace.Write(Server.GetLastError.InnerException.Message) + End Sub + + Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the session ends + End Sub + + Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the application ends + End Sub + +End Class diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx b/Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx new file mode 100644 index 0000000..1c9b7b0 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx @@ -0,0 +1,50 @@ +<%@ Page Language="vb" AutoEventWireup="false" Codebehind="MainForm.aspx.vb" Inherits="AspNetDebugDemo.MainForm" trace="False" traceMode="SortByTime"%> + + + + MainForm + + + + + + +
    + + ASP.NET tracing demo + +   + ASP.NET debugging and error-handling demo
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx.resx b/Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx.resx new file mode 100644 index 0000000..cb94e8a --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx.resx @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Assembly + + + False + + \ No newline at end of file diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx.vb b/Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx.vb new file mode 100644 index 0000000..70ebe73 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/MainForm.aspx.vb @@ -0,0 +1,94 @@ +Public Class MainForm : Inherits System.Web.UI.Page + +#Region " Web Form Designer Generated Code " + + 'This call is required by the Web Form Designer. + Private Sub InitializeComponent() + + End Sub + Protected WithEvents lblMain As System.Web.UI.WebControls.Label + Protected WithEvents lblException As System.Web.UI.WebControls.Label + Protected WithEvents btnPageLevel As System.Web.UI.WebControls.Button + Protected WithEvents btnNoLevel As System.Web.UI.WebControls.Button + Protected WithEvents btnAppLevel As System.Web.UI.WebControls.Button + Protected WithEvents btnProcLevel As System.Web.UI.WebControls.Button + Protected WithEvents btnPageTracingOn As System.Web.UI.WebControls.Button + Protected WithEvents btnAppTracingShow As System.Web.UI.WebControls.Button + Protected WithEvents lblTrace As System.Web.UI.WebControls.Label + + 'NOTE: The following placeholder declaration is required by the Web Form Designer. + 'Do not delete or move it. + Private designerPlaceholderDeclaration As System.Object + + Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init + 'CODEGEN: This method call is required by the Web Form Designer + 'Do not modify it using the code editor. + InitializeComponent() + End Sub + +#End Region + + Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'Put user code to initialize the page here + End Sub + + Private Sub btnNoLevel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNoLevel.Click + 'Doesn't catch error. + 'Doesn't deal with error. + 'Displays error using ASP.NET default error page. + 'NB Ensure page-level and app-level error handling + 'switched-off before testing this procedure. + Dim Test As Object + Test.ToString() + End Sub + + Private Sub btnProcLevel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcLevel.Click + 'Catches error at procedure-level + 'Deals with error in Catch clause + 'Displays error using Catch clause + Try + Dim Test As Object + Test.ToString() + Catch ex As Exception + Me.lblException.Text = ex.Message + Finally + Server.ClearError() + End Try + End Sub + + Private Sub btnPageLevel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPageLevel.Click + 'Catches error at page-level + 'Deals with error in Me.Page_Error event + 'Displays error using Me.ErrorPage property + Me.ErrorPage = "CustomErrorPage.aspx" + Dim Test As Object + Test.ToString() + End Sub + + Private Sub btnAppLevel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAppLevel.Click + 'Catches error at application-level + 'Deals with error in Global.asax.Application_Error event + 'Displays error using default redirect in Web.config + Dim Test As Object + Test.ToString() + End Sub + + Private Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Error + Trace.Write(Server.GetLastError.Message) + 'Server.ClearError() + End Sub + + Private Sub btnPageTracingOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPageTracingOn.Click + With Me.Trace + .IsEnabled = True + .TraceMode = TraceMode.SortByTime + .Write("Information", "This is some custom trace information") + .Warn("Warning", "This is a custom trace warning") + End With + End Sub + + Private Sub btnAppTracingShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAppTracingShow.Click + Response.Redirect("trace.axd") + End Sub + +End Class diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/Styles.css b/Inetpub/wwwroot/AspNetDebugDemo_2002/Styles.css new file mode 100644 index 0000000..8fe2cd9 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/Styles.css @@ -0,0 +1,163 @@ +/* Default CSS Stylesheet for a new Web Application project */ + +BODY +{ + BACKGROUND-COLOR: white; + FONT-FAMILY: Verdana, Helvetica, sans-serif; + FONT-SIZE: .8em; + FONT-WEIGHT: normal; + LETTER-SPACING: normal; + TEXT-TRANSFORM: none; + WORD-SPACING: normal +} + +H1, H2, H3, H4, H5, TH, THEAD, TFOOT +{ + COLOR: #003366; +} +H1 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 2em; + font-weight: 700; + font-style: normal; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +H2 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 1.75em; + font-weight: 700; + font-style: normal; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +H3 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 1.58em; + font-weight: 500; + font-style: normal; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +H4 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 1.33em; + font-weight: 500; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +H5, DT { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 1em; + font-weight: 700; + font-style: normal; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +H6 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: .8em; + font-weight: 700; + font-style: normal; + text-decoration: none; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + } + +TFOOT, THEAD { + font-size: 1em; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + font-family: Arial, Helvetica, sans-serif; + } + +TH { + vertical-align: baseline; + font-size: 1em; + font-weight: bold; + word-spacing: normal; + letter-spacing: normal; + text-transform: none; + font-family: Arial, Helvetica, sans-serif; + } + + +A:link { + text-decoration: none; + color: #3333cc; + } + +A:visited { + text-decoration: none; + color: #333399; + } + +A:active { + text-decoration: none; + color: #333399; + } + +A:hover { + text-decoration: underline; + color: #3333cc; + } + +SMALL { + font-size: .7em; + } + +BIG { + font-size: 1.17em; + } + +BLOCKQUOTE, PRE { + font-family: Courier New, monospace; + } + + +UL LI { + list-style-type: square ; + } + +UL LI LI { + list-style-type: disc; + } + +UL LI LI LI { + list-style-type: circle; + } + +OL LI { + list-style-type: decimal; + } + +OL OL LI { + list-style-type: lower-alpha; + } + +OL OL OL LI { + list-style-type: lower-roman; + } + +IMG { + margin-top: 5px; + margin-left: 10px; + margin-right: 10px; + } diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/Web.config b/Inetpub/wwwroot/AspNetDebugDemo_2002/Web.config new file mode 100644 index 0000000..301ff1c --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/Web.config @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AspNetDebugDemo.vbproj b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AspNetDebugDemo.vbproj new file mode 100644 index 0000000..3254769 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AspNetDebugDemo.vbproj @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|30 Apr 2003 18:43:04 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|30 Apr 2003 18:43:04 -0000 +vti_filesize:IR|6643 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AspNetDebugDemo.vbproj.webinfo b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AspNetDebugDemo.vbproj.webinfo new file mode 100644 index 0000000..96d6de4 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AspNetDebugDemo.vbproj.webinfo @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|30 Apr 2003 18:44:54 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|30 Apr 2003 18:44:54 -0000 +vti_filesize:IR|133 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AssemblyInfo.vb b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AssemblyInfo.vb new file mode 100644 index 0000000..bd11e4c --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/AssemblyInfo.vb @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|01 Mar 2003 13:50:04 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|01 Mar 2003 13:50:04 -0000 +vti_filesize:IR|1044 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx new file mode 100644 index 0000000..2b0fb67 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|02 Mar 2003 16:45:40 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|02 Mar 2003 16:45:40 -0000 +vti_filesize:IR|1050 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx.resx b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx.resx new file mode 100644 index 0000000..a3f799d --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx.resx @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|02 Mar 2003 16:45:41 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|02 Mar 2003 16:45:41 -0000 +vti_filesize:IR|5318 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx.vb b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx.vb new file mode 100644 index 0000000..958e85d --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/CustomErrorPage.aspx.vb @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|02 Mar 2003 16:45:41 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|02 Mar 2003 16:45:41 -0000 +vti_filesize:IR|1284 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx new file mode 100644 index 0000000..b86c3d6 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|02 Mar 2003 16:45:41 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|02 Mar 2003 16:45:41 -0000 +vti_filesize:IR|1049 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx.resx b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx.resx new file mode 100644 index 0000000..a3f799d --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx.resx @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|02 Mar 2003 16:45:41 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|02 Mar 2003 16:45:41 -0000 +vti_filesize:IR|5318 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx.vb b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx.vb new file mode 100644 index 0000000..feb4ea0 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/DefaultErrorPage.aspx.vb @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|02 Mar 2003 16:45:41 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|02 Mar 2003 16:45:41 -0000 +vti_filesize:IR|1285 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax new file mode 100644 index 0000000..f1fa572 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|01 Mar 2003 13:50:02 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|01 Mar 2003 13:50:02 -0000 +vti_filesize:IR|80 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax.resx b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax.resx new file mode 100644 index 0000000..be4798a --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax.resx @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|30 Jan 2002 05:05:12 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|30 Jan 2002 05:05:12 -0000 +vti_filesize:IR|1733 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax.vb b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax.vb new file mode 100644 index 0000000..34f5236 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Global.asax.vb @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|03 Mar 2003 12:53:58 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|03 Mar 2003 12:53:58 -0000 +vti_filesize:IR|1873 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx new file mode 100644 index 0000000..9bd2ce6 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|06 Mar 2003 02:21:22 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|06 Mar 2003 02:21:22 -0000 +vti_filesize:IR|2523 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx.resx b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx.resx new file mode 100644 index 0000000..b47580e --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx.resx @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|06 Mar 2003 02:21:22 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|06 Mar 2003 02:21:22 -0000 +vti_filesize:IR|5318 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx.vb b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx.vb new file mode 100644 index 0000000..608ad67 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/MainForm.aspx.vb @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|06 Mar 2003 02:21:22 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|06 Mar 2003 02:21:22 -0000 +vti_filesize:IR|4032 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Styles.css b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Styles.css new file mode 100644 index 0000000..2e4709a --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Styles.css @@ -0,0 +1,8 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|01 Mar 2003 13:50:04 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|01 Mar 2003 13:50:04 -0000 +vti_filesize:IR|2855 +vti_cachedlinkinfo:VX| +vti_cachedsvcrellinks:VX| +vti_backlinkinfo:VX| diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Web.config b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Web.config new file mode 100644 index 0000000..85d89b1 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_cnf/Web.config @@ -0,0 +1,5 @@ +vti_encoding:SR|utf8-nl +vti_timelastmodified:TR|05 Mar 2003 00:13:21 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_cacheddtm:TX|05 Mar 2003 00:13:21 -0000 +vti_filesize:IR|4248 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/access.cnf b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/access.cnf new file mode 100644 index 0000000..7759afe --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/access.cnf @@ -0,0 +1,4 @@ +vti_encoding:SR|utf8-nl +RealmName:CHEETAH +InheritPermissions:true +PasswordDir:c:\\inetpub\\wwwroot\\_vti_pvt diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/deptodoc.btr b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/deptodoc.btr new file mode 100644 index 0000000000000000000000000000000000000000..ea2724c73ea54cde36c8f4a948857adb2797139a GIT binary patch literal 324 vcmb1PWMFUsVjdti6=E0#z!2a8VjUp<4+RWN&|m?E5f_jN!XT;7nhM3)6%tGVGuGgi^NBUtbHF*kWzdDk7u}x3%Z}>Xv@eA7Zod$h=IlI2&f6;mQ;CvzO!{=9m0lz>84Eg0bU{&udlG>2a YKOJi{YU9c@&$^m0^(F--1!O320Q<5Wi2wiq literal 0 HcmV?d00001 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/linkinfo.cnf b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/linkinfo.cnf new file mode 100644 index 0000000..a48f168 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/linkinfo.cnf @@ -0,0 +1 @@ +vti_encoding:SR|utf8-nl diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/service.cnf b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/service.cnf new file mode 100644 index 0000000..227ea97 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/service.cnf @@ -0,0 +1,24 @@ +vti_encoding:SR|utf8-nl +vti_casesensitiveurls:IX|0 +vti_httpdversion:SX|Microsoft-IIS/5.0 +vti_textextensions:SX|.txt.actproj.asm.c.cc.cod.cpp.cs.cxx.dbs.def.dsp.dsw.etp.ext.fky.h.hpp.hxx.i.idl.inc.inl.kci.lgn.lst.mak.map.mk.odh.odl.prc.rc.rc2.rct.rgs.rul.s.sql.srf.tab.tlh.tli.trg.txt.udf.udt.user.usr.vap.vb.vcproj.viw.vspscc.vsscc.vssscc. +vti_featurelist:VX|vti_ACIPAddresses vti_ACCreateNewUsers vti_ACChangePassword vti_ACNoUserGroup vti_ACCreateNewGroups vti_ACModifyGroups vti_ServerEmailTransport +vti_dependenciesood:IR|0 +vti_webservertype:SR|msiis +vti_categories:VR|Travel Expense\\ Report Business Competition Goals/Objectives Ideas Miscellaneous Waiting VIP In\\ Process Planning Schedule +vti_textindexood:IR|0 +vti_htmlextensions:SX|.htm.html.htx.stm.stm.html.htm.shtml.shtm.htt.asp.alx.asa. +vti_approvallevels:VR|Content\\ Review Legal\\ Review Code\\ Review Manager\\ Review +vti_timecreated:TR|01 Mar 2003 13:49:55 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_longfilenames:IX|1 +vti_welcomenames:VX|Default.htm Default.asp iisstart.asp Default.aspx +vti_insecureserverurl:SR|http://CHEETAH +vti_secureserverurl:SR|https://CHEETAH +vti_disableautoimgsizeexts:SX|.asp +vti_oldestcompatibleversion:SR|2.0.0.0 +vti_restartmanual:IX|0 +vti_defaultcharset:SR|windows-1252 +vti_publishmetainfokeys:VR|vti_assignedto vti_approvallevel vti_categories vti_description +vti_hassearchbot:BR|false +vti_autorecalc:IX|1 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/service.lck b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/service.lck new file mode 100644 index 0000000..e69de29 diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/services.cnf b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/services.cnf new file mode 100644 index 0000000..b498fd4 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/services.cnf @@ -0,0 +1 @@ +/ diff --git a/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/writeto.cnf b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/writeto.cnf new file mode 100644 index 0000000..a48f168 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo_2002/_vti_pvt/writeto.cnf @@ -0,0 +1 @@ +vti_encoding:SR|utf8-nl diff --git a/Inetpub/wwwroot/TimeServer/AssemblyInfo.vb b/Inetpub/wwwroot/TimeServer/AssemblyInfo.vb new file mode 100644 index 0000000..a14f4f2 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Inetpub/wwwroot/TimeServer/Global.asax b/Inetpub/wwwroot/TimeServer/Global.asax new file mode 100644 index 0000000..ce277a3 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.vb" Inherits="TimeServer.Global" %> \ No newline at end of file diff --git a/Inetpub/wwwroot/TimeServer/Global.asax.resx b/Inetpub/wwwroot/TimeServer/Global.asax.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/Global.asax.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Inetpub/wwwroot/TimeServer/Global.asax.vb b/Inetpub/wwwroot/TimeServer/Global.asax.vb new file mode 100644 index 0000000..25e6587 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/Global.asax.vb @@ -0,0 +1,59 @@ +Imports System.Web +Imports System.Web.SessionState + +Public Class Global + Inherits System.Web.HttpApplication + +#Region " Component Designer Generated Code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Component Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Component Designer + 'It can be modified using the Component Designer. + 'Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container() + End Sub + +#End Region + + Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the application is started + End Sub + + Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the session is started + End Sub + + Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) + ' Fires at the beginning of each request + End Sub + + Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) + ' Fires upon attempting to authenticate the use + End Sub + + Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when an error occurs + End Sub + + Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the session ends + End Sub + + Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the application ends + End Sub + +End Class diff --git a/Inetpub/wwwroot/TimeServer/SoapMonitor.vb b/Inetpub/wwwroot/TimeServer/SoapMonitor.vb new file mode 100644 index 0000000..d2072be --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/SoapMonitor.vb @@ -0,0 +1,115 @@ +Option Strict On +Imports System.Web.Services.Protocols +Imports System.IO + +Public Class SoapMonitor : Inherits SoapExtension + + Private OldStream As Stream + Private NewStream As Stream + + Public Overloads Overrides Function GetInitializer(ByVal serviceType As System.Type) As Object + End Function + + Public Overloads Overrides Function GetInitializer(ByVal methodInfo As System.Web.Services.Protocols.LogicalMethodInfo, ByVal attribute As System.Web.Services.Protocols.SoapExtensionAttribute) As Object + End Function + + Public Overrides Sub Initialize(ByVal initializer As Object) + End Sub + + Public Overrides Sub ProcessMessage(ByVal Message As System.Web.Services.Protocols.SoapMessage) + 'Called after incoming or outgoing data + 'has been serialized into SOAP message + Dim Logfile As New FileStream("C:\test\test.log", FileMode.Append, FileAccess.Write) + Dim LogfileWriter As New StreamWriter(Logfile) + + Select Case Message.Stage + + Case SoapMessageStage.BeforeDeserialize + 'Write header details + With LogfileWriter + .WriteLine("******************************************************") + .WriteLine("Web service: " & Message.Url) + .WriteLine("Web method: " & Message.Action) + .WriteLine("Called at " & DateTime.Now) + .WriteLine("Message stage: SOAP REQUEST (" & Message.Stage.ToString & ")") + .WriteLine() + .Flush() + End With + 'Write incoming SOAP request message + CopyStream(OldStream, NewStream) + NewStream.Position = 0 + CopyStream(NewStream, Logfile) + NewStream.Position = 0 + 'Blank separating line + LogfileWriter.WriteLine() + + Case SoapMessageStage.AfterSerialize + 'Write header details + With LogfileWriter + .WriteLine("******************************************************") + .WriteLine("Web service: " & Message.Url) + .WriteLine("Web method: " & Message.Action) + .WriteLine("Called at " & DateTime.Now) + .WriteLine("Message stage: SOAP RESPONSE (" & Message.Stage.ToString & ")") + .Write("Exception thrown? ") + If Message.Exception Is Nothing Then + .WriteLine("No") + Else + .WriteLine("Yes") + End If + .WriteLine() + .Flush() + End With + 'Write outgoing SOAP response message + NewStream.Position = 0 + CopyStream(NewStream, Logfile) + NewStream.Position = 0 + CopyStream(NewStream, OldStream) + 'Blank separating line + LogfileWriter.WriteLine() + + End Select + + Logfile.Flush() + Logfile.Close() + + End Sub + + Public Overrides Function ChainStream(ByVal stream As System.IO.Stream) As System.IO.Stream + + OldStream = stream + NewStream = New MemoryStream + Return NewStream + + End Function + + Private Sub CopyStream(ByVal FromStream As Stream, ByVal ToStream As Stream) + Dim FromReader As TextReader = New StreamReader(FromStream) + Dim ToWriter As TextWriter = New StreamWriter(ToStream) + + ToWriter.WriteLine(FromReader.ReadToEnd) + ToWriter.Flush() + + End Sub + +End Class + +Public Class SoapMonitorAttribute : Inherits SoapExtensionAttribute + 'Add this custom attribute to any web method where you want + 'to monitor the SOAP request and response messages + + Public Overrides ReadOnly Property ExtensionType() As System.Type + Get + Return GetType(SoapMonitor) + End Get + End Property + + Public Overrides Property Priority() As Integer + Get + Return 0 + End Get + Set(ByVal Value As Integer) + End Set + End Property + +End Class \ No newline at end of file diff --git a/Inetpub/wwwroot/TimeServer/TimeServer.vbproj b/Inetpub/wwwroot/TimeServer/TimeServer.vbproj new file mode 100644 index 0000000..f683c18 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/TimeServer.vbproj @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Inetpub/wwwroot/TimeServer/TimeServer.vbproj.webinfo b/Inetpub/wwwroot/TimeServer/TimeServer.vbproj.webinfo new file mode 100644 index 0000000..166ec16 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/TimeServer.vbproj.webinfo @@ -0,0 +1,4 @@ + + + + diff --git a/Inetpub/wwwroot/TimeServer/TimeService.asmx b/Inetpub/wwwroot/TimeServer/TimeService.asmx new file mode 100644 index 0000000..52307dc --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/TimeService.asmx @@ -0,0 +1 @@ +<%@ WebService Language="vb" Codebehind="TimeService.asmx.vb" Class="TimeServer.TimeService" %> diff --git a/Inetpub/wwwroot/TimeServer/TimeService.asmx.resx b/Inetpub/wwwroot/TimeServer/TimeService.asmx.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/TimeService.asmx.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Inetpub/wwwroot/TimeServer/TimeService.asmx.vb b/Inetpub/wwwroot/TimeServer/TimeService.asmx.vb new file mode 100644 index 0000000..5d4ff9a --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/TimeService.asmx.vb @@ -0,0 +1,125 @@ +Option Strict On + +Imports System.Xml +Imports System.Web.Services +Imports System.Web.Services.Protocols + + + _ +Public Class TimeService : Inherits System.Web.Services.WebService + +#Region " Web Services Designer Generated Code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Web Services Designer. + InitializeComponent() + + 'Add your own initialization code after the InitializeComponent() call + + End Sub + + 'Required by the Web Services Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Web Services Designer + 'It can be modified using the Web Services Designer. + 'Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container + End Sub + + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + 'CODEGEN: This procedure is required by the Web Services Designer + 'Do not modify it using the code editor. + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + +#End Region + + _ + Public Function CurrentTime() As String + Return System.DateTime.Now.ToLongTimeString + End Function + + _ + Public Sub ThrowExceptionRaw() + 'This method throws a raw exception + Dim Test As Object + Test.ToString() + + End Sub + + _ + Public Sub ThrowExceptionCustom() + 'This method throws a customized exception + Try + Dim Test As Object + Test.ToString() + Catch Exc As Exception + Throw CustomException(Exc) + End Try + + End Sub + + Private Function CustomException(ByVal Exc As Exception) As SoapException + Dim doc As New System.Xml.XmlDocument + + 'Create detail node + Dim DetailNode As System.Xml.XmlNode = _ + doc.CreateNode(XmlNodeType.Element, _ + SoapException.DetailElementName.Name, _ + SoapException.DetailElementName.Namespace) + + 'Add original exception type + Dim ExcType As System.Xml.XmlNode = _ + doc.CreateNode(XmlNodeType.Element, _ + "ExceptionType", _ + SoapException.DetailElementName.Namespace) + If Context.Request.UserHostAddress = "127.0.0.1" Then + ExcType.InnerText = Exc.GetType.ToString + Else + ExcType.InnerText = "SoapException" + End If + + 'Add original exception message + Dim ExcMessage As System.Xml.XmlNode = _ + doc.CreateNode(XmlNodeType.Element, _ + "ExceptionMessage", _ + SoapException.DetailElementName.Namespace) + If Context.Request.UserHostAddress = "127.0.0.1" Then + ExcMessage.InnerText = Exc.Message + Else + ExcMessage.InnerText = "Error - no details available" + End If + + 'Add original exception stack trace + Dim ExcStackTrace As System.Xml.XmlNode = _ + doc.CreateNode(XmlNodeType.Element, _ + "ExceptionTrace", _ + SoapException.DetailElementName.Namespace) + If Context.Request.UserHostAddress = "127.0.0.1" Then + ExcStackTrace.InnerText = Exc.StackTrace + Else + ExcStackTrace.InnerText = "No stack trace available" + End If + + 'Append the extra details to main detail node + DetailNode.AppendChild(ExcType) + DetailNode.AppendChild(ExcMessage) + DetailNode.AppendChild(ExcStackTrace) + + 'Return new custom SoapException + Return New SoapException("", SoapException.ServerFaultCode, _ + Context.Request.Url.AbsoluteUri, DetailNode) + + End Function + +End Class + diff --git a/Inetpub/wwwroot/TimeServer/Web.config b/Inetpub/wwwroot/TimeServer/Web.config new file mode 100644 index 0000000..f68fc1c --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/Web.config @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Inetpub/wwwroot/TimeServer/_vti_pvt/access.cnf b/Inetpub/wwwroot/TimeServer/_vti_pvt/access.cnf new file mode 100644 index 0000000..7759afe --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/_vti_pvt/access.cnf @@ -0,0 +1,4 @@ +vti_encoding:SR|utf8-nl +RealmName:CHEETAH +InheritPermissions:true +PasswordDir:c:\\inetpub\\wwwroot\\_vti_pvt diff --git a/Inetpub/wwwroot/TimeServer/_vti_pvt/deptodoc.btr b/Inetpub/wwwroot/TimeServer/_vti_pvt/deptodoc.btr new file mode 100644 index 0000000000000000000000000000000000000000..f157fe661dc7c027b9a0360508fcf0e7c217a994 GIT binary patch literal 324 xcmb1PWMFUsVjdti6=E0#z!2a8VjUp<4+RWN&|m?E5f_jN!XT-foWwkk3;;#c4xs=5 literal 0 HcmV?d00001 diff --git a/Inetpub/wwwroot/TimeServer/_vti_pvt/doctodep.btr b/Inetpub/wwwroot/TimeServer/_vti_pvt/doctodep.btr new file mode 100644 index 0000000000000000000000000000000000000000..4b85379668e9a1f2fa1b5208103367d12c5cdbb7 GIT binary patch literal 324 wcmb1PWMFUsVjdti6-q5;7zGSGz%bAO;{Q;I=$nIH_3f{HQ#06;(u(f|Me literal 0 HcmV?d00001 diff --git a/Inetpub/wwwroot/TimeServer/_vti_pvt/service.cnf b/Inetpub/wwwroot/TimeServer/_vti_pvt/service.cnf new file mode 100644 index 0000000..c839f1b --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/_vti_pvt/service.cnf @@ -0,0 +1,20 @@ +vti_encoding:SR|utf8-nl +vti_casesensitiveurls:IX|0 +vti_httpdversion:SX|Microsoft-IIS/5.0 +vti_textextensions:SX|.txt.actproj.asm.c.cc.cod.cpp.cs.cxx.dbs.def.dsp.dsw.etp.ext.fky.h.hpp.hxx.i.idl.inc.inl.kci.lgn.lst.mak.map.mk.odh.odl.prc.rc.rc2.rct.rgs.rul.s.sql.srf.tab.tlh.tli.trg.txt.udf.udt.user.usr.vap.vb.vcproj.viw.vspscc.vsscc.vssscc. +vti_featurelist:VX|vti_ACIPAddresses vti_ACCreateNewUsers vti_ACChangePassword vti_ACNoUserGroup vti_ACCreateNewGroups vti_ACModifyGroups vti_ServiceMarkUrlDirExec vti_ServerEmailTransport +vti_dependenciesood:IR|0 +vti_webservertype:SR|msiis +vti_publishmetainfokeys:VR|vti_assignedto vti_approvallevel vti_categories vti_description +vti_categories:VR|Travel Expense\\ Report Business Competition Goals/Objectives Ideas Miscellaneous Waiting VIP In\\ Process Planning Schedule +vti_htmlextensions:SX|.htm.html.htx.stm.stm.html.htm.shtml.shtm.htt.asp.alx.asa. +vti_approvallevels:VR|Content\\ Review Legal\\ Review Code\\ Review Manager\\ Review +vti_timecreated:TR|30 Oct 2002 21:11:23 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_longfilenames:IX|1 +vti_welcomenames:VX|Default.htm Default.asp iisstart.asp Default.aspx +vti_insecureserverurl:SR|http://localhost +vti_secureserverurl:SR|https://localhost +vti_disableautoimgsizeexts:SX|.asp +vti_oldestcompatibleversion:SR|2.0.0.0 +vti_restartmanual:IX|0 diff --git a/Inetpub/wwwroot/TimeServer/_vti_pvt/service.lck b/Inetpub/wwwroot/TimeServer/_vti_pvt/service.lck new file mode 100644 index 0000000..e69de29 diff --git a/Inetpub/wwwroot/TimeServer/_vti_pvt/services.cnf b/Inetpub/wwwroot/TimeServer/_vti_pvt/services.cnf new file mode 100644 index 0000000..b498fd4 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer/_vti_pvt/services.cnf @@ -0,0 +1 @@ +/ diff --git a/Inetpub/wwwroot/TimeServer/bin/TimeServer.dll b/Inetpub/wwwroot/TimeServer/bin/TimeServer.dll new file mode 100644 index 0000000000000000000000000000000000000000..4e14a4b3b38e99b0f855a0de9c293ca0a65b3ed2 GIT binary patch literal 11776 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 O#anL0)ee6_9{6vof|0ub literal 0 HcmV?d00001 diff --git a/Inetpub/wwwroot/TimeServer/bin/TimeServer.pdb b/Inetpub/wwwroot/TimeServer/bin/TimeServer.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a413a5f6b7d529e10ae670b4ac4e8505c4d76bcb GIT binary patch literal 36352 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 Ddg + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Inetpub/wwwroot/TimeServer_2002/Global.asax b/Inetpub/wwwroot/TimeServer_2002/Global.asax new file mode 100644 index 0000000..ce277a3 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.vb" Inherits="TimeServer.Global" %> \ No newline at end of file diff --git a/Inetpub/wwwroot/TimeServer_2002/Global.asax.resx b/Inetpub/wwwroot/TimeServer_2002/Global.asax.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/Global.asax.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Inetpub/wwwroot/TimeServer_2002/Global.asax.vb b/Inetpub/wwwroot/TimeServer_2002/Global.asax.vb new file mode 100644 index 0000000..25e6587 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/Global.asax.vb @@ -0,0 +1,59 @@ +Imports System.Web +Imports System.Web.SessionState + +Public Class Global + Inherits System.Web.HttpApplication + +#Region " Component Designer Generated Code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Component Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Component Designer + 'It can be modified using the Component Designer. + 'Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container() + End Sub + +#End Region + + Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the application is started + End Sub + + Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the session is started + End Sub + + Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) + ' Fires at the beginning of each request + End Sub + + Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) + ' Fires upon attempting to authenticate the use + End Sub + + Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when an error occurs + End Sub + + Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the session ends + End Sub + + Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) + ' Fires when the application ends + End Sub + +End Class diff --git a/Inetpub/wwwroot/TimeServer_2002/SoapMonitor.vb b/Inetpub/wwwroot/TimeServer_2002/SoapMonitor.vb new file mode 100644 index 0000000..d2072be --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/SoapMonitor.vb @@ -0,0 +1,115 @@ +Option Strict On +Imports System.Web.Services.Protocols +Imports System.IO + +Public Class SoapMonitor : Inherits SoapExtension + + Private OldStream As Stream + Private NewStream As Stream + + Public Overloads Overrides Function GetInitializer(ByVal serviceType As System.Type) As Object + End Function + + Public Overloads Overrides Function GetInitializer(ByVal methodInfo As System.Web.Services.Protocols.LogicalMethodInfo, ByVal attribute As System.Web.Services.Protocols.SoapExtensionAttribute) As Object + End Function + + Public Overrides Sub Initialize(ByVal initializer As Object) + End Sub + + Public Overrides Sub ProcessMessage(ByVal Message As System.Web.Services.Protocols.SoapMessage) + 'Called after incoming or outgoing data + 'has been serialized into SOAP message + Dim Logfile As New FileStream("C:\test\test.log", FileMode.Append, FileAccess.Write) + Dim LogfileWriter As New StreamWriter(Logfile) + + Select Case Message.Stage + + Case SoapMessageStage.BeforeDeserialize + 'Write header details + With LogfileWriter + .WriteLine("******************************************************") + .WriteLine("Web service: " & Message.Url) + .WriteLine("Web method: " & Message.Action) + .WriteLine("Called at " & DateTime.Now) + .WriteLine("Message stage: SOAP REQUEST (" & Message.Stage.ToString & ")") + .WriteLine() + .Flush() + End With + 'Write incoming SOAP request message + CopyStream(OldStream, NewStream) + NewStream.Position = 0 + CopyStream(NewStream, Logfile) + NewStream.Position = 0 + 'Blank separating line + LogfileWriter.WriteLine() + + Case SoapMessageStage.AfterSerialize + 'Write header details + With LogfileWriter + .WriteLine("******************************************************") + .WriteLine("Web service: " & Message.Url) + .WriteLine("Web method: " & Message.Action) + .WriteLine("Called at " & DateTime.Now) + .WriteLine("Message stage: SOAP RESPONSE (" & Message.Stage.ToString & ")") + .Write("Exception thrown? ") + If Message.Exception Is Nothing Then + .WriteLine("No") + Else + .WriteLine("Yes") + End If + .WriteLine() + .Flush() + End With + 'Write outgoing SOAP response message + NewStream.Position = 0 + CopyStream(NewStream, Logfile) + NewStream.Position = 0 + CopyStream(NewStream, OldStream) + 'Blank separating line + LogfileWriter.WriteLine() + + End Select + + Logfile.Flush() + Logfile.Close() + + End Sub + + Public Overrides Function ChainStream(ByVal stream As System.IO.Stream) As System.IO.Stream + + OldStream = stream + NewStream = New MemoryStream + Return NewStream + + End Function + + Private Sub CopyStream(ByVal FromStream As Stream, ByVal ToStream As Stream) + Dim FromReader As TextReader = New StreamReader(FromStream) + Dim ToWriter As TextWriter = New StreamWriter(ToStream) + + ToWriter.WriteLine(FromReader.ReadToEnd) + ToWriter.Flush() + + End Sub + +End Class + +Public Class SoapMonitorAttribute : Inherits SoapExtensionAttribute + 'Add this custom attribute to any web method where you want + 'to monitor the SOAP request and response messages + + Public Overrides ReadOnly Property ExtensionType() As System.Type + Get + Return GetType(SoapMonitor) + End Get + End Property + + Public Overrides Property Priority() As Integer + Get + Return 0 + End Get + Set(ByVal Value As Integer) + End Set + End Property + +End Class \ No newline at end of file diff --git a/Inetpub/wwwroot/TimeServer_2002/TimeServer.vbproj b/Inetpub/wwwroot/TimeServer_2002/TimeServer.vbproj new file mode 100644 index 0000000..bbd96cb --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/TimeServer.vbproj @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Inetpub/wwwroot/TimeServer_2002/TimeServer.vbproj.webinfo b/Inetpub/wwwroot/TimeServer_2002/TimeServer.vbproj.webinfo new file mode 100644 index 0000000..7812035 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/TimeServer.vbproj.webinfo @@ -0,0 +1,4 @@ + + + + diff --git a/Inetpub/wwwroot/TimeServer_2002/TimeService.asmx b/Inetpub/wwwroot/TimeServer_2002/TimeService.asmx new file mode 100644 index 0000000..52307dc --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/TimeService.asmx @@ -0,0 +1 @@ +<%@ WebService Language="vb" Codebehind="TimeService.asmx.vb" Class="TimeServer.TimeService" %> diff --git a/Inetpub/wwwroot/TimeServer_2002/TimeService.asmx.resx b/Inetpub/wwwroot/TimeServer_2002/TimeService.asmx.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/TimeService.asmx.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Inetpub/wwwroot/TimeServer_2002/TimeService.asmx.vb b/Inetpub/wwwroot/TimeServer_2002/TimeService.asmx.vb new file mode 100644 index 0000000..5d4ff9a --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/TimeService.asmx.vb @@ -0,0 +1,125 @@ +Option Strict On + +Imports System.Xml +Imports System.Web.Services +Imports System.Web.Services.Protocols + + + _ +Public Class TimeService : Inherits System.Web.Services.WebService + +#Region " Web Services Designer Generated Code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Web Services Designer. + InitializeComponent() + + 'Add your own initialization code after the InitializeComponent() call + + End Sub + + 'Required by the Web Services Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Web Services Designer + 'It can be modified using the Web Services Designer. + 'Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container + End Sub + + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + 'CODEGEN: This procedure is required by the Web Services Designer + 'Do not modify it using the code editor. + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + +#End Region + + _ + Public Function CurrentTime() As String + Return System.DateTime.Now.ToLongTimeString + End Function + + _ + Public Sub ThrowExceptionRaw() + 'This method throws a raw exception + Dim Test As Object + Test.ToString() + + End Sub + + _ + Public Sub ThrowExceptionCustom() + 'This method throws a customized exception + Try + Dim Test As Object + Test.ToString() + Catch Exc As Exception + Throw CustomException(Exc) + End Try + + End Sub + + Private Function CustomException(ByVal Exc As Exception) As SoapException + Dim doc As New System.Xml.XmlDocument + + 'Create detail node + Dim DetailNode As System.Xml.XmlNode = _ + doc.CreateNode(XmlNodeType.Element, _ + SoapException.DetailElementName.Name, _ + SoapException.DetailElementName.Namespace) + + 'Add original exception type + Dim ExcType As System.Xml.XmlNode = _ + doc.CreateNode(XmlNodeType.Element, _ + "ExceptionType", _ + SoapException.DetailElementName.Namespace) + If Context.Request.UserHostAddress = "127.0.0.1" Then + ExcType.InnerText = Exc.GetType.ToString + Else + ExcType.InnerText = "SoapException" + End If + + 'Add original exception message + Dim ExcMessage As System.Xml.XmlNode = _ + doc.CreateNode(XmlNodeType.Element, _ + "ExceptionMessage", _ + SoapException.DetailElementName.Namespace) + If Context.Request.UserHostAddress = "127.0.0.1" Then + ExcMessage.InnerText = Exc.Message + Else + ExcMessage.InnerText = "Error - no details available" + End If + + 'Add original exception stack trace + Dim ExcStackTrace As System.Xml.XmlNode = _ + doc.CreateNode(XmlNodeType.Element, _ + "ExceptionTrace", _ + SoapException.DetailElementName.Namespace) + If Context.Request.UserHostAddress = "127.0.0.1" Then + ExcStackTrace.InnerText = Exc.StackTrace + Else + ExcStackTrace.InnerText = "No stack trace available" + End If + + 'Append the extra details to main detail node + DetailNode.AppendChild(ExcType) + DetailNode.AppendChild(ExcMessage) + DetailNode.AppendChild(ExcStackTrace) + + 'Return new custom SoapException + Return New SoapException("", SoapException.ServerFaultCode, _ + Context.Request.Url.AbsoluteUri, DetailNode) + + End Function + +End Class + diff --git a/Inetpub/wwwroot/TimeServer_2002/Web.config b/Inetpub/wwwroot/TimeServer_2002/Web.config new file mode 100644 index 0000000..f68fc1c --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/Web.config @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/access.cnf b/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/access.cnf new file mode 100644 index 0000000..7759afe --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/access.cnf @@ -0,0 +1,4 @@ +vti_encoding:SR|utf8-nl +RealmName:CHEETAH +InheritPermissions:true +PasswordDir:c:\\inetpub\\wwwroot\\_vti_pvt diff --git a/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/deptodoc.btr b/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/deptodoc.btr new file mode 100644 index 0000000000000000000000000000000000000000..f157fe661dc7c027b9a0360508fcf0e7c217a994 GIT binary patch literal 324 xcmb1PWMFUsVjdti6=E0#z!2a8VjUp<4+RWN&|m?E5f_jN!XT-foWwkk3;;#c4xs=5 literal 0 HcmV?d00001 diff --git a/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/doctodep.btr b/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/doctodep.btr new file mode 100644 index 0000000000000000000000000000000000000000..4b85379668e9a1f2fa1b5208103367d12c5cdbb7 GIT binary patch literal 324 wcmb1PWMFUsVjdti6-q5;7zGSGz%bAO;{Q;I=$nIH_3f{HQ#06;(u(f|Me literal 0 HcmV?d00001 diff --git a/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/service.cnf b/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/service.cnf new file mode 100644 index 0000000..c839f1b --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/service.cnf @@ -0,0 +1,20 @@ +vti_encoding:SR|utf8-nl +vti_casesensitiveurls:IX|0 +vti_httpdversion:SX|Microsoft-IIS/5.0 +vti_textextensions:SX|.txt.actproj.asm.c.cc.cod.cpp.cs.cxx.dbs.def.dsp.dsw.etp.ext.fky.h.hpp.hxx.i.idl.inc.inl.kci.lgn.lst.mak.map.mk.odh.odl.prc.rc.rc2.rct.rgs.rul.s.sql.srf.tab.tlh.tli.trg.txt.udf.udt.user.usr.vap.vb.vcproj.viw.vspscc.vsscc.vssscc. +vti_featurelist:VX|vti_ACIPAddresses vti_ACCreateNewUsers vti_ACChangePassword vti_ACNoUserGroup vti_ACCreateNewGroups vti_ACModifyGroups vti_ServiceMarkUrlDirExec vti_ServerEmailTransport +vti_dependenciesood:IR|0 +vti_webservertype:SR|msiis +vti_publishmetainfokeys:VR|vti_assignedto vti_approvallevel vti_categories vti_description +vti_categories:VR|Travel Expense\\ Report Business Competition Goals/Objectives Ideas Miscellaneous Waiting VIP In\\ Process Planning Schedule +vti_htmlextensions:SX|.htm.html.htx.stm.stm.html.htm.shtml.shtm.htt.asp.alx.asa. +vti_approvallevels:VR|Content\\ Review Legal\\ Review Code\\ Review Manager\\ Review +vti_timecreated:TR|30 Oct 2002 21:11:23 -0000 +vti_extenderversion:SR|4.0.2.5526 +vti_longfilenames:IX|1 +vti_welcomenames:VX|Default.htm Default.asp iisstart.asp Default.aspx +vti_insecureserverurl:SR|http://localhost +vti_secureserverurl:SR|https://localhost +vti_disableautoimgsizeexts:SX|.asp +vti_oldestcompatibleversion:SR|2.0.0.0 +vti_restartmanual:IX|0 diff --git a/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/service.lck b/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/service.lck new file mode 100644 index 0000000..e69de29 diff --git a/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/services.cnf b/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/services.cnf new file mode 100644 index 0000000..b498fd4 --- /dev/null +++ b/Inetpub/wwwroot/TimeServer_2002/_vti_pvt/services.cnf @@ -0,0 +1 @@ +/ diff --git a/Inetpub/wwwroot/TimeServer_2002/bin/TimeServer.dll b/Inetpub/wwwroot/TimeServer_2002/bin/TimeServer.dll new file mode 100644 index 0000000000000000000000000000000000000000..ef2b653cc7c2f200d83c206c35db67fcecc6fa1b GIT binary patch literal 11776 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 F{tJ<;nyCN) literal 0 HcmV?d00001 diff --git a/Inetpub/wwwroot/TimeServer_2002/bin/TimeServer.pdb b/Inetpub/wwwroot/TimeServer_2002/bin/TimeServer.pdb new file mode 100644 index 0000000000000000000000000000000000000000..8a3078212b7aea4c6f8495ee01679ae1b95b873d GIT binary patch literal 36352 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 + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.sln b/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.sln new file mode 100644 index 0000000..050d62b --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-1", "Listing2-1.vbproj", "{31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Debug.ActiveCfg = Debug|.NET + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Debug.Build.0 = Debug|.NET + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Release.ActiveCfg = Release|.NET + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.suo b/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.suo new file mode 100644 index 0000000000000000000000000000000000000000..b46947f09a8d542a13427a6af82cad4f79bf6af2 GIT binary patch literal 6656 zcmeHLL2MgU5FIBeO+u5>LQ5%7meQ1hh?SJIX&b1LtWyZYX-U#1f?S+<<2ZG^mc2=+ z+8&TNapHu^2{<4j5C?8tCQznm~O;&WDNCO(|uNI3%S15w!HvNY@@F#3- z^7fE>y#w3~-U)62-wSR9bC1c}^#Ag}nArF^V#ttWam~vW>~?tCkBHG8*|pAN{XhQE zal7rSNF&EFs6Z2vkb+#65lQ3f$VL2HutLiV?y$iBBhnDrjk}Cj+7UR=cY`rb8ipo% zAR{yQe_h6v_GMTzi`M#NKtJ{F!O*b!iJ9+uQxD4}=!{EDE@0KRqmFD-Ea4c3>4wxL2dMLRsdqErvRV5} z_!EPb1z3=R4YW5L5)yxi7dk`(%&ZXeY-<6v&cJ6W{HS#j9&_Nod1Z|r6?`TB5|4;s zv>|w8=??LdSVi*dC+b?T;WGBkR{P<=E5URO`nd-iSwCwm6~egs^$#HjF?tv^X;_f0 zsa@nK^iwzU8LzmkOU#uz|M~TwQ)^CEL~^YOp?_`dVf9n@J6_=W^~bUHMXZ~3$fReB zEzE+|=^5x}?qXgFtDp74gf|`i?Vispc0D6pe@4Zgn~xXJp2Y}L?FC1&N-9}%rjGTq zR$vU0VwiUp@xSQJT)yTDxW^M&D-ycA{U;8GUH@K;ea#0P^kEk4;+VVk6m}s2%ZxIw zOrus|ZNyro0G@+&25J~qZ%fL924crSI|-SMdr=uhZ8-syyM*U@aplvFLcKTtA&tb8 z3|2A+-P5p?2tB>l7x{PXaIMo>04~`e5&QhK8JT~syV)leDmozFHd&1b<6`j`j`Yae z`h>_Aw?AC@8vUteS9UaVRh~uKJca)g2-t4vK^h&B)8Lb6_25u-gF8_|n+V+#Xq`lV z0KGxUkyn=zO!&&< z>beFkS7DopLZMr&s~4?K^m~<*g#uSa*(v-?tiBVyF07>sz0>MG`#or1hfm4tQZ4+^ z?_x15(*akbDDX#rCkTr_2QZP&KdhKCaH_^Q7iZ_-#*}h3HM@DRnsyQ3zsi5qO{zYs zQu+|OuX+dMJhpiOm`1D%!uZOkD|?6P(EkLc81|+yv3kA%7ZiqC$aEXC0`I@-n+@N^ z!mhu({@Q^rcz14o`g7%~M85l^XKyvRe;jjJ96Oa!`$XhVD0E-K;n5jXTRdY_#sC_uPZ%>6AVX)@ zD015%q;Bmzh%rg%F8TerEw`jpxrMiaRmuRslxKPw_M5PpZ*KHHGeK$2KJ>y6k8%6x z_)jKktg3W=nW%gNd&Lmx-z2=3 zzKU1Ay(v3rOAVU3MW579?i-~0{idE-^ciIxoI}*G@^;_;c#@f-Y7@V|5qDTqhQ*&F z7(41sdl6M9wI&d+7FgTkp37359c0DfI_mFo{L|kVbySQasnZ8MN6bp=SwQ^dx-|va VSuQ8e==@hMueYsr^SaSF{sII{sHp$| literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.vbproj new file mode 100644 index 0000000..a0dd709 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.vbproj.user new file mode 100644 index 0000000..447fdc6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-1/Listing2-1.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-1/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-1/Test.vb new file mode 100644 index 0000000..4482e2a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-1/Test.vb @@ -0,0 +1,10 @@ +Option Strict On +Module Test + + Sub Main() + Console.WriteLine("CInt(True) = " + CInt(True).ToString) + Console.WriteLine("Convert(True) = " + Convert.ToInt16(True).ToString) + Console.ReadLine() + End Sub + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter02/Listing2-10/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-10/AssemblyInfo.vb new file mode 100644 index 0000000..e112cff --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-10/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.sln b/Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.sln new file mode 100644 index 0000000..001af0f --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-10", "Listing2-10.vbproj", "{EF22FDFF-8665-44CF-BADC-362A5663C0C1}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Debug.ActiveCfg = Debug|.NET + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Debug.Build.0 = Debug|.NET + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Release.ActiveCfg = Release|.NET + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.suo b/Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.suo new file mode 100644 index 0000000000000000000000000000000000000000..60f75816ed7fcdd6235cac11f1f52edbb39a1968 GIT binary patch literal 7168 zcmeHMO-x)>6g~sg0+!a+w$^I#iBxH|guhw}l?2{^R+)l8168OE=-I+3wPGU*2Kg_6Vq;tF)>D0E^Al1k@5TPdyg50_l5_I8Vz@H-n;MK zbMHC#+;hKkF5J4g`{#E*Irxhdl^&^-rCg2NRnYE3outY=A{D6cdnuR8nT;Z-Zk7L# z1^$GtRn{JIueX7!LEAw!pu0h}pdBFYGij^*e=IN}27X!5q+gPFr{w~6+I!g#kFl*$ zh!svVywOwt){WXPeU<3^f=-1pCLzhlIT@5V-dQ<|XB1l4?HQBJ_1P#DKH?Dlm3p`` z7Io0aSx!R|Es&5&JkQIhl0FY@!lq7W=B#QOM`{<@xj~zYwokr~SAm_W9;M+I3<8w~9DG8FiqYAoe2!Ec4xq z`d-jJ(0MtW9_tJRI!l#z@k&1ve!Lk1wEgL5 zGMWx0Soc_b9{JqZIKB_0OP2(3k`0-|xg~Z4(KZcqO99o0Xf4u)HXG;SK-(Bvj!7$e zf^O5V*}hr*^Z4V3mKoq)44P42Z%9b|DfG%U6$S&(vdu@SldxF~KS~{k#j>#9w9>}r za(@$liAS~$?wt7^;w7<)rC2^uHwqojVc!f`gE6sG3~GXW?g8X+C zKVlHQhh7th2Fa4riIt}P8PB}RXRNg2U$OiFwdTkQPqtKbd_n%Q?Y+vU?6)n)EtVg^ z+GnwD<{{&jE`~4)I+rJ`^)oJcmCsl`W=%(Xo98o$T~7$tpHRMM#^V{(!{E@>UXXL8 zM|43xV}^h2P=oJeQIDX_KwmR_y&v`tf-5X1 z@aE{O!n{}hA&JD41XeNy*+FPZgbpr$i~PHKnA&YT1~7jsE}Lm9p6l=Y-X;n@BTB{r z`KBsbiIgIjYpRgSQ(sw^1d-2weQ)6^z9*{LRv~+R7vWR`2%v3v`auH-rJeF5e#cSk zz)x3gebS459c}ICYs1%Z#nq0s7Er5PmP;;Sxmo5BoKni!XTTL!L7r}(5AqCE#X&xy zjsuVF${|12TjSo&ly2>)bHjS+dz$zXAD=VCdsMbG(k#^9Gzz z7#c;STb~xV{|e&??_yrpUzmU4{Fx^Z;~B?zFJt-k!;U?-uYdfL`Q`qk>;QHuq4tT$ zA5!Q(hht+$P?4upek9TjR~0yY`HpTg;>?1IIC;54DtjuF%82i*n;G57TdnS$<*P%6U zZnQqL;{2T5`0`Six9mJK`s4N6I|8pCUc6CpW#1p_Xx;kk&cv$?*ZM!|`Yycq`}spE z%nse7lbloAot(L-j9?re< zxHfdX=-k!Lu13cxJK@xfJ`sSZnIiw-JjV$Pe-pI2*k_b^a0*_-%-g*E@gy@~l`j1I z8*zs@rC0oE0`IUj?OB9KO64M=AX^{vT)Jibd7T + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-10/Listing2-10.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-10/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-10/Test.vb new file mode 100644 index 0000000..f8167fa --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-10/Test.vb @@ -0,0 +1,75 @@ +Option Strict On + +Module CatTester + + Sub Main() + + 'NormalCat + Dim objNormalCat As New Cat() + With objNormalCat + Console.WriteLine("NormalCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'LameCat + Dim objLameCat As New LameCat() + With objLameCat + Console.WriteLine("LameCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine("Equal of a cat? " + .Equals(New Cat()).ToString) + Console.WriteLine() + End With + + 'UglyCat + Dim objUglyCat As New Cat() + objUglyCat = New LameCat() + With objUglyCat + Console.WriteLine("UglyCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine("Equal of a cat? " + .Equals(New Cat()).ToString) + Console.WriteLine() + End With + + Console.ReadLine() + End Sub + +End Module + +Class Cat + + Overridable Function Feet() As Int16 + Return 4 + End Function + + Overridable Function Legs() As Int16 + Return Me.Feet + End Function + +End Class + +Class LameCat : Inherits Cat + + Overrides Function Feet() As Int16 + Return 3 + End Function + + Overrides Function Legs() As Int16 + Return Me.Feet + End Function + + 'This overload doesn't work for a subtle reason + ' Overloads Function Equals(ByVal AnyCat As Cat) As Boolean + ' Return True + ' End Function + + 'This overload works + Overloads Overrides Function Equals(ByVal Obj As Object) As Boolean + If Object.ReferenceEquals(Obj.GetType, New Cat().GetType) Then + Return True + Else + Return MyBase.Equals(Obj) + End If + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter02/Listing2-11/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-11/AssemblyInfo.vb new file mode 100644 index 0000000..6b2d11e --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-11/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.sln b/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.sln new file mode 100644 index 0000000..8172cdc --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-11", "Listing2-11.vbproj", "{0A591B27-8004-4912-A3B5-30B98AB99CBD}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Debug.ActiveCfg = Debug|.NET + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Debug.Build.0 = Debug|.NET + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Release.ActiveCfg = Release|.NET + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.suo b/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.suo new file mode 100644 index 0000000000000000000000000000000000000000..eaf6a2bac7beb2c889f37ab1d5916aaa13161e26 GIT binary patch literal 7168 zcmeHMO-x)>6h1?#1uWFow$^Iv6RASAgujNr+Q`gMTZMu^1;+>X@*lF*yA0A_`27RRz zJyZADA2(~h@NJ_I9SSriVadpO8IU;MSviNN4lC^Tj49^&Y>*1yF7(o0X@{$zqk}$9 zIs;8yfrL!rc|k^%_IX$nL1}H$pr3koL)5E&V&>b{&}ZaD=p2-w3}e=Yq?Gwct9dA0c2_?tYZ_g7<;< zgC79fV;n^JA@IZCL*T>UN5C5RQE)w&vJH420Y46Y0^A5@`%&x7@)m9G3j7-24wp~# zja`BC#Y{Gw&_?u>kyO5>Mw$ZE3$IJd-(5Zb1JZYiJ|5v@hq&}QRY9B3Ou%Q0!iU&w9v zHQP68e;$8=urdSOi@`G5>kSEsKg0{$E7vp_0zAjI9JNkj&0_eY)^V&@7V9^ytg)rs z-^5?y5iyK5xJ%}Hh?m4Fl2boXSBDMfv2O-egE6sG3~Gda?!kKI&m8M4m4lr6`w@fa zJ@lG5EJ&8rPOLQJ5968F`7>79@z1IMl$vvNg(uTaH-i4(oDpxzA$W z%tOX4TMS_oEKW~BKVui;l2`rA7sjmNxZdXZOk&p)!ucnZ@0sy<2IUAO0%|WPxzZzg z%9uZM1^OTc$asUU{FbOts%$$1+yAXzD zTEVJ>kgG5^Vy=<_Pr*73ISjM6Ikkcsd?$-?6m16jn&IpHSnm*|BGQRBzs@Smd-WgE zNK8p!CR5NIf~7?0&~jbm-?hWEuKXB4>~qpa+MHwko%QXa;4`Xp9FVUn^=)wFT&@wv z`oy=(xyk3hyt{A}^@%FBRmfi7B?QzyIWFA@pMC_=PK44fw6#bFN*$`5;k8fN(SIDJ zcJ%qt-i0>4yW#A99Kb7b*(EGD%RGWpN;&%sq#`QF)9v#?o}tPal@`Mjw za?EirW5i3aJOH~|VPODsXn~!4v(-!uf~u_xRtGSHW2kZ7EvRwkt*Xx1Ucm~swwcfN z4$oUw3V-aoSP&D;f{Rfz@Q1s^>zr5oIRIG=Ok&2Az;fCcXX5M>mM*3inVQWwXv#aE zz<+iBqHdD2zgYc2G`?&dkRfdF3^0vY=Z5jc#<1HCm!bbLe0~TU4Al|o z)@KFozv?#|-o?DmzcBy8`7=)-zPED%TK4q^9eeKF_~=KLOA%w)Aa*LD_KC-``0d=pvx?ZP1yX86m* z>Khn+^7ZtW&-FDe&OHC#cUNB-S^DICA5TMZ`7ZQaFW%LSuDisy)mjMEB28|ct?2A6 zK4=@dUMk+z&aMVLR_p76$1^lVfv{%&{C)8;I`R3N;IilijrZS;2F8N_E3DIsiCgrk zEh={fY>ehTC)p?+orr_?xiQuRTyjCCB607y7~6@MPBMJ Dhg!GN literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.vbproj new file mode 100644 index 0000000..814b122 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-11/Listing2-11.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-11/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-11/Test.vb new file mode 100644 index 0000000..59ebfd6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-11/Test.vb @@ -0,0 +1,46 @@ +Option Strict On + +Class Animal + + Public Shared Sub Main() + + Dim objMan As New Man() + Dim objFeline As New Feline(), objCat As New Cat() + + Console.WriteLine(objMan.ClassName("This Man")) + Console.WriteLine(objFeline.ClassName("This Feline")) + Console.WriteLine(objCat.ClassName("This Cat")) + + Console.ReadLine() + + End Sub + + Protected Overridable Function ClassName(ByVal CallingType As String) As String + Return CallingType + " appears to be an Animal" + End Function + +End Class + +Class Man : Inherits Animal + + Protected Overrides Function ClassName(ByVal CallingType As String) As String + Return CallingType + " appears to be a Man" + End Function + +End Class + +Class Feline : Inherits Animal + + Protected Overridable Shadows Function ClassName(ByVal CallingType As String) As String + Return CallingType + " appears to be a Feline" + End Function + +End Class + +Class Cat : Inherits Feline + + Protected Overrides Function ClassName(ByVal CallingType As String) As String + Return CallingType + " appears to be a Cat" + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter02/Listing2-12/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-12/AssemblyInfo.vb new file mode 100644 index 0000000..0b31830 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-12/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.sln b/Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.sln new file mode 100644 index 0000000..0e6cd83 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-12", "Listing2-12.vbproj", "{F7816CB3-4B61-46D1-9241-1846A926DF73}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Debug.ActiveCfg = Debug|.NET + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Debug.Build.0 = Debug|.NET + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Release.ActiveCfg = Release|.NET + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.suo b/Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.suo new file mode 100644 index 0000000000000000000000000000000000000000..b780328e3c39be1ba8109aea1e970fe18f125084 GIT binary patch literal 7168 zcmeHMO-x)>6g~sg0v2j(TWhuTiBzFl!e9BVO<;y~R(6AY19>dUK-ehKgHfKqaA!@dCS7S_+Kn+LYINnYcBLD^@4N3^W*FwpJOMQt4mt1Mckg-k zoO|xM-??|Vb#vEG?|gjVXUU@zQZ7r&RdQEOyAO4;qI*QjP~rR1^769XD1z!1{f9j8 z2W+iy){twx4O|J{4z2?409S+W26LUsTlD|&z=&A*%ZMQZl0cb~^H^!`v=0%Zy}>vt zMz4<^d-IFx8@_T1F`z(W5|Xr>l|hN2%*Yu$O<1AZ)3%uFvtG)4JJHK{r5&z56~3}e=oB$fUQR-s?L zFFO8kv*ZX+n0ht2$>p}^;x+5UajuEp-^2l3CkE*KPb{bb*E;=30V{I%qP_>b7rYOA zA6SoZ0QCpJ4}uSZ4}l*78{mh*bzsWYqdW|L6#N*t0nGLzPRaTfZLSA?^>c;SPmGP7 z{?z$&CKNYD%%qjds4ZI&2xUSXwt6BsXpDwu%sKU16NrW4R@4}X#4=Wj0#)PYlyTBZ z&8hFI{nlL4N|*_In40leB4RD3vjP=Qj|B($U9CSJOHNs#RKysGC8BKF{*;+8Q=vHP z9?9oX&P|Np_k;b?Ba_(4mds<{5<4c*HUo4^0@a9U&C-fCjdL-eZ4@m>rA4*7jbEyL zqxNU9$*X>z7sj07=x=*}Ca~&p;r!z&_UwE-i+UImezg{qTpbZT zj{m8f!(yjQF2(M$Vn{F#5P7i$y}Sqn|kJRsU|t4&?y{eV72-IA+g1 zid6`~G9$+;lQ^sJY{aul8axf_44h$jdYe}sG!Q!()FWuK(AR`mAAr9nAr+QRl>9n_ zQsm`-NFy;Nj+snD_arPOLQk%||J!!h*3lp9BVu1ZZKN%KtiSVpn<)5{Ids|vFm zp}f4@P$uQae;`sR`s|l?7q8-dqLOW8vd4D;LD?x?NS_@D+J0$6Ds4yEffm*}0PU=G zBfYk(S_`Dv-ly8w&k@?>l3a92%T2O?%^S0{PG z2QNAHxEC?v1z6|D(V#_+q3lHMs4CgYqd^O-WLp>h{A!NPc<%%IF$?zdy&d&S@KZ~x z{cLM@+*Z0MhCli)7Qh5E;6l^{{NV|b*Ez5Fvmdesn8XuP9PZQ@XXETNTo+YNre-@2 z+Vc5N;J?yK-K6~fLhtvZ@kM8Y3}Jz1foa4#H;gYdhHg8w4*Y)vADcdV1V3ia8*o}- zsEJJX*Q~((SN&$gyO`Jc=bpc?|Lh%z@41HhHt_Wa?YnPZ|L8~CO7|yoSr97~SL;ON z4=Hq?$F|WKROCr@zZB_3s0xC9^R{ji^30;jI9a_z>hzSWl^MUVZFY92Y^Az)Zl-O$ za$?hGI|2yd`GhfJ0zhKY%qukRAu-^}> zd2^%pc`DA1*^4(X#B)pS>Cx}6-`){??eOK#%dYJGU2UyfpWc~xrS96mhdtkfFaLJ# zph`3RWn%3Oj4}CY>dR;P8ZXa2``))#Um98ZED_47U8y_4~U~Ym6Wo8`Iqz7l(o#g_Bguq{o7s2 Ndym%5()(Ao + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-12/Listing2-12.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-12/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-12/Test.vb new file mode 100644 index 0000000..900e2ae --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-12/Test.vb @@ -0,0 +1,32 @@ +Option Strict On + +Class Test + + Shared Sub Main() + Dim objDerived As New Derived() + Console.WriteLine(objDerived.ClassName()) + Console.WriteLine(objDerived.BaseName()) + Console.ReadLine() + End Sub + +End Class + +Class Base + + Public Overridable Function ClassName() As String + Return MyClass.ToString + End Function + +End Class + +Class Derived : Inherits Base + + Public Overrides Function ClassName() As String + Return MyClass.ToString + End Function + + Public Function BaseName() As String + Return MyBase.ClassName() + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/AssemblyInfo.vb new file mode 100644 index 0000000..0dcf904 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln b/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln new file mode 100644 index 0000000..1b14374 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-12Stackframe", "Listing2-12Stackframe.vbproj", "{1CFE5D0F-986E-4E1C-A72A-A210B05D289F}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Debug.ActiveCfg = Debug|.NET + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Debug.Build.0 = Debug|.NET + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Release.ActiveCfg = Release|.NET + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.suo b/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.suo new file mode 100644 index 0000000000000000000000000000000000000000..35ac77ddc6ba635c35fe58da767a9b916f6b047d GIT binary patch literal 7168 zcmeHMO>7%Q6n;)pnuI2$g_criS<)2J(nO9EX#S{3>=X)d8rB2)|D72a5(B@SXwok!+%s|tEA5?j!egx2 zps$ppm(G1Mc&YYFUnPW|q(gy5BqCXvl>tfMo|ETs)nSEIpEbo?uZ>dS+lp5DEA4O< zENP&Rla4_XXCNt)xSo_@rF{X`L{YjiY0yu-+aT&yKQZ&I!mE$TD0GG;B!d{WA!(&Q zhgIlP&x?imaI@qf^fP{`o8%^Eueakh%fxZ6i51_(0jo?5u;QQVTL-Q$v?B$q$lZVVSo#1=H);o5id_VXB@E-79@Pl9t{1CVSOxZ@<_k$k>KLTz79{{uM(ZZeO+q7{r z@LP~8yndo@Yz<~kWpk0FHl(MGOiqPtRVb2+@U^w$;Q?(pI<3#C$GT7=k~HF4e=LzR zG8Cv8(#h!_8$cYrAsCd$%f1$ZiyWesGA15rGaWhG`|E;XW?7|Xd6dO zv$Wzm44DXe&B_!cBQmG@yXmyo->m&b{0Tv47PuFOWwh5D5)yxi7nVobZF4I#hOIVg zoy45Q@uSu;j6R2%m{!(UQto%+FY$;NMjPBEi!H=UVil=WKT%hQ4YOD`1GB-LSS|-O zK|j}EE#v1NYm&-ArTY7kgXlfgRr8r0_bdzCDB3f5^rKqyWyz)0`B&H-Wk}2q(fTcv}iIwMn+78n?&d2(Q*jGw7Q&;+~ zTlu_66nw^%j$QI~m0k%~&gYvD);-^@>`gxZ_1(qucpk52U4``cP9t#!;h6pM7=p-; zQnPeQhdhp&W@*Qj?ak5)mkZ#^QUG;+Y^?pNPXN-L=yz7mtRXG8$O6DStpZ>MJ)4+uFQ4Q7YhM$0*g5VOe5C0VZ75j zth&AH(7z9zt^60n=y?LpDh$<;>DFci&cEuL4bNg;$8X<%A^yw=M1STGp3g|%e9*rA z>cx+KGN0V9%w=J$R8p;zxsN5f&m%;v3@Y-3%F!a-a6y4HZ(QiMAkQqSj1y5=g?dk@ z-IHA_GrqHJW_G7+wK{ihq;1`DWWz^01Zd#?gg&DK7_98tg51`p;*{Xi2N^+wX&AS!!uwFnWV|oGh2Vpf&Zk&DYii_{;#*-J~zNP;7@Q)X-ZVA7>f9Z>gw|D&E zW5+9>T^oP3;X?n1UEf8Qem}WKr5S#iSbYMcPrjD<>Y3gHOEb^D_x<^ohn7Em-$z@W zu@#M-ZjAvnUUJsRrWc%>+Sqgm7bjz!51k_W8XY@y zAbyzCV!&&2H~xdO(!=Qf2G}D#r}6xJE0U<~zlt)pj9=zD|9{ECXr6=8Kn + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Test.vb new file mode 100644 index 0000000..3bc515a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-12Stackframe/Test.vb @@ -0,0 +1,37 @@ +Class Test + + Public Shared Sub Main() + Dim objDerived As New Derived(), objBase As New Base() + Console.WriteLine(objDerived.ClassName()) + Console.WriteLine(objDerived.BaseName()) + Console.ReadLine() + End Sub + + Public Shared Function ImmediateClassName() As String + Dim objStackFrame As New Diagnostics.StackFrame(1) + Return objStackFrame.GetMethod.DeclaringType.FullName + End Function + +End Class + +Class Base + + Public Overridable Function ClassName() As String + 'Return MyClass.ToString + Return Test.ImmediateClassName + End Function + +End Class + +Class Derived : Inherits Base + + Public Overrides Function ClassName() As String + 'Return MyClass.ToString + Return Test.ImmediateClassName + End Function + + Public Function BaseName() As String + Return MyBase.ClassName() + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter02/Listing2-18/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-18/AssemblyInfo.vb new file mode 100644 index 0000000..7a043b5 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-18/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.sln b/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.sln new file mode 100644 index 0000000..8a6e7be --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-18", "Listing2-18.vbproj", "{4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Debug.ActiveCfg = Debug|.NET + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Debug.Build.0 = Debug|.NET + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Release.ActiveCfg = Release|.NET + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.suo b/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.suo new file mode 100644 index 0000000000000000000000000000000000000000..b94e53a577371ed258e8b5a842f0b25bd5905df5 GIT binary patch literal 6656 zcmeHLO>7%Q6n;)pnuI2$g_csFETx5lh~<>fzd%K@PM|byOOlcZ<>J^I$LZQ@*_(u_ z?E#4sCr+rGfCCaL;=qjy?V%SyLgmH+SsP+j(zh z-uvE+f4Z~lx6i)be^&x@T3ThP+#wHC^+!-AD|$$z1r@fJ%H^`xDT3-2{fAcIFWB1V z?;-bk8@L_39ozwa5Znpo9+S7||Fr_6;^60sAw!Z!S(MAz?eMf09-~);zS4|d%iN9U zyKhHYDMY6NjZ0EWa!E!ci_(>gcv`SR_m@1ehR;LN5+M%JUuj1}!N3dpIOz;DaRqFd z#`9enQ`#3`O$xQu$$);w%uaAv{lv_V{h`mu+t8VixLm-j9VsaNE_Pv1wHN*M@WodY zFF-%zSMR|JfjS-4c+EQ3k9(qHoH(HC!~kv;_jU)k3)~Ind!&G6xrb4I1iS~l7yKw# zkFg*1$H7m4p9CKOKLs|xPlFGFDf=AC!+u?VtLL>nMAJ3tlf`qB|f|9i!amrtR z>L&TaHZ6AHEq#y_$G9o@f6gDddd?T{juF|+6JpTMyi6PptA96Sod9rf4f9|R$Go{` zunS38W=LgKrf^o_*@$PA5_ksI88t{})L@+gOFz$=6BcR>hkrYHt9xX0m-SLoP7>bDV5~u_LU^htAbAQyuhqX@=RvI zByX#)7}&K*o&dv9Jk3|3^9t-VVQDWcxFrJufESknR4`*kvFd4PT)a>O! z|ARmQ{8#yJE&3nB81MK2avmEz2TUW@HNyCS%9`eZb>zQiFv3}X6ce-O4Y;H*)Iz3P zn-#eK3iAo?Vqx*W`uv6X^CHl>YsC3w@j0FxF+i-eLwX6!CCt_I!1X8F2HMe^7d|jjAW*x=EVQsh&wz} zhQ*&lkX2WIloyczsWpjRu)x|LFD@IM`YSdaTnGMFt-4LD^K!o=)JJL literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.vbproj new file mode 100644 index 0000000..b55281e --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-18/Listing2-18.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-18/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-18/Test.vb new file mode 100644 index 0000000..b50b6ca --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-18/Test.vb @@ -0,0 +1,32 @@ +Option Strict Off + +Module Test + + Sub Main() + + Console.WriteLine("Developer sees: " & WhatDeveloperSees.ToString) + Console.WriteLine("Compiler says: " & WhatCompilerSees.ToString) + Console.ReadLine() + + End Sub + + Function WhatDeveloperWrites() As Integer + Dim A As Integer = 0, B As Integer = 1, C As Integer = 2 + A = B = C + Return A + End Function + + Function WhatDeveloperSees() As Integer + Dim A As Integer = 0, B As Integer = 1, C As Integer = 2 + B = C + A = B + Return A + End Function + + Function WhatCompilerSees() As Integer + Dim A As Integer = 0, B As Integer = 1, C As Integer = 2 + A = CInt(CBool(B = C)) + Return A + End Function + +End Module diff --git a/Source/VisualStudio2002/Chapter02/Listing2-2/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-2/AssemblyInfo.vb new file mode 100644 index 0000000..ed6a10b --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-2/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.sln b/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.sln new file mode 100644 index 0000000..d8a367b --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-2", "Listing2-2.vbproj", "{19A44278-676F-492D-8EB2-7C47C9EEDDDE}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Debug.ActiveCfg = Debug|.NET + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Debug.Build.0 = Debug|.NET + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Release.ActiveCfg = Release|.NET + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.suo b/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.suo new file mode 100644 index 0000000000000000000000000000000000000000..ee754ed9f8d0dcda7a0dd39817db7723cb58912d GIT binary patch literal 6656 zcmeHL-%lJ>6g~^I1(g2OTC1&Nt)?2;0Hr{SHo`2`DwGPe5VJ1}J1k3woz3n5Hf@6Z4nnHn4Acl%8{o1b-3g|sn|&1ERs_p+6<3MrfIh!l(1uUa>L{}R}g z3z9@8JF<+tC3YksTL8M{foepwF6n{H$GI%fHUmkgl2#kNzI?m(2l$hKl||rQ2A0v@ zXh=x>Azt`VTHj)w>wZ6KorTXbxTtj+9&_Qp1!axjtNNYzOFY_&e&Qvuid3$jsB6K7 z8(237-e66vRfEnzKi6O@`dKej2v^WQf*Qo=Vbo+{L9V8Dk!PTvx>?V7$E_~0R{Hg? zeEyfzoYR{kxz>QtzcKfy`l!qmL9?*V~~`LoUh^? zGqP4BbU{CBGI2Pn{=?`yUIrYj|2eS6F+KMTRv`t;jF4B7*sE}F#Jx%pJP+#(>|wZj zTUH)45IZi~X~-PBi^~=4EvJBe*YRCH?)=)tUF7Y5Nh2}E#!Tj+I|)mP(8-PG`)!A| zj{azjxPL3B?a0c*!cJ1tKUCf{SMDFt&}y% z!PqV7mh&w59chA}0bA4N0s#^HtpT!cGq6@A>@dohs z7zQ%D!MJ0x;ZPsrG|tY$c^TzqYSwkIl6Dc`e~dd=o=u|S-=paJhL<4YSmH%s8nLb# z##h#?r6(Jh|5Nz1*BjKt?0Et%Dh#zy>9%GC&cDKX!n0V^`SYyhsmJL(rZW%%)@7d2 zNI!nod-#v9@BX5ns{c~=7*@(w>qO*FDRf^(;`kL*U}aD)?(m3lnE;G%f5Mot03v>Mjia^=L#p@A!{|du z4gCJXj$0D!+@f2-UCI!ElsUZu`%PHQlN-IyU2!nxAfBR744n$!zdH2n`-`uA^7Dsp zO{{zbjs6D-K5}6^;Q`F{QnvK nP?v}AJ+6Y=YpC5 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.vbproj new file mode 100644 index 0000000..6211e15 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.vbproj.user new file mode 100644 index 0000000..447fdc6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-2/Listing2-2.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-2/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-2/Test.vb new file mode 100644 index 0000000..642f4fb --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-2/Test.vb @@ -0,0 +1,35 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + Dim objMyTest As New Derived() + With objMyTest + .WriteLine(10) + .WriteLine(10.5) + .WriteLine("11") + End With + Console.ReadLine() + End Sub + +End Class + +Class Base + + Public Sub WriteLine(ByVal AnyString As String) + Console.WriteLine(AnyString + " called Base:String") + End Sub + + Public Sub WriteLine(ByVal AnyInteger As Integer) + Console.WriteLine(AnyInteger.ToString + " called Base:Integer") + End Sub + +End Class + +Class Derived : Inherits Base + + Public Overloads Sub WriteLine(ByVal AnyDouble As Double) + Console.WriteLine(AnyDouble.ToString + " called Derived:Double") + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter02/Listing2-21/App.ico b/Source/VisualStudio2002/Chapter02/Listing2-21/App.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-21/AssemblyInfo.cs b/Source/VisualStudio2002/Chapter02/Listing2-21/AssemblyInfo.cs new file mode 100644 index 0000000..9f89a32 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-21/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.csproj b/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.csproj new file mode 100644 index 0000000..22008bb --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.csproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.csproj.user b/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.csproj.user new file mode 100644 index 0000000..e1f4628 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.csproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.sln b/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.sln new file mode 100644 index 0000000..3f6c9f3 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Listing2-21", "Listing2-21.csproj", "{4A3E4205-AC32-4528-BAA8-9A29F869DB90}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Debug.ActiveCfg = Debug|.NET + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Debug.Build.0 = Debug|.NET + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Release.ActiveCfg = Release|.NET + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.suo b/Source/VisualStudio2002/Chapter02/Listing2-21/Listing2-21.suo new file mode 100644 index 0000000000000000000000000000000000000000..7cb9849ec9e382667d7bbbc6474135168817b7a3 GIT binary patch literal 6656 zcmeHLO>7%g5FRHfO+u2=(v(tYSwdS1B36FfG(V-1W2aDv+mNIrLcTcm#&NpwTDH@) zYI{K9fVgo%;Y2wgp+XPb0Eu$o1QKd5hzmmH#IbOK3o+mKb~kpmwzF|k5GWIk-`ltI z-prdf@0;1&xxM@Dho2qzMO<`B>Sd+SBoCF0`_LyVdPJlS9X_uV3I%IW1l?`=4|(7( z*xF#9A_@woMP#1HXlM!nG4)V^=79IhT(a z+PI!Evw3x88^W=CjLSApM@F@Y_?*6=9$Ukym|-ThkwhwQW+~7#rO#-m&Fq4j*Bmkz zGGXQLd60 z=MRHJGAL2pWK$M#Z;2gIjLiYvGC(yVT9@=-%)z-7&^C#YPH;EIYo*QFU&Nm{fNbp}35;*VOV;ITaXH>a#|q$;<>U*ge5^b;?MRV255 zqOJ}bF5uiuc!N2yS`In}{XBz>=x4q-OXVQ9{t@ILMh~MV1q;$uwTm2ue(GjEW2+Wj z=ZCq{$$xJBr`4VlYa+SYa?roJcdz=X`#n2w-TEWg`vUgOI%LYW#S~`2^7I1qGj}mB zdDYKcJ!vmTe_Qu6jZ-&-`!`hVS^0P#{Wv5->MSU^HX;UX|5G=~Ubbqp8*dqdq%hWv zBmNicl}qon9btlk!t2Q|b_9{mKyOuX|W)<@v)D5T z4_2SRF1R0B+@QP#8}3yP>~l^jush0 zpbCP1>#nXJd1gsvoTA=ys(LEb%8Xy$HY>YRwh^_|*4j2Cr?z-Szl;MySf4OvbO4Bx zUH!;y!x*({=V8bYQj2~+x#gA=D>v^}uu2I6MtP?%!u}Af=9e42&#Jh%<`AB|5bKt< zvlBnvy4MnU=g9Kcbsx0<>EpyZU;aM*cE=YZpAP;IU;g9L!6A+kdCGr*;Xf4FZ(j*M zw>4ZM>ktB8rqZYa@ab8U*a=-R#cJ?!0|7m3AX?0;jDlU*$JFzp09r zwv-!2sxYn!VbJk>CsL`D(k(AmE>|knVdTWBDS>XZ zfC}F7t8@Ma9vX-cA|_mDq`6ZvdyDj22;g9wdl5Dmzl97Vrif|G(az9U!!A#2#s%~@ z;q#M`kYD!f`xmk}G7B*OMDs_3)g_BE3->=#eFiO;Y8SYrFKNI#m6y4I)0)0^yq2J5`aPHIuz zj;VUYKFHEn<;~Iu9@SlSjR3bo8# z2GXFR!{#;a3j}?F2!f!XLH+*woUO;WK0-4B7wo&%S$pmE+I#=EK08>IC^D$TtTm8e z_7nOffr%QsZXGslQ;X57pe>;#Tb=_;7bDi&MxNi7y#ykT`>br#z z!GyDY%y-qdA74r<-UgaG_o08R8d)~-r8~7D(gKF=+!jv8j0t)(E&c&p_K16R>~ysNTD@YGTiz1Wj2)npjjY^#p*b#Ni?7))T zfYeTuX(H$@R>Z#59nNIqbI$K!<_ewp_vm$Z>k084S)?uomUn-LNEUTQx|?vxqS2U6 zvPk=;wOP1ik$NLhI>{pSN#YZJB#Tt0)-J+b$>`oVU10j-=woD8D3`6y+51z@z6V}c zNiJUJbFM+>bFM{JPjAE98KUjTITyu!4bMk$H=48GgK!6quzDftc9{Qm{pL%|l8h7q zw+4UI2#w#-zR<~!qfI~cuZ}jWq0B>8{T-AkgqP_?oh#vv_E~&9;& + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.sln b/Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.sln new file mode 100644 index 0000000..8da8d1a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-23", "Listing2-23.vbproj", "{A32A373F-CB08-48F6-80B2-5C6C0671BB58}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Debug.ActiveCfg = Debug|.NET + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Debug.Build.0 = Debug|.NET + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Release.ActiveCfg = Release|.NET + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.suo b/Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.suo new file mode 100644 index 0000000000000000000000000000000000000000..181082479416b8637800ad34fac83f4358392109 GIT binary patch literal 7168 zcmeHLO;B4^6g~lJ0fE|DYFll6Vyoy#CIMOyYDbcQR!Kpi!Z_K4V5bpx<{l24L+~saye5dg61y$i#%`} zw$@o|$hF=Bt_SZ0H-PU3H-ekMTxaqw{dYVtCI)_4(PU7PxTj?qEA5;PA!2NA)NbTk=pTbsUcvES1SD$s<4B_kJQSmL;6Bg38`@rhZwK4qin~b7mRVz zIcTB>5;BeJB^g)R7hz2Vt<6b;e&)8I*vGV%CPFl>RJM!Ka>= zEPq(t|8jdA`kBAXQ>Xe1@tSS=k85J*H*vsj69c$Z9G@7_3~mAQJxaiOzkAU>2yO)* z0^bL=$2f}i{on_{$H2$I4}vxDL*OLSOcg_R9__@N>6JukaKfRpE zh7;PDo-)!|m9lk#a5l_g8>fQ9+IVDEpI48~fp|D!#I(U^JZq%cpmFNsy8 zV*Ny29X4FVx*6~WYhtAu)DHbzgRSUiy*N+hpkn=ls6mV#MokZk5EtiUbSAH>|}F>mfeCM{bGVHGS*PgJ3w zwR*xDj{Y|DGl^AC2LHIj_UJ>cRonL1a=DqSaX(Xm3Fq0YR4#83) zbZGrqZAVr-)}4IbBMLsFO2=XOs!p#(DCctRHR3w+^ZLIJpZ#=g zX%){?^_11fLDyv&K;i6E*B-QnP)hwM#UANJs~guLIgM5?BtBJWPvQM(um{&3@j~j8 zQ+R(>u9PXuZdpWeN~vIQA0`j$1QAG7BPIHNFBN2S}E6*&J2>j}?dPUl~^|3dzm z8Hn$BZetxGef@s-fm_!<{N8*jf2HmqRw|*^iO3&T=)Qoou`8&^Q|f#v(vMIT1pUsX zt{Zh`NmZP@-VwEXD%8q~U)naay0dRR_EI}*Tfdy$;St?31_4{v_@>(r}lpA3G`_f2Hw_e;n6DJAlhI)Qm1Ka&3Pxq-)4=AM7| z+truH);@ku{jXH+i!OXoTl%FJSS|88*a5wu@%*^m!cy?RyaSzuUF;m?J~)M_;m+GU z{V|hSuqqS(e2CY~;( + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-23/Listing2-23.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-23/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-23/Test.vb new file mode 100644 index 0000000..cb46568 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-23/Test.vb @@ -0,0 +1,23 @@ +Option Strict On + +Module BoxingTest + + Sub Main() + Dim MyBoolean As Boolean = False + Dim MyObject As Object = False + + SwitchBoolean(CType(MyBoolean, Boolean)) + Console.WriteLine("MyBoolean = " & MyBoolean.ToString) + + SwitchBoolean(MyObject) + Console.WriteLine("MyObject = " & MyObject.ToString) + + Console.ReadLine() + + End Sub + + Private Sub SwitchBoolean(ByRef TestBoolean As Object) + TestBoolean = True + End Sub + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter02/Listing2-24/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-24/AssemblyInfo.vb new file mode 100644 index 0000000..c10371f --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-24/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.sln b/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.sln new file mode 100644 index 0000000..cfcc213 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-24", "Listing2-24.vbproj", "{9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Debug.ActiveCfg = Debug|.NET + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Debug.Build.0 = Debug|.NET + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Release.ActiveCfg = Release|.NET + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.suo b/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.suo new file mode 100644 index 0000000000000000000000000000000000000000..18ff258b3af5d79a04fec2b6a5658e842adf1830 GIT binary patch literal 7168 zcmeHL&2Jl35Fa}!O+wPr(k}`vOK2e=V#Q5>l9Y;M?LZ-JLXwgQ`Qq3c$EoABY$s{d z_JH7k_ybTlQ4UCmj{_$@B+7vk2-IE>7lh!%v2dasi242A?#7PsIvXbi0U2xdy`6pg zX5PG+-@NtpYkPit>%+r8Nd=vj23aXK%WY+HANpiPcZm4W;r&XnShR#9=x)=$$OC`C z)<$~|xz{_uP2ip2X7KIc7H}(=`%K=Z|BeSn#l){5nuH~THYZEiY43CZ5#xBHVV&2y zZu*A~wtnH`xThFYpmB*wUe3#qq|g@R9IgheaO8PwnCtbJ_y{j5|Rc0Jn1k8@u(~QoayN zYokWi%oSA1Hilw_7^iKSj0|aG@fl-I-L{2Nv9y`g!iiMD%yB^TgfXQJnz=dkUW;zd zWzCF{v8HL8NM#b{V!kw>@tN_+5Z~LSr&HM}GnPweqp3`iqMc7086y`=*2 z!r=wU&5adtjq)V zlCX^SdP73u5Ani@P%rCXPCMhMbqYR9;zz9$@K^! zqOJiO&ST$9c!M>uRt@Tae(u3W^s`=^rE*ZE{xE6~qlZzGf(4nH+C?6Ke(GjDW2+`z z=fYa))W1sogKEu*HIZCvI_O_ryI1|x{kk2vmHH!C`yAHIbI62kiz%#v)#;Hs^s`ov z+tbnCR(@u%>uKTo(<=6?dOVAM93ynK7aX}ZB6@BAbM2(+R<4!q!7XEu6vDi5#Q&T< zbNQM_@QfK*D-yb(pEa2{>{b6>j2*534%Yt+*upVu?MduH43=qSUWwwY!m|<2DtYiU ztkZCY;puH&c~C>_6wpsVX5v`@u^xuMqZk#J$I#N`#KC z-i!RRc39TcUjul4tEA1yD(AYD_d7(vXF};XBwsZe4G868vBNJ7r@kgqDf;Z^w->MA zezJ)&zwGl}lqV2Y1Go+%iMny^MEe+uX+L_r_M_x>%1Ow=c;1PTL5z45zb?gt2=;!= za9J+7l;wadpg3h!u+L&tTorkSeW}Q^R83ahihp-u?2C4S3}b_5 zfoa4#H;k{Y*^(ZuWBvEz)sO5+b*!FWzW*Ni(rTZG{4s^@^GF+~f{Hw8&)tW_6a@X&rEUOqW>Hm~ zlHOr;dMek-ieKF}tGaV+6V6gwYg?b3-r^YpG71Rc`GhfJ06?7T8bECufYdrW4`2)- zwdD6xTW(3|KY&qs-|A*ssHCe!0>6JQbJb?8BWGV$AM3JNEt68?BMojxT@i ze{=s$A78xw>93Qowto_SzxUht@^2T8^ifLWsrCgHgnTLY<+J?{Ezdsp&UaT{8eRGL zUG+be+Z)|@quK2tgZ$;{4}&O3BEN$zdS2uA<7Nv>+5hs+#2#BGM|lp;B5HW@w!Z$D z$t+m4iT}S5cX+1sia*S=5qsKmD3R0}L%bSb#~v#$-A?@_o7!#t)J-ZqaqpGmpYuPX y6BT19=kx*dh*fDl3y8m#X6x#%we+L|UFZ9&B(1-;;q#H literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.vbproj new file mode 100644 index 0000000..55af9a8 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-24/Listing2-24.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-24/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-24/Test.vb new file mode 100644 index 0000000..ed87459 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-24/Test.vb @@ -0,0 +1,107 @@ +Option Strict On + +Module Test + + Sub Main() + Dim intTest As Integer, dblTest As Double + Dim intZero As Integer = 0, blnExceptionThrown As Boolean = False + + 'First test + Console.WriteLine("Integer division by zero assigned to integer:") + blnExceptionThrown = False + Try + intTest = 5 \ intZero + Catch objException As Exception + Console.WriteLine(objException.Message) + blnExceptionThrown = True + Finally + If blnExceptionThrown = True Then + Console.WriteLine("Result: not available") + Else + Console.WriteLine("No exception was thrown") + Console.WriteLine("Result: " + intTest.ToString) + End If + Console.WriteLine() + End Try + + 'Second test + Console.WriteLine("Integer division by zero assigned to double:") + blnExceptionThrown = False + Try + dblTest = 5 \ intZero + Catch objException As Exception + Console.WriteLine(objException.Message) + blnExceptionThrown = True + Finally + If blnExceptionThrown = True Then + Console.WriteLine("Result: not available") + Else + Console.WriteLine("No exception was thrown") + Console.WriteLine("Result: " + dblTest.ToString) + End If + Console.WriteLine() + End Try + + 'Third test + Console.WriteLine("Float division by zero assigned to integer:") + blnExceptionThrown = False + Try + intTest = CInt(5 / intZero) + Catch objException As Exception + Console.WriteLine(objException.Message) + blnExceptionThrown = True + Finally + If blnExceptionThrown = True Then + Console.WriteLine("Result: not available") + Else + Console.WriteLine("No exception was thrown") + Console.WriteLine("Result: " + intTest.ToString) + End If + Console.WriteLine() + End Try + + 'Fourth test + Console.WriteLine("Float division by zero assigned to double:") + blnExceptionThrown = False + Try + dblTest = 5 / intZero + Catch objException As Exception + Console.WriteLine(objException.Message) + blnExceptionThrown = True + Finally + If blnExceptionThrown = True Then + Console.WriteLine("Result: not available") + Else + Console.WriteLine("No exception was thrown") + Console.WriteLine("Result: " + dblTest.ToString) + Console.WriteLine("Is infinity: " + CStr(Double.IsInfinity(dblTest))) + Console.WriteLine("Is not a number: " + CStr(Double.IsNaN(dblTest))) + End If + Console.WriteLine() + End Try + + 'Fifth test + Console.WriteLine("Float division of zero by zero assigned to double:") + blnExceptionThrown = False + Try + dblTest = intZero / intZero + Catch objException As Exception + Console.WriteLine(objException.Message) + blnExceptionThrown = True + Finally + If blnExceptionThrown = True Then + Console.WriteLine("Result: not available") + Else + Console.WriteLine("No exception was thrown") + Console.WriteLine("Result: " + dblTest.ToString) + Console.WriteLine("Is infinity: " + CStr(Double.IsInfinity(dblTest))) + Console.WriteLine("Is not a number: " + CStr(Double.IsNaN(dblTest))) + End If + Console.WriteLine() + End Try + + Console.ReadLine() + + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter02/Listing2-25/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-25/AssemblyInfo.vb new file mode 100644 index 0000000..84c17c4 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-25/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.sln b/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.sln new file mode 100644 index 0000000..82d6b70 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-25", "Listing2-25.vbproj", "{A67EAD24-F695-4109-A756-A2E90EAA7FC8}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Debug.ActiveCfg = Debug|.NET + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Debug.Build.0 = Debug|.NET + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Release.ActiveCfg = Release|.NET + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.suo b/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.suo new file mode 100644 index 0000000000000000000000000000000000000000..5acfc3c06b32ba2239699c86d9a922383bb79522 GIT binary patch literal 7168 zcmeHL&2Jk;6n}P7nuH`JrC$_Ume4|iNEGJ-nhz=^YX=H(6Oxof$QQ?U9H)-gvYn5r ztppMW#2ps|66L@NB-9>2To9rsj)fCki240ycVowRosFAyl5o3F!W}DBn zwb0Pf#;-l>_Zou=G%aDt%0(HI1j?LTz%vFbYZUwXNDU_$dPgw75R>`(Kx;q~DP3H<%PmGNNdgf9# z7fx!Ev9yuNsV!UU59h)hwqZ6nrcFf_VoU0^$)5-(jkp$wCUQoG9qMOdbK0npSyJCM z=*CjoNX1g-FikUwRMc3_7CO|vFdZD@cg=b-k)AWcnW#3INX04I|9mVJ%Y>7xyCjdx zeoo!^{Rmi>0SRFz8?uajOY8_iwg7ZX1J#IVUD6GijdKa0Z5)yga3AE=(w*90z#l)X z%mVk~u#EP)Lqg&Y@xqQyH}l|rw);`*9DEkXk6LHou^jxjpscZbIhVv=;?Yj@6EBHX zq*DDv-56}Rh;=jI4d%p3Ij9Z#xduDY&wO#7%0Z?21IR&)9!5<97Nja_Csukr)XjXx zQVqJzgSpbqf2I0I)tsYSBDvCV(7!o%xB993Z7Xm~^#?KcCCr=WkQvJsLzo52)6-Sx zXRe;MhNHjD{h7k5Cx!D*s@OC0@gnLG^w8B>u;X8k8vZ2 z|0QeW;yF*CjXSbZBy>SPb24$*t^R}PJ6-}D%>OB{iDTy6<5-0-EYpg-62e)9XCt0f zvfz1Gr{N64)7!H0poZAVp&o_IKwBqbJpg})&?_R(qU6^(g?VrMOB#tONz7y(xN_QeF9qVqs?-K=|QKjRUd|MlFX~s}L0`A|?CEvAWR>v8zKi)W z!5p|8byk7D$1sp)4aO5w67IAy&cxYyxGt`oOwDE%r`0rtq@NVK3{~ki$SFH^) zjs;!>rV;C$FuuHIQ+l$B`9F?Nzqba}F?-&CvkF6F$aFii0{35GKH*)=?fi?+U)X=< z4#f8!%O)1zebjsK_VrJGE)tckQg;w5l~n6QV7FQh)@*-{qAku zPUM+Ym2nDs$JObnSSvGrdE3nF&c1c(-npB$4a(VFpY0?dgy$2+Obh^GXV*^Twh>6p zv-1f05K;?%AKGf8}UV;5Otme&)-sh>fFy_hdxiqjW8_@c$BkwM<>)Yyl{n(~c4pgbM41A1BG{j>VSWbaX)gVTr_p1jT5 zA9penR%PP@)z@~azgUy~??W;67q@R$pS{67 Ky+`+|2mS`ZPO97h literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.vbproj new file mode 100644 index 0000000..e254014 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-25/Listing2-25.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-25/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-25/Test.vb new file mode 100644 index 0000000..17f8202 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-25/Test.vb @@ -0,0 +1,19 @@ +Option Strict On + +Module Test + + Sub Main() + + Console.WriteLine(Single.NaN = Single.NaN) + Console.WriteLine((Single.NaN - Single.NaN) = 0) + + Console.WriteLine(Single.PositiveInfinity = Single.PositiveInfinity) + Console.WriteLine((Single.PositiveInfinity - Single.PositiveInfinity) = 0) + + Console.WriteLine(1.0 < Single.NaN) + Console.WriteLine(1.0 >= Single.NaN) + Console.ReadLine() + + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter02/Listing2-26/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-26/AssemblyInfo.vb new file mode 100644 index 0000000..001c7ee --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-26/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.sln b/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.sln new file mode 100644 index 0000000..d11ea21 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-26", "Listing2-26.vbproj", "{DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Debug.ActiveCfg = Debug|.NET + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Debug.Build.0 = Debug|.NET + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Release.ActiveCfg = Release|.NET + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.suo b/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.suo new file mode 100644 index 0000000000000000000000000000000000000000..352a55844dcc66cfda77515b7bc939fa66d4cac3 GIT binary patch literal 7168 zcmeHL&2Jl35Fa}!O+u2=(r;*4LJKJ(QQSDCO-hA75-7w?NKz6ZUmV+UoH}01c9KSI zC6G8E{s0tCgacB=$AKFlQG_@FLal@l7lh!%vE&37Vt&83yRl=u&c;naMHy>$-@dPz zH*e-Q@A=lv-M_s1@!?;kjLu1&tQH#OzLI(u%49_kh`3SU_iCX~Fe*h*+@^cT0)Ii* zdUFrC*E_%s;GN(`@crN>a5I?uOx~vdj|E0V$1g9M^h+A=tSn-uozs4JjAf0w4TddG zJ==4j`70Ouy-KG7jY&jua!CdyiFaNu;u(h)R(;OsX8SxQZWnQg{z^S;JC-%j$4TcQ zi55u7B%YULR7szQHc^x|CJpi#GrPb}FGFTXf-;O%>ylCO^VkKy`d%>Y zVRrw=>q*FG{4!3R$}h!hmT5oki51_(0jo?5;8t;dVn7SH70h;|fVF-PqP!Qp54<0I z0Bp^180Ck+4}*_@kAfcoYv4!0ZD962hWBys6i{)XzX{C+T%l=LLB_3@?KJk)R zMJkt1)Qv-jOV~FZ)?iMomV??MpL?(w`OFs=C>&HSzaKe>-b1fRLW6Ww>BLI6i?W%| z_*Ro{@L;aA@?W|90k!7XI!~@P9ptaA-Kl)ae#>;+a`_>weHQEHIb___MHgnl%JftX z@|mm0%;{)vBR{R|9^c^Y#4(9(f*uXJk?FsBc1e$3jRte**!m|<2 zDmm~Jw9{~g;puHoSx|%TS1VCdk*0Ft(@+pu6(Y$`MpCFe8!ZFgYr#%ybi8hD73q!?(DZjDn+0F z_TIuWz9$-3=a#*$D+nDwlII!mi3bkmK`Qm&>omASyl4qZH%dPIylC$LpFzz4M)}dx zi=F}LLF+ZSYLk{bWgf{Xqnv#Py`n0~)9s5%o~f!l$){8}Fl^T+dBO)TImWzKG2<2J z8NkuN15E-5jxOlQH*2{b4_3jt(@I;erwczHIDpl#o!?%Rufa~9lg6{#YnpB2S2g^x z?qWeKFb}Rooi*U^K}@8Xlkvoqf;laWGjMharb{RzQ?iiUB8W-&vPoeSq%8eeR0Ff`jrSy`<`)BQm$%;{) zgER0Np1h6QA0wFwt2*)jH{uS@luq&I3G^K{r@e?2NvRR|YaDFpW5lK1slTXGn<<~N zNyQfXQYrpf|1(-%F^Y6f8!(QTl{V6V_-jZup7v6UEhkX4?q9{)+Dn_2Un RX@kS^#7)NZHr=Zh_#5cLvhx4{ literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.vbproj new file mode 100644 index 0000000..faafda0 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-26/Listing2-26.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-26/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-26/Test.vb new file mode 100644 index 0000000..cd14f55 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-26/Test.vb @@ -0,0 +1,33 @@ +Option Strict On + +Module Test + + Sub Main() + + Try + Console.WriteLine(CalcTotalOne(Single.NaN)) + Console.WriteLine(CalcTotalTwo(Single.NaN)) + Catch ex As Exception + Console.WriteLine(ex.Message) + Finally + Console.ReadLine() + End Try + + End Sub + + Function CalcTotalOne(ByVal PurchaseAmount As Single) As Single + If PurchaseAmount < 0.0 Then + Throw New ArgumentException("PurchaseAmount must be >= zero") + End If + Return PurchaseAmount * 1.08F + End Function + + Function CalcTotalTwo(ByVal PurchaseAmount As Single) As Single + If PurchaseAmount >= 0.0 Then + Return PurchaseAmount * 1.08F + Else + Throw New ArgumentException("PurchaseAmount must be >= zero") + End If + End Function + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter02/Listing2-27/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-27/AssemblyInfo.vb new file mode 100644 index 0000000..8f8910b --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-27/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.sln b/Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.sln new file mode 100644 index 0000000..6c4f1e3 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-27", "Listing2-27.vbproj", "{32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Debug.ActiveCfg = Debug|.NET + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Debug.Build.0 = Debug|.NET + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Release.ActiveCfg = Release|.NET + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.suo b/Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.suo new file mode 100644 index 0000000000000000000000000000000000000000..e2f21f12839489a7dbd34400bde0969d46b328ae GIT binary patch literal 7168 zcmeHMO-x)>6g~sg0s^(Q|JwS*Rw;1^6k06QCh%s^DpL@spqb4uGYmtAd6Ss|+O%Dm zxG=7CV{m0%G%@}xx>FOYi7QP^>%zD(MprJYE8WQWefPb`3@`JB2aFmGhn)BB&w2Np zd+xd4xp%mGXZKI<-a7oVIOv?z%1WU@?kj2cp-fivfJhArtgjRb1+!5E#clczdEigj zT4${x*LnxI9=sFW0KOmG2yOy%oyptu|M9?>82HPJCP7K#os}zCY45Zj5o3FUaa4)k zc50|jAGV?WR(6qR$)-p zmn?s{S<(&^re2%eA9-^2mCObp;s5eJ9?&EOU=`;h`xs?RDBQps&j=mPmGOS zdiF{#A4zFr@r;qpt1Vj>h~y(2ws9&ntc^!!BJGt)*S8`H*;=>(g0J`+#Jvyl|b z9?9oX&P|Np4}x{+lQ4F&Aq&{I#Evl9W`S-Qpc)aaQ%<7I#k9a|BV03z!2luiqN3GNFSpt95Ith>E;lEjBjVqk!uh9E?3wv^4&^8$bhQ?gTpJO6mj9`n zWDQ&K#j}EaRtjL;DB^$K8o6}Nqv+#~tP}~ImVV-}SN(e+JK_Ki`Y;VPam<{10;>># zWm<_>!Z@q&Y{aul4m<x_B)@xlm}U zk=nCut7ntXe!01H1NEtTw$;d9-&N^G>I}*NSeG++`jKLTati6#FFj}(LfMbnkkvbg zcQ3dbQUS>JfKQ`zU9P#L}S+pMz9XC3%K@G08JkIg@-!Z3k}KwMm}v!Ap)g z?lp{f6?4#GM;C0>VO=LI=9{g4w00>={qhw4bXd+gc4E$*sGU*$taG;4;lZwx=CixU z^O9AeC zS9+Ynae_0sgznLB7a1o`vSI& zok2yOR`*MheuSzZ=&QGNJCJ9VRK_Xl9Z{#JQmxGRxwg?MghxiJ32?R!n3*N-oMUh~erKh)N``{{2}ueE*>{IKu4=<@HEkMy&Z$W!hH z)`j*%*{_}(II%qU{CnTucx7zmpWHI%hNQ(?aN+t=E`?= zAwP(`3Em*tdz9zk45Ef7Z}axYoy>$)nfUt~affG0ulUmj*->lQi%5~w8bQ3q!L~i- zzH~eF7j0_Y1pb%epZz + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-27/Listing2-27.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-27/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-27/Test.vb new file mode 100644 index 0000000..97b4892 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-27/Test.vb @@ -0,0 +1,15 @@ +Option Strict On + +Module Test + + Sub Main() + + Dim X As Double, Y As Double + X = 10 ^ 18 + Y = X + 1 + Console.WriteLine("X = Y? " + (X = Y).ToString) + Console.ReadLine() + + End Sub + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter02/Listing2-28/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-28/AssemblyInfo.vb new file mode 100644 index 0000000..46393c4 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-28/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.sln b/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.sln new file mode 100644 index 0000000..873642b --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-28", "Listing2-28.vbproj", "{B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Debug.ActiveCfg = Debug|.NET + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Debug.Build.0 = Debug|.NET + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Release.ActiveCfg = Release|.NET + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.suo b/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.suo new file mode 100644 index 0000000000000000000000000000000000000000..bb6cc1adab8e2339532a1715ad455d3ac97cbea9 GIT binary patch literal 7168 zcmeHLO-x)>6g~sg0s^(Qtypb+Vyo0RgaJ$uY7=-f)hbgEs1P#?hhZ3o4)Z261C+E) zY~sSWaA|O5U6?ffEZnJybPlS*e&2oXGQ(uv@H(Y78qVar`*-d= z=iYnnckZ1V*LVN?-X{lskrFx~wX(X_Aomp2`;aFqx=*AA8J1Vq*4FGw5oEXNKePgW z!`3=y54qPn!1dsr;0Ex$;6`v0nEOoLrvJ|hjEaR{UJMCI8fjLRvD4mZKRiaS2K}fK zy=s2*R%_EWUoC`Qqf>##B`P^ND?^e*nwK;9#$ko7&)H(G-@{Vl+l5y8EA4O%ZcWO&FJi_OO8Rk1mkjHaxF5t>fstt?A z`Zb!?e8x)0)AlgU6Up?nwUjFe)IC2Q9%8>1GnLFtS<&pYF`7&#She%HcsibqrkM9g zK96#4V(dQ%HlCBB+xd28b7!f_0`ht+F!t* zAgs&*_Y$y-_Ig7?;E#`ZL2RIhdYK2$vzDXQDXdunKWd%8isi9>v&tGR<(?9MiATgR zulgCMh*hLg{Y2e3Y&eU3v#=VBiIrkdJM?o8sGFn)-Q>eN)@etkRDTFDh~7i5Ny373 zMeW2&JN_`9dDYKYspDU%{*!9X(;Gb5F|}+0{p)l0s-L>wb{w}yc^W0Z^dP8)@b$|8oOb|{ zez@K-w0A*1gj_(LQTLD9a)&G;IAxTx&p|4tf;`>65ab!EN`rh#9S0uUjX|F9 z!AFig?gfl^9`=~9BLKTiSVh~Jveu8<04!!*FMg()MJLJwU=#MUo#h_nFJc7)UG}%T z$Mcp|!XNz>3u1zKa5?G#{&1K0KJbb^t&laqB;J@(SWb;`HqOpq=@M#@so9Q$wtVRq z_^tF}T=_v%zTzB^VQlamFpXH}hVkXb&~=BZ!2ie4`8#I-6SL4e%Q0;=GBjX(q*@lu`G<8N~wJ!@<$cAFW}hd z2rBZddS8n4!&L=Nzja5q194_aMVx}(VRd^d*2;)q-ZneBQ?_2cJGaudemSw_vmFJ5 z@P0y{i331%bnQTF8$_*rcOHZcA+@mX$G6;)!p+UQ74)zHz$nl3BJ4L|HD7LAecp-- zWA>xug?MjiIX(8{)tgP>H;=4*S@Z6`KYi?Y{l-g99@}v@yZXEFO9B#`hl;mLXU2=HMk8&C%@#@*o($%?`2Es ae;?GDxz)~)pS)fiHL4h3yUSf&fqwwQgRNZv literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.vbproj new file mode 100644 index 0000000..87f30cd --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.vbproj.user new file mode 100644 index 0000000..c168d10 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-28/Listing2-28.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-28/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-28/Test.vb new file mode 100644 index 0000000..fbc67ae --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-28/Test.vb @@ -0,0 +1,12 @@ +Option Strict On + +Module Test + + Sub Main() + Dim X As Double = 2.45, Y As Double = 245 + X *= 100 + Console.WriteLine("X = Y? " + (X = Y).ToString) + Console.ReadLine() + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter02/Listing2-3/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-3/AssemblyInfo.vb new file mode 100644 index 0000000..ecb4d27 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-3/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.sln b/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.sln new file mode 100644 index 0000000..3c4cdcd --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-3", "Listing2-3.vbproj", "{E1D2974A-2952-4B9D-A767-0783A0FE75F8}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Debug.ActiveCfg = Debug|.NET + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Debug.Build.0 = Debug|.NET + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Release.ActiveCfg = Release|.NET + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.suo b/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.suo new file mode 100644 index 0000000000000000000000000000000000000000..3358830c1d37cf9543f16299d0e466305eb15149 GIT binary patch literal 6656 zcmeHL&2Jl35FaNgO#siv(k^S2F1aVrA3>X}XrD+M8oXbtR4PuV2%0-xC?wQxEsthChySy%L7TV@UumeF)83$lIvLQ@N^In<9Vcglh@vS?eIrm zb$=UCattcaw4|jh*JMKSxY}|B{|2n^`pb@3-TxEP79kEXUTH^N!Kw$0aneO-q6bWw z!~YvHrL?cWnhaW-lLr0FnZ4k!`iYtEyF*`;tI(N{xLn4pEh#GfHdbL&-LJa-aK-Pq zJPrNKU*>68{Xx8DoBrdPcsWiS@Y=)xE)~bW58MOZ1Lkv-fOWb1(S88@Aow8oA+R^b z5wsr$KLS1qJ_dditbrc`9|u$RgnK>dUfH)pch>`d>RjR0iLtR)FI_L&X;VuYMXO}1 zlQ<(*0N!|9u^J&w{X=B;EZIvj{HDkW)*$#zJJgp{i%#`j+U>vCRF z$Ye{Fk+;N-6#5o`ZbhIP5v@-K(C6V?9%!3GPp=H3w{_a8{XYK0VPzS(mxE=rHyjcY ze~1@el!loJ^V*Z6);ahrhaa`hz+*Q2x1g-?r0QRZzr>?v^b;?MRitYDL|p?mT*JCq z@CIvQqZ)Jy`nd+p=x4o9AzVZM7-|rshf$M<1%-y%MNUFLb+exFip!?NTItol>iLhW zIcGOSa-#vEe|_#@^;7q|Zs1nyPhjp#m^b$!Gp;R`unN|uXIs$ET0QL!M}Ir{S-`5B z!ugvj_MCdWh;{}Nx>^fLZj6ZYuKziAQf(_Y_U^|mV~`ZbxEaL%k~?y6&X@6w8QCZj z`k|wZjTUH*_ z5IZ*7S@cZBARXPsI4;@B3Lb*~o)h6u|M_E}Eef|5#tKZ>%wv&BrvM+K2 zLDi4+8IW@bs+f$Rl(KzV71bEF&*$*87yUzW2HcARJS1mPZb#4>$J;}Y9Y@bCxmmL; zM`Z=2si;DI5i%K7;u-XQiD#jzF7c*H1}1H=#1lGrz;Q;siScg0QXRJR!wwzR^ub16 z+1ra=&W?R&@zY^9XV9mt*D*If=Y0(ATkui;z+mk38P{FmFOBfWJB!6JMH^g;qAlR> zAq=FsgK@`X!l53|0CSN@@x_o{|-a;bvHpKvBZnOG-6#n zjIXWP={?rM{2#}wlkT88X3rCFSz)MwO4pnfIR6Uk3D06-=O5gEA^)5V#QUrv9{u=P z?7$!2eEy4fU++rY39OW<)``fUR_MNr#PKSq$n)xaDKd<36$JkFrEU~;W>r-jU+<*a zJq5M0;@7s#sqU2R#9nH9Z5x&g+dN`al7JEJPZ%=>K*X!AQPj3k^g4UzQOFQdeZN1q z?UwjExA0al!bSk3%;^=_ufuAd+~|Goiv2N%aTkUn5GsBD^2k%~Exz)}&mX*%T>J7< z^+AXqA?`eE4WRd(+K&eD=oxTx^r|K}|81=_1iq>_rySC=w}V;R^y}+6%6)JVQNx|L zbNXW@vuHIYet#qGa8DT)f1ZHsC3n~>D3a8gM!Xte4>O#+thej;Z94Air*4w}q<$-i tf8KXSFI1*b(CGu_5v$T>77%|O&CY*)t^SiI(e%z=esAloX7vX({SA%4m>B>7 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.vbproj new file mode 100644 index 0000000..e9677ae --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-3/Listing2-3.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-3/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-3/Test.vb new file mode 100644 index 0000000..e27213b --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-3/Test.vb @@ -0,0 +1,35 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + Dim objDerived As New Derived() + Dim objTest As New MyTest() + objDerived.DoSomething(objTest) + Console.ReadLine() + End Sub + +End Class + +Class MyTest +End Class + +Class Base + + Public Overridable Sub DoSomething(ByVal NewValue As MyTest) + Console.WriteLine("Base:DoSomething(MyTest) called") + End Sub + +End Class + +Class Derived : Inherits Base + + Public Overloads Overrides Sub DoSomething(ByVal NewValue As MyTest) + Console.WriteLine("Derived:DoSomething(MyTest) called") + End Sub + + Public Overloads Sub DoSomething(ByVal NewValue As Object) + Console.WriteLine("Derived:DoSomething(Object) called") + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter02/Listing2-4/App.ico b/Source/VisualStudio2002/Chapter02/Listing2-4/App.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-4/AssemblyInfo.cs b/Source/VisualStudio2002/Chapter02/Listing2-4/AssemblyInfo.cs new file mode 100644 index 0000000..9f89a32 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-4/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.csproj b/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.csproj new file mode 100644 index 0000000..f724ae3 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.csproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.csproj.user b/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.csproj.user new file mode 100644 index 0000000..6893790 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.csproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.sln b/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.sln new file mode 100644 index 0000000..acd5370 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Listing2-4", "Listing2-4.csproj", "{19931BA2-7550-4959-A597-ECECD054B2C8}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {19931BA2-7550-4959-A597-ECECD054B2C8}.Debug.ActiveCfg = Debug|.NET + {19931BA2-7550-4959-A597-ECECD054B2C8}.Debug.Build.0 = Debug|.NET + {19931BA2-7550-4959-A597-ECECD054B2C8}.Release.ActiveCfg = Release|.NET + {19931BA2-7550-4959-A597-ECECD054B2C8}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.suo b/Source/VisualStudio2002/Chapter02/Listing2-4/Listing2-4.suo new file mode 100644 index 0000000000000000000000000000000000000000..68b8faea341a80ced3cb93d279dbdef3c4799fae GIT binary patch literal 7168 zcmeHLO>7%Q6n;)pnxskk11Y7@vV;}_f+)@ZPpOjF2^8X_Bxw_&TpWAjICZ?ncA8dg z4@evkXN1CuQV9w1bKnL@lmjP_Pn_PZ|yGsV~L2hlFkWKJvS8`Wxoc0JeHiZLaB%`5lci_wfk8!VWvWHmOYZs zqnw)<`wxKq(kHVx$(AhR+!8xxQMUkeO9Iu1XsyzQI*oHNpluX2PfG`C%crf{pTnO3 ztV{#G9xYA06O z@rUuu>--rjb^I%w|A?A%WP>L|+?AkzeePcMQ}>&W;}+@pWxN!b)<$HEKUPL(z3BTG4N^bOszB1;|T!B7F3SitY z{C~+AIe*S)(8d#4$`e|h{U;84o&N#Iju!w2*DwLLam=236uS_DWk%kr%pzA|Zp2(A z4W5T}267l?Z_8>04fsw5a?2^8+&T2?#*@7>3iV$7n=}$r;+V-ibkD+4 zBJ}L~yU0IlhizT?QGnQ2NL#5Z9P4hr?-B){5vAjhd|hQ$!j-exW*qC2zY(bveg5;i zE7$NoQ_Z>x+2^|~C!`m@c07kBO&91=U`ZdQlow&u)~4;oRf^BsvjxhtS6_ zJ#tm96b;KQaFR5Dn6ADEnXn4+boyL~XP_z!@o{w+cxdxOJfVXZ9DCF&81FJ{>w*Q{ zu%!d#9@y9l3t47bFoL!&lzQ;%Qgy9(cEIW$%-Wtqm+E~LYjmQmy`!_sSuXF7Quw3q zVgXDs11?4_z#sjcz$^Y7!a#;I7&E3g7F1)LjkEJuyr^1cYPREGG3_G2e|7(&Zc=fn zjkOQp^(E(kj3fJ41f~(|+%SG)?~QLq%h3NQhIqpn#*f+a2AozHY9i8Y&I;Ur)i)d7 z#k|fxKmWq{vri!UGlppT=7Wv{w{Lv(gMN2=GL{9gQ*pIVME;OM_hlR$9YIB&Q88Mi zAMPt~{OvosEr>HKD&pkyj;rh`Un?ViaogMmx*FGFns?=ef9j{ z6RV3ay!YL;S0>gzdEZBXC@$ZImOW0>i-yR+7DGecS9OfMIhwhde`+_^m(u!-G7nC| zYnXZ4w?Cd_2CdS>?{CB%=9FIX=Qw1?oMF!*NK$JE{%V4?J@&bD%ldORHI literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-4/Test.cs b/Source/VisualStudio2002/Chapter02/Listing2-4/Test.cs new file mode 100644 index 0000000..6ed7d5b --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-4/Test.cs @@ -0,0 +1,32 @@ +class Test +{ + public static void Main() + { + Derived objDerived = new Derived(); + MyTest objMyTest = new MyTest(); + objDerived.DoSomething(objMyTest); + System.Console.ReadLine(); + } +} + +class MyTest {} + +class Base +{ + public virtual void DoSomething(MyTest MyParameter) + { + System.Console.WriteLine("Base:DoSomething(MyTest) called"); + } +} + +class Derived : Base +{ + public override void DoSomething(MyTest MyParameter) + { + System.Console.WriteLine("Derived:DoSomething(MyTest) called"); + } + public void DoSomething(object MyParameter) + { + System.Console.WriteLine("Derived:DoSomething(Object) called"); + } +} diff --git a/Source/VisualStudio2002/Chapter02/Listing2-4/obj/Debug/Listing2-4.exe.incr b/Source/VisualStudio2002/Chapter02/Listing2-4/obj/Debug/Listing2-4.exe.incr new file mode 100644 index 0000000000000000000000000000000000000000..d696965fdb83d5469df9b2dbb266fd9a7c7b5469 GIT binary patch literal 1180 zcmchW!EVz)5QhJ>P(-mi#k#QC~uS@uOVjVqVcST-C ze4v!aM$KMxA3whX#dH55>hBMVCde!7S3JhCZqIyq51tSHL%O_Ac$Q##aSs~bmd@8{ zW9P;}gC-dLU+iRbsPDU&((&F8ByRh7_-b~m_U6Sg?Yv9ToKH^D;_W zh21sZ^#UEt5nJSB)4@<9tq`f}0@0jm_wh~k^*CYW519e$53z|*bcTt|Ut<|&e3{XOPC_)@go27dzXfV-Byh843GeXA{R{1QN+=GoT9x7yO3^9>OLfp9B2tXDYQ#1rX@xG5!6B2o zxH|d=h+m6~_&10+I=HzC`g`7cV{I{@v589$oO{lF-}ijxJx}iAgMIN1LEX~F$cpqG znzGJDzpm+w%39Kj7Q(a2ij+}uIO9X%y(^VC3h$Xz_M~!WD&rt~bzWprO+^XZ;M0 z(F@4u)@j%@@&R1O(O9a-H1s06&(yPt?{J;1zedJJvk`b}>c`RFP$WI#ywTP1gQN=xcFC?kEj_&Z|FQPu<*C=%x6xZQWnseEhXUHLR|{zW + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.sln b/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.sln new file mode 100644 index 0000000..4c8d15d --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-5", "Listing2-5.vbproj", "{8D6E435F-6608-4BEE-90FF-7B7CC145399E}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Debug.ActiveCfg = Debug|.NET + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Debug.Build.0 = Debug|.NET + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Release.ActiveCfg = Release|.NET + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.suo b/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.suo new file mode 100644 index 0000000000000000000000000000000000000000..f88aa8ee79be509c3c59a46082f1bc09e75a1af6 GIT binary patch literal 7168 zcmeHLO>7%g5FRHfO+u6YKuamKETM%I5i9>`lTsyFJ5Y#|lB7+9a=@`Sj#I~L*-p}` z?E#4c;>HDq6GaFKQ4rz=NG%6WAfc86;(`#II2KNDA?Ewu?#7PsI-8$@fQ&WXx9`oq znKy6VH?w>D*4`iA{`k;OQbebvQkHWya!*0O4{frdJt7ro@P0X$%UPWwXl~QL$OC`C z)+&1sxz{_u)!?1r8t}c~TJSC~_nEv+{~ZsEh>2fTGzm%)*R)*1PJ5>Vh#1EkjH9yj z()D+4)PCWsgitSo3N$8R$;bs6lsK+gIfs7(Ryh3`OU(8Es8slNW0dhqJ6r{e1{mX{ zGtfj2BxDNz7iCmwUw}0cwALmK`l)v>M7`=KX1-}peMZhhXGj8a7OOTTrSxa93;pVT z(e{U%B~Jo{sn;Plxx)TJyk?s?&OLF?H*vse69c$a!~tSJ9k?FMaioA1x%<$*AG{xY z0Q>;hnd1=J4}l*B9|j)*KLXakkAfS(ls$^;F}wYQeP#bP-8~QdqH~8gPK=G+diqi( z8%}5=M#@ZQ)sd|VgtK8zTRRaN)J7vS#+;3ysT+?cqvm2JFHrUDSZI*X)$56PYRU|!quNM38DrPZXN;tg4ky_5NIs8p zZeo1C7pzOSOyVS)GLLgh?3hH~4A3nFR3oA_ODp;uoQnf(W9Vs;4)kuEHfw(#e*&;F z1Kf+jGTQ4634uR8;svpRQR-zSJkyRGwNAljG5n}?93IQUe>2J&N6P(5{3RX{!@TNe zo+4I}iuDt94cKr2`)0x$%!%c4P$Tqn52%}@CSBu?HI@otT#NMwk%JgLjG8zsNS4(u z^0=LUn9scGXRdVeU$OoHwdUxmNQSs8LI29yz3Qj#H|)SI)*r&!=df+0!rZ5YZ zrl+ue<}T(XuliXpjM>xC-`4p|V%HPG^(R#9S^0Pt?Fb}vwHK6J9TDBO|EZf~Ph0lF zTEVH60+=^~_@A?9E?o0jjPXR4i-cxdKXKTr{(X=gE&>kvFbTGB%vyU4yAXzDT7g$4 zQLC^vVy%(^Ps2J5H4Lk_dF4S3v6DqRiarx#ei=e-IR=zFkLS8@<u%of5Cxx6rQ@J{Rb^BnlykYp3aLDm zTKW2L+rf>Lh+axhhvmre(h@AT^~_sLw(sqEbAAKA+;5sESj3LLCMk+QJl1=->;E zHR~13cNytlhjlHmMTce0u$EW$Hleo#>to*u{B&5`gu7ZC-90t2QiUmPsWNV0f#ymXW{HLoEKAWre-S-meMW) z{9kwec@R^*XdjSaZ1F5GjacV~@uf9ey+<~H|BvC(kL*cxte$Vc8HJ$+GTr*D!27TI zX2W+eul_Hrzi|Gn6Nu-TL!7sPudlc7yL0oyA8a#SFU(~j>{LSS6Olix(0v{U$H|}~ zPpkJ!ksgGrAn>>D==zao7FEW{>m63rQ=wL7{L;2r*`2c0sHL{nwjMdX#WVV41Tez- zgfU|PM4asEM{es!uT?wuLxzx=_xq_Ww1!2XBA&>%^-Kp9VkZ{x-7o+r`5w&G5^_U*EtO zli#Gje6H{K((Lo^eRu8Uk>yX`S5;+c`BuokUV5kvL&r-Gbzq2JQC8Cnnn>>^Q%k{D z`PGwqxO2`Z>);fkhLyMV_Q#XVq*b2y{f)T8n$j!&@SF|V)1E_;q}DLv)c`y8Sm)BM z>d)KMumSup#6RadqZ1XQNa*wd&k?iIS{4w0xo(H@mbteYG32~|xl4H;adh+Q{V7Xw N;ug>3HvL~c@FxWas)hgn literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.vbproj new file mode 100644 index 0000000..39758dd --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-5/Listing2-5.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-5/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-5/Test.vb new file mode 100644 index 0000000..c32567b --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-5/Test.vb @@ -0,0 +1,33 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + Dim objDerived As New Derived() + objDerived.DoSomething(CLng(8)) + Console.ReadLine() + End Sub + +End Class + +Class Base + + Public Overridable Sub DoSomething(ByVal NewValue As Long) + Console.WriteLine("Base:DoSomething(Long) called") + End Sub + + Public Sub DoSomething(ByVal NewValue As Double) + Console.WriteLine("Base:DoSomething(Double) called") + End Sub +End Class + +Class Derived : Inherits Base + + Public Overloads Overrides Sub DoSomething(ByVal NewValue As Long) + Console.WriteLine("Derived:DoSomething(Long) called") + End Sub + + Public Overloads Sub DoSomething(ByVal NewValue As Integer) + Console.WriteLine("Derived:DoSomething(Integer) called") + End Sub +End Class diff --git a/Source/VisualStudio2002/Chapter02/Listing2-6/App.ico b/Source/VisualStudio2002/Chapter02/Listing2-6/App.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-6/AssemblyInfo.cs b/Source/VisualStudio2002/Chapter02/Listing2-6/AssemblyInfo.cs new file mode 100644 index 0000000..9f89a32 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-6/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.csproj b/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.csproj new file mode 100644 index 0000000..d3e03d5 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.csproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.csproj.user b/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.csproj.user new file mode 100644 index 0000000..c8340ea --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.csproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.sln b/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.sln new file mode 100644 index 0000000..41c076e --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Listing2-6", "Listing2-6.csproj", "{3A2336E2-DF01-47F4-97DC-F20E39391250}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Debug.ActiveCfg = Debug|.NET + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Debug.Build.0 = Debug|.NET + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Release.ActiveCfg = Release|.NET + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.suo b/Source/VisualStudio2002/Chapter02/Listing2-6/Listing2-6.suo new file mode 100644 index 0000000000000000000000000000000000000000..d339a74083c75f89207ba5bb43b8783f1d434e9f GIT binary patch literal 7168 zcmeHLO>7%g5FRHfO+u6YKuamKETM%2ktjcon*{R09S)|f@{F{gKNRNz}#o@HvNA*Fd_ziInktFQn+U1GIrWK9YDm`-e4S+ zr8k$BZ`6M6tAx-i3@Xr=L?kO0WKa^g=Hwjyby#8dXH7BJ|D#gj+l^7iEA4OaBJ&=?s{9lq$rTrqTiK4YOY0yu-dm-voKQZ$iYw9y{9y-GklCxN~A!(&Qhh6AX z_Y0Ok+$?z-C``RJxyd>Eop{YQah!W%pKs!T-6jTbtB3={fI4tJnBzzRt8x#Z{UCTh z_yG7Jusz2iv>yRK3O)=z0)7mvfgcAqfGK+v*JI!(t@}pn%CT*_J0AEg$Q|A|F*bGw zGnccuNKzZo(?%wzj%-yZl8bQK+KKR>HX5DL=hSUoC=p2-ajid=$Qc<5)Qsy>+JKRn zQ_s}~jk&au(o^O%b>oRt%vi`41gf4N3lH+S`d~7Vo-!htm^P9~#o4v&oJ#<0ecldkc{8cT&RuEqNMk%JgLjG6>2 zNR`!2tTgiv^O;xu%$0WjE7m`t)*QPdk|FL&(7(ENullL`Z7Xn#^@p+cIjoy?$hc*T zA#&{yjMMA5kpE&GQ|31hL7Xb%-m;#$PX0APsU5LOk z&Eb_v)GDlvSgT~g)38oM4a4efUU^VM?Bvjnq0hiriwvQ*90SUo$8*PV<u%of5CxwxrQ@L7s?sYF%K3a_ zg;bvWl9@%(jbGnixQ_dYYW7vg9^Vz|kX|Iv4*UWLFs9NF0<~4z(DEbD2Jqi3C(sHZ ztebJ)j?sR|pHSR}`%d&+ldC1uatnea3m|5w&q5}uQappckm8xBic@@29R?m+XNo6u z@CC=5^(yAO0{a87>^SW7qum7?X&>8M!2rerXm#NiP<^eq`eAh!>~Dqbe%$lvYw%H9 zdxyU>V7bftr5yg)?_wb=F$XS1Ex;f9JAqgHIf#igYcf_$NjTKTI1^{5;k>wVGc}ue zu#|QY;QzYw&%>DNW$SW36YGuYRZJU|hDO;`HJGaud9yzt;s~rK1 zus&hT=l~HryS5;=^`Y0So%nRlK|ZPahw={l)JSuQz<&|8e*C(ZxS59rp3S^UK6P z-@q7?-<2LBpk_1QywKaUIQ!xUKU{xxWaYCDRl!+Wz8&&!l^*KAP*drlP7FB@A8x(U zOPa{(O{6CKjIs_+BWhTAn{R(S$xK@1iQnIdJFF?a;?Gl%9kQl9ha^d@5yYzww(T*` zrCZfsu&H4K`0vC&`#Yl@6{AS#^a0Niv(j1?5P!LDn+le>x0*0yzkj()c^|QL^XmO6 YQ_}qUpiazsA64=bOFYxtbgz2gZ$@6L8~^|S literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-6/Test.cs b/Source/VisualStudio2002/Chapter02/Listing2-6/Test.cs new file mode 100644 index 0000000..f07f788 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-6/Test.cs @@ -0,0 +1,35 @@ +class Test +{ + public static void Main() + { + Derived objDerived = new Derived(); + objDerived.DoSomething((long) 8); + System.Console.ReadLine(); + } +} + +class Base +{ + public virtual void DoSomething(long NewValue) + { + System.Console.WriteLine("Base:DoSomething(Long) called"); + } + + public void DoSomething(double NewValue) + { + System.Console.WriteLine("Base:DoSomething(Double) called"); + } +} + +class Derived : Base +{ + override public void DoSomething(long NewValue) + { + System.Console.WriteLine("Derived:DoSomething(long) called"); + } + + public void DoSomething(int NewValue) + { + System.Console.WriteLine("Derived:DoSomething(Integer) called"); + } +} diff --git a/Source/VisualStudio2002/Chapter02/Listing2-6/obj/Debug/Listing2-6.exe.incr b/Source/VisualStudio2002/Chapter02/Listing2-6/obj/Debug/Listing2-6.exe.incr new file mode 100644 index 0000000000000000000000000000000000000000..145ffd4a7aa01e606be1707131d09bb79340870d GIT binary patch literal 1172 zcmcgrO-~b16g}lLmYu)gB_zZJGpP`2gjJaqQ-Ye<8eMe3OgjSu^Fd}FqPzYHe?d3= z32R6f3W*6T6L-dqD^~mg&wVWdiEJ?NCTH%O`|f-9ynD~olXm9Eexlt-t?q|WM^#OIJrp&fOTjf5FCv4piX>qW4Yf ztS5{)HN)n6sO#G@tdMoi%rW^z)N-Bt1M;?c*WBcgWYVJUY2~}*9{p07`|sRM=9QWa Ub6s3Y?kpXs&@z{?yt}b~05{Rd$N&HU literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-6/obj/Debug/Listing2-6.projdata b/Source/VisualStudio2002/Chapter02/Listing2-6/obj/Debug/Listing2-6.projdata new file mode 100644 index 0000000000000000000000000000000000000000..965f944d351d55d9edc84b1cf91488e24a213b45 GIT binary patch literal 2312 zcmeH}&1w`;5QR^hOdJL>M9{&A${;SHIEjqtA`C*J1O#~CK||OLeE5SBeTdN zPax<@a3?;18&_^!xbi9V4Fvs8b+-|TD~Ul!L3P!wTeqsty?v|u#rRnHkf34dSz<-{ z4%MtPQPVwLQ&;Qis~yiC7OAAnxn!pp59N|TP(`y^P>(gzZ6Zvw>JD)>m1+sAqdvxC zBjTpIs3x|XT4hb2=eizYY3K^pdHijiWMz+d&N!y)SW`ToAeSR!;U_)#%ZxMRaqS%~ zYE4gdgL+n|zNnx?zVq-)czZ-TgZyHhi4%p+M!3=~xQyOJhX3JghZzQKmkaGc9_+w= z?ZAM;~V8-D!N6Na6gc$KlKTnV?0EENFu7MuA!X{FCI{f8@$O4?yx@P z4qw$M(dOwoZJ^ldsC7o}ZT6_sjk;m&qx-(6$bP=Uy=sGQuu2zNh#uvxI2ln}n%Xs+ z?aRbjB7274l^&tev&brZ0S-zs{KjqkA8q^%|IuIYw{=(dV;4$lB+03&UV*sCWu*Tf z{x?8&S2g~X9RG3pd^f%v9Zt$;k$oG)S?@kGp-ZtZ!`_$5pS>>cc#Zm0%yXPf3whGn zA=^f + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.sln b/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.sln new file mode 100644 index 0000000..1a557d4 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-7", "Listing2-7.vbproj", "{D582898F-DD17-42D9-A004-E22CF2E2CEB2}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Debug.ActiveCfg = Debug|.NET + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Debug.Build.0 = Debug|.NET + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Release.ActiveCfg = Release|.NET + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.suo b/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.suo new file mode 100644 index 0000000000000000000000000000000000000000..d415f710db36f04b36c55fdb2d28e9c5f7911e4c GIT binary patch literal 7168 zcmeHLO>7%g5FRHfO+u6YKuamKETM&fu$5nuCZ$TUPM{DcB}tora&hd9A#p66;6lvzz1@u+<8?Ma1p%4W?7n?F z`)1y}dEdgq8MAhY&H2HyB6d zNW1=eaJlviUnPWk7*wD!2}?#U$e_e=&B{5P4OrpyXDl(-^Kq&0?Zs2ZEA4O+~f-T3-Ow5;yBmD+26zgr%eptQV|D;0d?SdFrOm@tjgVm_TAuv z;6vbhz|I&)(7q3RKlmv482ACO27VCS0H*A5Tu<2TN9-&6cj)$c;1``Mym?}5?A6nk zGTCrK8!=L5I;*y9RWO_lbJ*I6(4aONnK9Qb08#T9dS(&%wDk&^Cr1zjUB?^R!j_^Y{~l zl^Nh(43^PeZ%7FI@ewbG4UAGRGvS_g~Ilq(1%H|g=5y-V_1bSEYk|S zGKpG+wGnHT40syWX{cdXz0E5RYKWaI+EMhGcovW$)RtpFx$}6BXvep+3iV$8n=}$r z5}3&}bWg%kBJ||yy~sanhh^R7vjDNLn6}baJl5^J-z5q@qe{nN`KrpOL@4KSjTPcM z^^=2A^4ZVV7q8-eqMCgbvd?!J(Ah4XNTHo_5cEHq^6V#^;yV7RElTN=TkfrRdI?>sLjAlTbSYr9sIzt zM!kaZE-P!AU~xOF>VTDgb)}7d^fqG#?CZp#ODkHO3Fo6@W_)hV>?CF&(%jP8*8aqX zm#Q58INxGHOfd^CMFHTC^Pj*g{v5_YnmrgRrUV@7V4Q`s({Nr)xtW@+JXlJ*2=ITy z`R85?^@6=YhOxx6z%*i=8^)K`Z1o=71pYsSS3k4|)iHa10cRA38pw1TvjX40>Yok2 z#k~5zu>QjSvvwffXAa=^8R_fy+78@W{@{D-&i%|>7Q#v;)H)IQ!wTK!v2mOXD)OWn zTcjHsQ4sjsw{-)^Gm9$YZwpGGk$5?tn5zNYSdEOYg@OR-sTYlG6EQ3eZrVA z03uFy4IsDmq1URN`yfL|&HMe-wp)^~+`L=CDy0`d%00aR`*m2&FE@IhRdIgIZrphx z#%%r2=y%Jv_Jm$LvGjSx+XsL5@x_~;{yOnW!zcakcYPCC`t9OTm1g*7;;&y|jLBEi zUp~|O=+f-7?|ggprID47-&Iv*Y55k&KVSM$tNWu4JbDAXmY&l@dbXHa3jWHk9o)m6 zvqxD6rw}!)ysfW4?qnvd^2Gmd#2wa@Uh#+fY{(w=9Fioph7qp@*s;gjmu^*m-lm34 z;C~_hIsX}*s2D{;rw_P~n3dMEfcVRKJCwJ~z14_EtCfwrnCB;sZeBgVWD8E*;GW!} I|EmZ71jaF|>Hq)$ literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.vbproj new file mode 100644 index 0000000..0f69392 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-7/Listing2-7.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-7/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-7/Test.vb new file mode 100644 index 0000000..b625010 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-7/Test.vb @@ -0,0 +1,14 @@ +Option Strict On + +Class Base + Overridable Sub DoSomething() + 'The method definition goes here + End Sub +End Class + +Class Derived : Inherits Base + Sub DoSomething() + 'This method will actually shadow its base method rather than Override it, + 'because the developer forgot to add the Overrides keyword + End Sub +End Class diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-8/AssemblyInfo.vb new file mode 100644 index 0000000..5b7ce5a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-8/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.sln b/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.sln new file mode 100644 index 0000000..95b3330 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-8", "Listing2-8.vbproj", "{56218072-CB2B-49E2-B000-3180711BBC10}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {56218072-CB2B-49E2-B000-3180711BBC10}.Debug.ActiveCfg = Debug|.NET + {56218072-CB2B-49E2-B000-3180711BBC10}.Debug.Build.0 = Debug|.NET + {56218072-CB2B-49E2-B000-3180711BBC10}.Release.ActiveCfg = Release|.NET + {56218072-CB2B-49E2-B000-3180711BBC10}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.suo b/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.suo new file mode 100644 index 0000000000000000000000000000000000000000..ac269f6210166ef9d5a6e25e89f9717ab391e214 GIT binary patch literal 7168 zcmeHLO>7%Q6n=J6nuI3(ftFHeSwagbB9ZgcHYBAYS*K8llai!OK)E>f#&PO+E!#<2 zwUt2P0G!~0!ijP~Li`-K@gu^46O~YVskk5n5)u-Z!U-7JjZgpNs#tmNwDuA+7y>SRURMEt1meI=L6S&bs7ZqOaH z0)NBST6+(<*PFm~;LYHA@ZI1B@D?!lnY=;&pA{Gp6Hit&8IUB(w4B3Ed#7FS7-uz# zv7+1vZw9XYw%qWIuLhkj)2TpX5|)gdkwJ;0%*rYJ8nD7?&sbuvzx&1SBM#ADX@{#| zNe6wLbOM^V0tuPI?^zjD+81C=1hv&kgMOZwtzfVEiJ9-%L!Xe-&>51ToW!h6Nh$qV z>_WeKU$oc57Qd-@9Qt{Fc|N`BFUD)uxqjRe=X`S?ojNgqTSXk8jz(}3nEeO=dAWN~ zzZbj{ybF9E*coFF>JNY)1n&j!13v`Tzz>6)!Ia&P@&Ncz`@O|3*|$NrX9a%Oxx>{H zePgShK9|Xc6WWN8GSgXgWNU-rY?#9~OoRrt(a4N3r(PR_@o>V7X#>%C)=X2Ne%zSS zj+^N@^<9H*&ZW$xk+g4|u1$_%HY+DJSZW7FnmjHHnc zCs_ALK96#4V*LJTur56^iIZ%~JkBk#V-jsMK(`c7jffVI4zxKq7YEwL(9$a1Xsw=Z z)&2th1YuTz3JZpy~8EILH|vHEgZAv9>Xq# zVVPF6DwD`nm>V%y$$+O}orWBS+1tEYK@Gl>MLmi(6MbzmgxqorD0dp)9YM*jvkLWI z{g*TnQxcfTG;~kGQX=$Z{$1q1wZpQm`Y6Est(0!1t#qv0`MyaMd`6Xy-Ez6ss6k4R z%eDBW=IAdDO37EhzQ1@0?-O-w^UF5hc{wD95kT7!Km%|qhEg3#a|gIpy5vbX9ozcR z%coU3^Rn%z_2bb|2IQh#C>xgBWC5WmrCfa$G7%Nx>GXvV&p=fg;uGpH@X!{ActQs+ zIM%2aFy49Cr$c``W};&Tw2>uSThZDMa9~?E9v#-V;w>P3U>&n#Ki@gii&(w(j?S(_ zhu6GSmGH;8iv=;oEVvxC0e_r3f>-?8je#_KFlI~%EU1HV7S2v%@nUM3so9Ey<+O_c z|MS@ERsa1M>LvSt3}cIDfoa4#H;gZ@*=pTah5kqI>1BIR9kb^RIHNGsK%`rn6}bNj z;|cF#Uguw&f8qRDClKHBPR6?$>AR1*c3fZnKXdNH5$~;P~rzblVVT7FEP4=p9zsQ?XV?{PMP0(Ven&>fX7Yw)M)fb)W4BV1)Sz zeZ~NYIMKBYv8^AiR_@#n8A57d-H)!jC56n*yA`}G_5nzFrWatp4y$={d{qZC-XjLZu|3=(lPU#hY9)s+VJ?tq2NoozlUk$Khk998Hvi^ci z%~j;T#rWs^&**r?C;~dyfai!&X*COoznr&21_c*#)dj7~3wElfi TCuXgmD*1^kJkuL=r>?+1Eb^;s literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.vbproj new file mode 100644 index 0000000..f318073 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.vbproj.user new file mode 100644 index 0000000..447fdc6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-8/Listing2-8.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-8/Test.vb new file mode 100644 index 0000000..234fa28 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-8/Test.vb @@ -0,0 +1,59 @@ +Option Strict On + +Module CatTester + + Sub Main() + + 'NormalCat + Dim objNormalCat As New Cat() + With objNormalCat + Console.WriteLine("NormalCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'LameCat + Dim objLameCat As New LameCat() + With objLameCat + Console.WriteLine("LameCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'UglyCat + Dim objUglyCat As New Cat() + objUglyCat = New LameCat() + With objUglyCat + Console.WriteLine("UglyCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + Console.ReadLine() + End Sub + +End Module + +Class Cat + + Overridable Function Feet() As Int16 + Return 4 + End Function + + Overridable Function Legs() As Int16 + Return Me.Feet + End Function + +End Class + +Class LameCat : Inherits Cat + + Overrides Function Feet() As Int16 + Return 3 + End Function + + Overrides Function Legs() As Int16 + Return Me.Feet + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/AssemblyInfo.vb new file mode 100644 index 0000000..58b4bee --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln new file mode 100644 index 0000000..86cfd7a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-8Shadows", "Listing2-8Shadows.vbproj", "{BB663C40-7108-4457-8984-E194358B1817}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB663C40-7108-4457-8984-E194358B1817}.Debug.ActiveCfg = Debug|.NET + {BB663C40-7108-4457-8984-E194358B1817}.Debug.Build.0 = Debug|.NET + {BB663C40-7108-4457-8984-E194358B1817}.Release.ActiveCfg = Release|.NET + {BB663C40-7108-4457-8984-E194358B1817}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.suo b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.suo new file mode 100644 index 0000000000000000000000000000000000000000..9b548506ae0eef46c1182c40c757d2858a5250f8 GIT binary patch literal 7168 zcmeHLO>7%g5FRHfZ9L#U9vUZ^mw-uq^ruU*~t^9P^r{zY7LSn6f5*eLguwfj&eE7~ejhXU)1#bVKF6hU#F?jjHT z4O<)RHRM`v0B-_s1UG{31vh~=gSpP+b^8B!U|3B23Zh9^GI;0YELPe(?Zl38yup1` zi?+V^O8b?juYL6pdX<|BG%7L4%V`;s6y60niKhW8oc6pWR`uB?b-pd=<$k3dRRvug z+~cI9&_oZUWdhGLGNQE4!J0TqE0YHO)VmF$UiA|*-?fK6Dlb82L_%@`voH9JNjGP*X2!@^!!(bjG6{1&UlM3|ZZtB)?^^V9Dm!7uatUoXl}WN`nu zdnBJnxoTqk{uo%7K8fNan=*@YOYDfEZ3^g?1*#Fzx}^tg4$h^3wn?;fN)TUBE`e`( z+N0G}Rcyaq`%Cx}f|YsTUJ{nkUT;VU{P7Vlhz;DK6^(Q?@;p0D)H(s5CGn%yF?gZ? z|4k`t9I5JW;xF-t80J+!;}o%qP1fw-}>?NL*{~<_Yju5WDbEUt2X{LzKE-U&m&L@ z_zYX_fS*=JgGaa&@bj*KPgvpQ$I@{gqn|@+pkpq6*s8-u&W>-kcB0jfz{R#8emZ8< ziCVV|fOX7~{j3L2z5vhqd#q<~VA)dE!XM`@7Q&*~Fsy~RvQ}zKljzygYrV;C^VSJ@AoVLBI z!2iea@gMd8I%dxsa9&}kfei50tib(O{b$3wnAiE2=U+H~)(OP-j7!YpNZ)-D*nZ>k zXFplB>Q8BWTCLo95Hf_+lHU)lxh18{ z&AS!MQU(B>JkxWqUx(GaxzYQ~ic4emqvnN}x3nA^`SJ3N&5^g-7p~O3zvC|-KfLzk z@8fT@UJ8HO_kDcf&og^enBhMY%Wq)ZlW*p}d46Eu!t@It{c!QM;l(dL_R*fo@&KYGMoW-tT=55{nc#;{I zY7_r|BknM#^ol=EK-S52P9iK)EAPJs*s;etm$hzQmR+r@!2fdmbN**^7KL|l`he$% zQE4R$h`*e-L$$qS_3p#Vxqo?)UrEN%&G$;O?*1TV=>GRXogcSgmHPNqp6PYETRrd( DOGv&M literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj new file mode 100644 index 0000000..83b139e --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Test.vb new file mode 100644 index 0000000..24757cc --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-8Shadows/Test.vb @@ -0,0 +1,59 @@ +Option Strict On + +Module CatTester + + Sub Main() + + 'NormalCat + Dim objNormalCat As New Cat() + With objNormalCat + Console.WriteLine("NormalCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'LameCat + Dim objLameCat As New LameCat() + With objLameCat + Console.WriteLine("LameCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'UglyCat + Dim objUglyCat As New Cat() + objUglyCat = New LameCat() + With objUglyCat + Console.WriteLine("UglyCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + Console.ReadLine() + End Sub + +End Module + +Class Cat + + Overridable Function Feet() As Int16 + Return 4 + End Function + + Overridable Function Legs() As Int16 + Return Me.Feet + End Function + +End Class + +Class LameCat : Inherits Cat + + Shadows Function Feet() As Int16 + Return 3 + End Function + + Overrides Function Legs() As Int16 + Return Me.Feet + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter02/Listing2-9/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter02/Listing2-9/AssemblyInfo.vb new file mode 100644 index 0000000..73c3d1a --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-9/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.sln b/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.sln new file mode 100644 index 0000000..35d2b2d --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-9", "Listing2-9.vbproj", "{BDC11796-30AC-4600-9B6C-7446DD16279D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Debug.ActiveCfg = Debug|.NET + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Debug.Build.0 = Debug|.NET + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Release.ActiveCfg = Release|.NET + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.suo b/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.suo new file mode 100644 index 0000000000000000000000000000000000000000..e81ec59ae3bda7f1fec59e0ab1f58aa1993649e1 GIT binary patch literal 7168 zcmeHMO>7%Q6n;)pnuI3(ftFHeSwaeFMWXz*Nt04Fu~R6-NlDTspj;e#<2c=TE!#<2 zwLKtl0B&4RdZIlbA$}ydQ6yR60YNw4BFI`=?#-7{?m) zqf)f(@<+yv>MsK281y-v3N#`S$;eshmjueJoW{2fEu8j@HO%w7UdjSn(Mx}&9-ae> zI_Tr1laNFU7&3wHb26-?&q13gYRi)b`INgIL;cDpW?r_ZJ}GA)Gb|xFg;kr9Qu4Fd zgBE%5}(VTw!}5Ub9Xd=bkv{n>gUqi2>Xy;s7zA23!kfKSIFLxCc;w z5WEw-3;Yn+nPU&?kANQq?*;DzKL*yokAv&L99xfaKln-TQ+C?{yJY_ct-l3+4RVK9 zPxOtg!Swk|HezT)ddf^^)sd|TMY0i2TRj%;*M_50`iy$42_+(i8Q1z^iL9CCfT~e_ zLOWrmXViPuL31W$CiSE>P0eT`88hcI`2iKrjfDI8UTx4wq$bQrI;IUJl5sX|epXNF z>4?F)PYU=P=QWJ)9|s4eOU7}MO_{~HC3cLXZ3^g?0;&&Eoh_>L@Ihh5e?KHqI#T zlK4wJB8K^u&p1V_A{EOg>gv$pEcVTWH5e01#h?br=N?ctNlm)U7jrD-!YGU7_aO$+ zd+0R@Xpk%^omgqbAI3Ak@);|g_*X3dgj#d#4o}8#PlEiVwfmJ%*>Bm7TP#0}wa;MP z%tJ4We#S1wCBO2SFO1mJ(caeiOk&p!;rb2bdsaN2Mm>rVLA4hgd8bEo z+4iSwl09w7g1Lf|D}^v`6#hSB&s@0XQ|RM~EaeH!wtV8SU->&QcCZLIXu~Af!ZB;@ zaqL0_nrQ`A8AqV@k$u`Km%M zhb!lD4P{b(^cNzPqR)PQXZ{MF$12%YCffoRkRXTPt}XaXGHm;}#9K@=)Za%l8ehD^e zX>Dsibl5hR|DqKBICrrSmY4;*Q4{dT`JKQo{_Ms?nmrjaCIbd_FwVl+Nf`}&7JEH!vk7|X)gDMRfOkw2o)eHI7D ziJ&6SsQaZzH{4a=`0ICcn-FK_Rm9259aPyDUt?-h@UPHH#mm@DV!{U9D+~M$seQ9n literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.vbproj b/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.vbproj new file mode 100644 index 0000000..488767e --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.vbproj.user b/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.vbproj.user new file mode 100644 index 0000000..447fdc6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-9/Listing2-9.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter02/Listing2-9/Test.vb b/Source/VisualStudio2002/Chapter02/Listing2-9/Test.vb new file mode 100644 index 0000000..a0489ac --- /dev/null +++ b/Source/VisualStudio2002/Chapter02/Listing2-9/Test.vb @@ -0,0 +1,66 @@ +Option Strict On + +Module CatTester + + Sub Main() + + 'NormalCat + Dim objNormalCat As New Cat() + With objNormalCat + Console.WriteLine("NormalCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'LameCat + Dim objLameCat As New LameCat() + With objLameCat + Console.WriteLine("LameCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine("Equal of a cat? " + .Equals(New Cat()).ToString) + Console.WriteLine() + End With + + 'UglyCat + Dim objUglyCat As New Cat() + objUglyCat = New LameCat() + With objUglyCat + Console.WriteLine("UglyCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine("Equal of a cat? " + .Equals(New Cat()).ToString) + Console.WriteLine() + End With + + Console.ReadLine() + End Sub + +End Module + +Class Cat + + Overridable Function Feet() As Int16 + Return 4 + End Function + + Overridable Function Legs() As Int16 + Return Me.Feet + End Function + +End Class + +Class LameCat : Inherits Cat + + Overrides Function Feet() As Int16 + Return 3 + End Function + + Overrides Function Legs() As Int16 + Return Me.Feet + End Function + + 'This overload doesn't work for a subtle reason + Overloads Function Equals(ByVal AnyCat As Cat) As Boolean + Return True + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter04/SortingSpeed/AssemblyInfo.vb new file mode 100644 index 0000000..e68a407 --- /dev/null +++ b/Source/VisualStudio2002/Chapter04/SortingSpeed/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemo.sln b/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemo.sln new file mode 100644 index 0000000..b71c4dc --- /dev/null +++ b/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemo.sln @@ -0,0 +1,33 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoLogic", "SortingDll\DebugDemoLogic.vbproj", "{057FA2D6-5280-4393-BE33-C6631BA07451}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoForm", "DebugDemoForm.vbproj", "{1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + ConfigName.2 = ReleaseCustom + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.0 = {057FA2D6-5280-4393-BE33-C6631BA07451} + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.ActiveCfg = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.Build.0 = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.ActiveCfg = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.Build.0 = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.ActiveCfg = ReleaseCustom|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.Build.0 = ReleaseCustom|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.ActiveCfg = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.Build.0 = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.Build.0 = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemo.suo b/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemo.suo new file mode 100644 index 0000000000000000000000000000000000000000..f1ee9bc65d8b4fe4dac0c67dc08526ad6a655b4b GIT binary patch literal 12800 zcmeI2Pi)*r701VpLz9rCB&DU4rd@*Dx=n0scjGt-Ew$G+Q0ykyZWAF()b_3&C%ay2 zck@p%5=aD4Pn=LVAlgF#@#j#fhZcz<0S7?PMo5SYLcj$i4h3-lfr$BhXMVH4-SzHz zz5c}z;aR<%`OVC4-kUe?-@M%$Z|(ctORwDbds9)KG~3M0m7V4tCH*b51-87)m{uBs zn=30TuG1KrTje(5z`vojjl+8nupQ8O-vR6Zb^$wq{lGhc-M}7TFK{P-2$+3<&Rp4r5n|T2a zPItR_)}wgX4M=aj4UqoJ4tV|7nDk$@;CRq}FZE-<;ow>JJ?<}*H?E5(+Gak&)ihlhiW@_~*){tCF zR#miaWl^6%^u7r=oI}t!3ndxWkp;|~7+4osGX^~=dOWr~SO)0NSnSSTX}u_lXj%ju zO{d^N7XIa+Bm*5IU`#`cC>WzXYsd478aggM$QT&RbCIJ=kTl$e>*V2ga zq@4_$V{Dcg340cr>15QsZO|IWf8kc~{q<_aZf(U0n;~)XscHB+$6lu3r8Io1_$)cx z9LcXvhwGI-G*@JID$7RtD%V=;c?vCV)`nHSSt|3VST&Ch$o|!`1l`D=Jc#0jM&(cX z^5=j-_3-;xa0tyP0M$wt_@&QQ_#2de-C5d$#bjsXhx{I$p3Sl2d24@!+3mg>cEvmE z*FVLI7Xt-6N%VORn=V^lOUJ8YcD)ZYf&VUE{X($lc4NcGqj`KgGqOK*gW2{NNI_h`;iNP7>tr>KE`Aaf^of zv)!oT&{u{32phVRSpq7keiHQfJg{Hr^0qw=TJ$5(NJ))j?*se9$2CTBkpVkCto< zSbr_q=tm9)t!%^@@1fOC?*P&hr@x1j*6cwfs1eyvM4;PDx%`ydaGlr=n^OuxmPlwj zVY5h4uGnSDWwLR;yVH-7@6DXPBAEefwc_QAR;T8$<&OK?slzpui}PBfyY?tBZ|yv} znfuG8>LpDX0dlmA`P+@}{q@Wj557M9o#Vfnz5e&h2M9bV>y<5keqr{=t@FtZ#DadU z@+dKh-ALPPi^E{b?1(&@;t}y6i`_eEy}tZ_%T+0N>SF`NDt>L3QDe}SO1%kry_OUy z!z8gYGf;anq!qrO)2W64Q0{)b>qj;5<2at}B4tzYT&KaM1E*`#3j zbGH&V>+{V%a+|X0A5oRz3X%q&;tP%5sz{=!PtPMfVz&MDg|_tPK|rPQcN5p^zWtbd zP6z*viJ3z{HxfgVtQeuuc}z8b0NgJss}C>yZ^i$f zFwEHFuOG}QU#a{2>LOn)jtW$KeTsJFzg|*gkDe&r>%;%cLp>>vW^c^X!JBKF_0n3i={Wj{vJJQkU&3&l~w@ tY;`m)%UE8tay2`s-!3(#ThjAD6qxJTWbHP(9d6vxmc}ky?f*Xx{0EKiig5q{ literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemoForm.vbproj b/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemoForm.vbproj new file mode 100644 index 0000000..1eff798 --- /dev/null +++ b/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemoForm.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemoForm.vbproj.user b/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemoForm.vbproj.user new file mode 100644 index 0000000..7d7a099 --- /dev/null +++ b/Source/VisualStudio2002/Chapter04/SortingSpeed/DebugDemoForm.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/DemoForm.resx b/Source/VisualStudio2002/Chapter04/SortingSpeed/DemoForm.resx new file mode 100644 index 0000000..363456d --- /dev/null +++ b/Source/VisualStudio2002/Chapter04/SortingSpeed/DemoForm.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + Assembly + + + True + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + DebugDemo + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/DemoForm.vb b/Source/VisualStudio2002/Chapter04/SortingSpeed/DemoForm.vb new file mode 100644 index 0000000..cf4ee1a --- /dev/null +++ b/Source/VisualStudio2002/Chapter04/SortingSpeed/DemoForm.vb @@ -0,0 +1,207 @@ +Public Class DebugDemo + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents lblTwo As System.Windows.Forms.Label + Friend WithEvents lblOne As System.Windows.Forms.Label + Friend WithEvents boxSort As System.Windows.Forms.GroupBox + Friend WithEvents Timing As System.Windows.Forms.Label + Friend WithEvents StartSort As System.Windows.Forms.Button + Friend WithEvents MaxValue As System.Windows.Forms.TextBox + Friend WithEvents NumberItems As System.Windows.Forms.TextBox + Friend WithEvents SortCounting As System.Windows.Forms.RadioButton + Friend WithEvents SortQuick As System.Windows.Forms.RadioButton + Friend WithEvents SortSelection As System.Windows.Forms.RadioButton + Friend WithEvents SortBubble As System.Windows.Forms.RadioButton + Private Sub InitializeComponent() + Me.lblTwo = New System.Windows.Forms.Label() + Me.lblOne = New System.Windows.Forms.Label() + Me.StartSort = New System.Windows.Forms.Button() + Me.MaxValue = New System.Windows.Forms.TextBox() + Me.NumberItems = New System.Windows.Forms.TextBox() + Me.boxSort = New System.Windows.Forms.GroupBox() + Me.SortCounting = New System.Windows.Forms.RadioButton() + Me.SortQuick = New System.Windows.Forms.RadioButton() + Me.SortSelection = New System.Windows.Forms.RadioButton() + Me.SortBubble = New System.Windows.Forms.RadioButton() + Me.Timing = New System.Windows.Forms.Label() + Me.boxSort.SuspendLayout() + Me.SuspendLayout() + ' + 'lblTwo + ' + Me.lblTwo.Location = New System.Drawing.Point(32, 96) + Me.lblTwo.Name = "lblTwo" + Me.lblTwo.Size = New System.Drawing.Size(112, 30) + Me.lblTwo.TabIndex = 14 + Me.lblTwo.Text = "Max item value" + ' + 'lblOne + ' + Me.lblOne.Location = New System.Drawing.Point(32, 40) + Me.lblOne.Name = "lblOne" + Me.lblOne.Size = New System.Drawing.Size(112, 30) + Me.lblOne.TabIndex = 12 + Me.lblOne.Text = "Number of items" + ' + 'StartSort + ' + Me.StartSort.Location = New System.Drawing.Point(280, 285) + Me.StartSort.Name = "StartSort" + Me.StartSort.Size = New System.Drawing.Size(92, 39) + Me.StartSort.TabIndex = 10 + Me.StartSort.Text = "Start sort" + ' + 'MaxValue + ' + Me.MaxValue.Location = New System.Drawing.Point(160, 96) + Me.MaxValue.Name = "MaxValue" + Me.MaxValue.Size = New System.Drawing.Size(72, 22) + Me.MaxValue.TabIndex = 13 + Me.MaxValue.Text = "10000" + ' + 'NumberItems + ' + Me.NumberItems.Location = New System.Drawing.Point(160, 40) + Me.NumberItems.Name = "NumberItems" + Me.NumberItems.Size = New System.Drawing.Size(72, 22) + Me.NumberItems.TabIndex = 11 + Me.NumberItems.Text = "1000" + ' + 'boxSort + ' + Me.boxSort.Controls.AddRange(New System.Windows.Forms.Control() {Me.SortCounting, Me.SortQuick, Me.SortSelection, Me.SortBubble}) + Me.boxSort.Location = New System.Drawing.Point(280, 16) + Me.boxSort.Name = "boxSort" + Me.boxSort.Size = New System.Drawing.Size(232, 247) + Me.boxSort.TabIndex = 9 + Me.boxSort.TabStop = False + Me.boxSort.Text = "Sort algorithm" + ' + 'SortCounting + ' + Me.SortCounting.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.SortCounting.Location = New System.Drawing.Point(41, 178) + Me.SortCounting.Name = "SortCounting" + Me.SortCounting.Size = New System.Drawing.Size(164, 29) + Me.SortCounting.TabIndex = 3 + Me.SortCounting.Text = "Counting sort" + ' + 'SortQuick + ' + Me.SortQuick.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.SortQuick.Location = New System.Drawing.Point(41, 128) + Me.SortQuick.Name = "SortQuick" + Me.SortQuick.Size = New System.Drawing.Size(164, 30) + Me.SortQuick.TabIndex = 2 + Me.SortQuick.Text = "Quick sort" + ' + 'SortSelection + ' + Me.SortSelection.Location = New System.Drawing.Point(41, 79) + Me.SortSelection.Name = "SortSelection" + Me.SortSelection.Size = New System.Drawing.Size(164, 30) + Me.SortSelection.TabIndex = 1 + Me.SortSelection.Text = "Selection sort" + ' + 'SortBubble + ' + Me.SortBubble.Checked = True + Me.SortBubble.Location = New System.Drawing.Point(41, 30) + Me.SortBubble.Name = "SortBubble" + Me.SortBubble.Size = New System.Drawing.Size(164, 29) + Me.SortBubble.TabIndex = 0 + Me.SortBubble.TabStop = True + Me.SortBubble.Text = "Bubble sort" + ' + 'Timing + ' + Me.Timing.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.Timing.Location = New System.Drawing.Point(400, 288) + Me.Timing.Name = "Timing" + Me.Timing.Size = New System.Drawing.Size(112, 32) + Me.Timing.TabIndex = 15 + ' + 'DebugDemo + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(544, 348) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Timing, Me.lblTwo, Me.lblOne, Me.StartSort, Me.MaxValue, Me.NumberItems, Me.boxSort}) + Me.Name = "DebugDemo" + Me.Text = "Debug demo" + Me.boxSort.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private m_SortType As DemoSort.SortType = DemoSort.SortType.BubbleSort + + Private Sub StartSort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartSort.Click + Dim SortObject As New DemoSort() + + 'Show that we're busy + Cursor.Current = Cursors.WaitCursor + Me.StartSort.Enabled = False + + 'Build a list to sort + Me.Timing.Text = "Building list to sort..." + Me.Timing.Refresh() + SortObject.ListBuild(Convert.ToInt32(Me.NumberItems.Text), 1, Convert.ToInt32(Me.MaxValue.Text)) + + 'Do the sort and report timing + Me.Timing.Text = "Performing sort..." + Me.Timing.Refresh() + Me.Timing.Text = SortObject.DoSort(m_SortType).ToString & " seconds" + + 'Show that we've finished + Me.StartSort.Enabled = True + Cursor.Current = Cursors.Default + + End Sub + + Private Sub SortBubble_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortBubble.CheckedChanged + m_SortType = DemoSort.SortType.BubbleSort + End Sub + + Private Sub SortSelection_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortSelection.CheckedChanged + m_SortType = DemoSort.SortType.SelectionSort + End Sub + + Private Sub SortQuick_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortQuick.CheckedChanged + m_SortType = DemoSort.SortType.QuickSort + End Sub + + Private Sub SortCounting_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortCounting.CheckedChanged + m_SortType = DemoSort.SortType.CountingSort + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/AssemblyInfo.vb new file mode 100644 index 0000000..240f036 --- /dev/null +++ b/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/AssemblyInfo.vb @@ -0,0 +1,30 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj b/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj new file mode 100644 index 0000000..498d34a --- /dev/null +++ b/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj.user b/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj.user new file mode 100644 index 0000000..ff746ab --- /dev/null +++ b/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj.user @@ -0,0 +1,64 @@ + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DemoSort.vb b/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DemoSort.vb new file mode 100644 index 0000000..13cc2f8 --- /dev/null +++ b/Source/VisualStudio2002/Chapter04/SortingSpeed/SortingDll/DemoSort.vb @@ -0,0 +1,265 @@ +Option Strict On + +Public Class DemoSort + + 'These are the sorting lists + Private ListUnsorted() As Int32 + Private ListBeingSorted() As Int32 + 'These are max and minimum sort settings + Private ListLengthMin As Int32 + Private ListLengthMax As Int32 + Private ListValueMin As Int32 + Private ListValueMax As Int32 + + Public Enum SortType As Integer + BubbleSort = 1 + SelectionSort = 2 + QuickSort = 3 + CountingSort = 4 + End Enum + + Public Sub ListBuild(ByVal ListLength As Int32, ByVal ValueMin As Int32, ByVal ValueMax As Int32) + Dim ArrayItem As Int32, objRandom As New System.Random(1) + + 'If parameters haven't changed, just use previous list + 'This enables multiple timing checks on an identical array + If ListLength = ListLengthMax And ValueMin = ListValueMin And ValueMax = ListValueMax Then + Exit Sub + End If + + 'Build a new list with given parameters + ReDim ListUnsorted(ListLength) + For ArrayItem = 1 To ListLength + ListUnsorted(ArrayItem) = objRandom.Next(ValueMin, ValueMax) + Next ArrayItem + + 'Set length of sorted list to match + ReDim ListBeingSorted(ListLength) + + 'Store min and max list items and values + ListLengthMin = 1 + ListLengthMax = ListLength + ListValueMin = ValueMin + ListValueMax = ValueMax + + End Sub + + Public Function DoSort(ByVal Sort As SortType) As Double + Dim TimeStart As Int32, TimeFinish As Int32, ArrayItem As Int32 + + 'Copy to array that will contain newly-sorted list + For ArrayItem = ListLengthMin To ListLengthMax + ListBeingSorted(ArrayItem) = ListUnsorted(ArrayItem) + Next + + 'Start the clock so we can report how long the sorting took + TimeStart = System.Environment.TickCount() + + 'Do the sort + Select Case Sort + Case SortType.BubbleSort + SortBubble(ListLengthMin, ListLengthMax) + Case SortType.QuickSort + SortQuick(ListLengthMin, ListLengthMax) + Case SortType.SelectionSort + SortSelection() + Case SortType.CountingSort + SortCounting() + Case Else + Trace.Fail(CStr(Sort) & " is an invalid sort type") + End Select + + 'Stop the clock and report how long the sorting took + TimeFinish = System.Environment.TickCount() + 'Check sort + SortCheck() + 'Convert elapsed time into seconds + Return (TimeFinish - TimeStart) / 1000 + + End Function + + Private Sub SortBubble(ByVal ItemLow As Int32, ByVal ItemHigh As Int32) + Dim intLastSwap As Int32, intLoop1 As Int32, intLoop2 As Int32 + Dim intDrop As Int32 + + 'Repeat until we are done + Do While ItemLow < ItemHigh + + 'First bubble upwards + intLastSwap = ItemLow - 1 + intLoop1 = ItemLow + 1 + + Do While intLoop1 <= ItemHigh + 'Find a bubble + If ListBeingSorted(intLoop1 - 1) > ListBeingSorted(intLoop1) Then + 'See where to drop the bubble + intDrop = ListBeingSorted(intLoop1 - 1) + intLoop2 = intLoop1 + Do While ListBeingSorted(intLoop2) < intDrop + ListBeingSorted(intLoop2 - 1) = ListBeingSorted(intLoop2) + intLoop2 += 1 + If intLoop2 > ItemHigh Then + Exit Do + End If + Loop + ListBeingSorted(intLoop2 - 1) = intDrop + intLastSwap = intLoop2 - 1 + intLoop1 = intLoop2 + 1 + Else + intLoop1 += 1 + End If + Loop + + 'Update maximum value + ItemHigh = intLastSwap - 1 + + 'Next bubble downwards + intLastSwap = ItemHigh + 1 + intLoop1 = ItemHigh - 1 + + Do While intLoop1 >= ItemLow + 'Find a bubble + If ListBeingSorted(intLoop1 + 1) < ListBeingSorted(intLoop1) Then + 'See where to drop the bubble + intDrop = ListBeingSorted(intLoop1 + 1) + intLoop2 = intLoop1 + Do While ListBeingSorted(intLoop2) > intDrop + ListBeingSorted(intLoop2 + 1) = ListBeingSorted(intLoop2) + intLoop2 -= 1 + If intLoop2 < ItemLow Then + Exit Do + End If + Loop + ListBeingSorted(intLoop2 + 1) = intDrop + intLastSwap = intLoop2 + 1 + intLoop1 = intLoop2 - 1 + Else + intLoop1 -= 1 + End If + Loop + + 'Update minimum value + ItemLow = intLastSwap + 1 + + Loop + + End Sub + + Private Sub SortSelection() + Dim LoopOuter As Int32, LoopInner As Int32, BestValue As Int32, BestInnerIndex As Int32 + + For LoopOuter = ListLengthMin To ListLengthMax - 1 + + 'Init lowest-value search + BestValue = ListBeingSorted(LoopOuter) + BestInnerIndex = LoopOuter + + 'Find lowest value that hasn't already been sorted + For LoopInner = LoopOuter + 1 To ListLengthMax + If ListBeingSorted(LoopInner) < BestValue Then + BestValue = ListBeingSorted(LoopInner) + BestInnerIndex = LoopInner + End If + Next LoopInner + + 'Swap lowest value into proper position + ListBeingSorted(BestInnerIndex) = ListBeingSorted(LoopOuter) + ListBeingSorted(LoopOuter) = BestValue + + Next LoopOuter + + End Sub + + Private Sub SortQuick(ByVal ItemLow As Int32, ByVal ItemHigh As Int32) + Dim IntermediateValue As Int32, Position As Int32 + Dim objRandom As New System.Random() + Dim intLow As Int32, intHigh As Int32 + + 'If the list has only 1 element, it's already sorted + If ItemLow >= ItemHigh Then Exit Sub + + 'Pick a dividing item + Position = objRandom.Next(ItemLow, ItemHigh) + IntermediateValue = ListBeingSorted(Position) + + 'Swap it to the front so we can find it easily + ListBeingSorted(Position) = ListBeingSorted(ItemLow) + + 'Move the items smaller than this into the left + 'half of the list. Move the others into the right. + intLow = ItemLow + intHigh = ItemHigh + Do + 'Look down from low item for a value < IntermediateValue + Do While ListBeingSorted(intHigh) >= IntermediateValue + intHigh -= 1 + If intHigh <= intLow Then Exit Do + Loop + If intHigh <= intLow Then + ListBeingSorted(intLow) = IntermediateValue + Exit Do + End If + + 'Swap the low and high values + ListBeingSorted(intLow) = ListBeingSorted(intHigh) + + 'Look up from ItemLow for a value >= IntermediateValue + intLow += 1 + Do While ListBeingSorted(intLow) < IntermediateValue + intLow += 1 + If intLow >= intHigh Then Exit Do + Loop + If intLow >= intHigh Then + intLow = intHigh + ListBeingSorted(intHigh) = IntermediateValue + Exit Do + End If + + 'Swap the low and high items + ListBeingSorted(intHigh) = ListBeingSorted(intLow) + Loop + + 'Sort the two sublists recursively + SortQuick(ItemLow, intLow - 1) + SortQuick(intHigh + 1, ItemHigh) + + End Sub + + Private Sub SortCounting() + Dim ListCounts(ListValueMax) As Int32 + Dim ArrayItem As Int32, ThisCount As Int32, NextOffset As Int32 + + 'Count the items + For ArrayItem = ListLengthMin To ListLengthMax + ListCounts(ListUnsorted(ArrayItem)) += 1 + Next ArrayItem + + 'Convert the ListCounts into offsets + NextOffset = ListLengthMin + For ArrayItem = ListValueMin To ListValueMax + ThisCount = ListCounts(ArrayItem) + ListCounts(ArrayItem) = NextOffset + NextOffset += ThisCount + Next ArrayItem + + 'Place the items in the sorted array + For ArrayItem = ListLengthMin To ListLengthMax + ListBeingSorted(ListCounts(ListUnsorted(ArrayItem))) = ListUnsorted(ArrayItem) + ListCounts(ListUnsorted(ArrayItem)) += 1 + Next ArrayItem + + End Sub + + Private Function SortCheck() As Boolean + Dim ArrayItem As Int32 + + For ArrayItem = 2 To ListLengthMax + If ListBeingSorted(ArrayItem - 1) > ListBeingSorted(ArrayItem) Then + Trace.Fail("Item " & (ArrayItem - 1).ToString & " is larger than item " & ArrayItem.ToString) + Exit For + End If + Next ArrayItem + + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter04/SortingSpeed/obj/Debug/DebugDemo.DebugDemo.resources b/Source/VisualStudio2002/Chapter04/SortingSpeed/obj/Debug/DebugDemo.DebugDemo.resources new file mode 100644 index 0000000000000000000000000000000000000000..24379ba0a8cb61c130bc0ebc4ac085e9c4f5fe25 GIT binary patch literal 4029 zcmeHKTSyd982&YN4J*26N*5bU(rVdOOijZF-7QF6Q+KrtYTMa8+2qU)%*B*IFnsbk z!jg&}f-I;WQhG`vBB-#UAo8i#$`ap<$ogj5UELiekbP@s_n$N8obP=9?VO*P$rm$^ z(}?IgWVg3Z)tKaHW2&qxL8iu@+E^gO6gwxWL0J(6UbQ0iuqH?>y41_G1+<;(V2Ucp z;o35X(@|dTbUK`N&ZUc*uCUrL(={a^+PM~;7lmLW>+{LoEL_W1RRt=76_sVx<@=fQ zK(%3I0b~{AR78KhEQ>4M>h_%Of8Hl3UItdQl8)vPV+?|I^z?I}4uP*8ntU%yWt z&3dVIA}do!(RQ@=(K?KD;i`n(gZt=lu zX~}qQ#YW}gr>z{V0Bz%um)>RUnFXLI5n$yhvB4J6+%HEFtHizi9MfF2BoHC*3eAD>K*?m+oorxUw%Jj8#d5-qMVdh3&~F9YNanfsU3)VkvdnA_ua%I TnmSjhbG7(WDOD~0k81G;_%8yo literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter05/ErrorHandling/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter05/ErrorHandling/AssemblyInfo.vb new file mode 100644 index 0000000..1ab76fe --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/ErrorHandling/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.sln b/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.sln new file mode 100644 index 0000000..8c51823 --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ErrorHandling", "ErrorHandling.vbproj", "{20437FF3-C011-4EBB-B7E5-3E4313ED2279}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Debug.ActiveCfg = Debug|.NET + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Debug.Build.0 = Debug|.NET + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Release.ActiveCfg = Release|.NET + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.suo b/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.suo new file mode 100644 index 0000000000000000000000000000000000000000..9d7b118e7cab83ebad349565329659c0b93ae5e3 GIT binary patch literal 6656 zcmeHL&u<$=6n;)pnuMmM1xhJUmJ+Ihh?TY}DG5|cY=@R6v?OU0Axq%c8^@{Rwd`#| zL^vSvHy{ufI3OVq2X0(Im3rZaP`PnKaN-F605RV;v+G^2yw1j?RG_@o+nt%6o%iO= zoA15ZpKc%g_2Vy({w4uBFP*Yk>ydkW?J<~S5&nxS;!QvyphTkY^%Z!J#*%QF=16!)OWoJYo%~_v zS!-3VL)V4bsY!mfKT#}{7pzPrXG|ALc{c5R$t;+M$1{zlVQUlwM_}tBoiy zuIg(J9*5~h{PTNgSU-O|_qtmr>Mp=$d0e#89IRr)eoLrrh5a0Z_(wbZYRh`n6EoxZ2{!!pWQ^hl_+U{7XAo;D+G_&;McbtWY- zZWjK(;*9K{^A)^fM$*a?1|gsEn>ZYG{)f=_^#E{i|CGQQ$MoFu*b5nGX85d%=9G*h@_m=t30JPwPIgG= zWIr=eMPL8^$=bK5&v&z}Lr%orlG6yOLvjW#HG%7l48VB@BS7YnLsJ`ZGhRayoWndbyE)3%vzizA@YXkqE#1JFSFbT|_C*Z2WP!o}Eds^W9 ztNz*WEEd)N{`?F3Pwzl{&vP5kXQUrLA3F5MH(&gsYvFgsvMH=oQLPh^KLbk=|I76V zD)OSr&qPMyn4(;Kr?ze!ab`_L98d0Ll|A{TGU7MaO-Fb3?M5!Ov$~DS`5hiHj=a%? zt(l?nKgmWty2cUP#?h*C=W+BQqLjMG`=E;rLXIAWu zIf_~oilI~GyO+nFet-GWr$2x6&h+M2pQ(t#pAF%tF7lxs{Z)hKx19iW-@kD^bfo+I zZQA7Sk(=c*4=%%Ncrs;p(z}J>sWtKc8*zs@WmNp>M_)JpzKYODsTugI33m0-`_jv^ z!?ZZw2LAi;&;8Hn{(qc7D5nj$j~JD<(t!BOdAk&*r@x&z + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.vbproj.user b/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.vbproj.user new file mode 100644 index 0000000..447fdc6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorHandling.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorTest.vb b/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorTest.vb new file mode 100644 index 0000000..6d67bed --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/ErrorHandling/ErrorTest.vb @@ -0,0 +1,41 @@ +Option Strict On +Imports System.Data.SqlClient + +Module ErrorTest + + Sub Main() + Dim strConnection As String + 'Set up database connection + strConnection = "Initial Catalog = Northwind;" + strConnection += "Data Source = CHEETAH;" + strConnection += "Integrated Security = SSPI" + 'Try old and new error-handling functions + MethodOld(strConnection) + MethodNew(strConnection) + End Sub + + Function MethodOld(ByVal ConnectString As String) As Boolean + Dim objSqlConnect As SqlConnection + 'Test database connection with old error handling + On Error Resume Next + objSqlConnect = New SqlConnection(ConnectString) + MethodOld = CBool(Err.Number = 0) + objSqlConnect.Close() + objSqlConnect.Dispose() + End Function + + Function MethodNew(ByVal ConnectString As String) As Boolean + Dim objSqlConnect As SqlConnection + 'Test database connection with new error handling + Try + objSqlConnect = New SqlConnection(ConnectString) + objSqlConnect.Close() + objSqlConnect.Dispose() + Return True + Catch + Return False + Finally + End Try + End Function + +End Module diff --git a/Source/VisualStudio2002/Chapter05/HelloWorld/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter05/HelloWorld/AssemblyInfo.vb new file mode 100644 index 0000000..bdcac6c --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/HelloWorld/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.sln b/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.sln new file mode 100644 index 0000000..1fad0c7 --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HelloWorld", "HelloWorld.vbproj", "{B17D4890-3D55-4530-9BAB-331E9F4DB432}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Debug.ActiveCfg = Debug|.NET + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Debug.Build.0 = Debug|.NET + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Release.ActiveCfg = Release|.NET + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.suo b/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.suo new file mode 100644 index 0000000000000000000000000000000000000000..f632aa2c637eb150b9351153f183828fdafcd2c6 GIT binary patch literal 7168 zcmeHMO>9(E6h19Q+FC$Renh}00+wo<7TQQb3GK8Mv;}MnZOp`EIvs{7GxH`huPqI* z(3NrJ5?A8F#P}E4sfoC7qa+44#*Hz$a*3{VW9#?b`|iBy>%8e3Xf&GM$?3iCymRk4 z=iYO_d+zI<+nauV_r{K2#8-~V8kt{ckOxZmHE5Gmc}S!d4L;8=EG%fI2%4+qKQse> z!PYu=4cDUPdanaDfa*bwpeE3RAg(iMwfui(U|4MY9I>QdvZ(Vihm{Urw#wS#o@cC7 zD!GR1+q#;*u31AN1{BJu#H1h>Wl&P69XX4?30PtH1uYi%cdyi{@ffpQl|Vt?3&u9f zNjWDYG9-QYC7?ScNz4N+7*T&`z=@+3R9c{)d&WdWkX$Lh6faN0Q?5W-Ch+%CNUh#z z7W8x9ZUlw(pP2o&I|OYZj&n`S{-!^sO&s95a=C~D>p>ep)Q2NLHi0Pnuv@de742=H z?Vv|NJ3wZQ*op;oht?P?9F%H`}J~U{J#4jW=>T!KvDwejBR{vzmvGWvY7)wl819m>6 z`ZY%EOwP_GvU-^HW2x+Q0Of4YJ>cNII39uw(g2YdDonlC|!IL^hF+rP&Ty zYC_5diLw82P(+SM6uZ}!X2(4&T*SKBm>)gs!FDu5Ki8ld{lse(!l?cF`*8*^dKfia)9f;{upj!Vo97v8 zRLd5gmFE02!kiQC8y&|w7Lu5Y7-G+o0oamOE5gX+iO4uBfX>5C%NLU);7ud0X@8rX zLS`|l;x;bNqGn%5#r*64h(7MAG`u(u%~9CQ-5D)Di~O5bXxq5|Zx!ca>7KW+3R%pj zrLqGD{xB|+@Fgle;Ahmc&Y!Bq5P$q}rKzhF$zWPwLHreCKWzLl_Fg4up!oFjCjCC%GS-0le=6uM?bua#gOBO)J`D1`Co?P(1~ixJpsDj9!YugVvv- z@aWYk$}D6}ic*fNHC(~imtjW)_IAMT2)v@@tjTQ!w*&T)cNo72tZv0qJN#OyvtINv;DPJ(iTf@B@A(C!pmL}LVxc-K z@cl#G!Fd-CtG_h=t^_Mb-+8VS^TRgeXT2)U2uZz|6+)`F1D;!P zOT5e@ycN9d_5es3tuwGc0;_rR^X34>ZSL8xc=Jk{AVAiuU!1HQtn2F?>8-YRq3EL8|)AeT4auUU{vid-Zpwv z&gWSVfjeLPKK{m@&-*_*@_qc;AD4D1qn7&rvL$l-K981?|0;092N+b|!SUO)NmS&R zOhh?Y)_%CD{l8)Sr~RM0_D=$f7T>nL%$w1=IP;ESg@ZEhjJmxq9WRQg34OF7pDK6g zM&Yem4AccN{`2;4j(YF*ABRW0LF&wn2faUYGg&V4V7}vlufKlsBxJr@x$yfdafdl| zSo}Ev*;DSYXJH?;ayAnnV~_EnvUYwutRDYM@y~o`Hs7B|Fz1{DM@0hj*UE+XOTSI2 YEUn)@jmm%j4%074#^`1pBooB{8^X&$Z2$lO literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vb b/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vb new file mode 100644 index 0000000..c1e98de --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vb @@ -0,0 +1,9 @@ +Module HelloWorld + + Sub Main() + + System.Console.WriteLine("Hello VB.Net world") + + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vbproj b/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vbproj new file mode 100644 index 0000000..a41c892 --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vbproj.user b/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vbproj.user new file mode 100644 index 0000000..447fdc6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/HelloWorld/HelloWorld.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter05/StringPerfTestOne/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter05/StringPerfTestOne/AssemblyInfo.vb new file mode 100644 index 0000000..b81bc27 --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/StringPerfTestOne/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.sln b/Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.sln new file mode 100644 index 0000000..0429d40 --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StringPerfTestOne", "StringPerfTestOne.vbproj", "{8454C1C9-B876-4ACF-8562-02C70E18505E}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.ActiveCfg = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.Build.0 = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.ActiveCfg = Release|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.suo b/Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.suo new file mode 100644 index 0000000000000000000000000000000000000000..ccc943dcec0f7d2497f1d2f2888c48ab5aad65c4 GIT binary patch literal 7168 zcmeHLO>7%Q6n^=mNl02+XekBC0x5*5v7C~Iw1JAmNuVWeN}M)P<%<(<9H+L|vYmve z=>d+MdMqd4fW(hDaO;JF)C)yI<;DdeIB_gTI1uxFvpZgU{S!M1AW+5{&+P2md2i;u z_q{js{k{D^fB40bU&K?+N{ejfJLG|)@h0?HRe4CH867@v=JR=bPz2rG@*moPKOt+Y zqr*0|)b}3L4%BwkPSh^c2T`eK*4^^|*@0=X@XLuIQ>!bJISwv{`Cp3-ZEi+BVBM zxhx?G${2noc*iA%eV_y(^}mXd1@x+wOErid(LahLL8?~w10Cwx=$RSs_6g3fo{~jsCth z6jjf01pUWRpFn*Q^(g97s0QlOsL!C1wg>Gor~kaua(uV^eLL`5fEwO@p>6C7WY)8} zNWz#l(^e*@T()&Al8bQK&bi>E5n5O>lj^a1EFMW%F=IR$&siA~bj+Ib#)Oqgs_!}j zRx)j+%#=M%_iQ{BwbrsOLF?-?!AX9%H;{;@=dDO4YD~vdF%Io{%}kk@NP_)3OH-Y6 z)yVk$1=N6?kubd1k`-VF5hIMTC7@dxs75^T%PB=cjEw_hVscT9FXEewBte;SzO#9) zivdisFt&oXrb6c|X1I*6vlxp2GmJt$76+w)88c{?LA?O3qz)-eFXcCb_r%&T7`gao zf16e^iuh%&O!Vm z9udDN1IM;1%y)=YEMERxwFw!nLT{GR6Zf%t=>`8Lyl!Ou%(JdIQ+oN2BL>iVXf@Pn zswQ`l=N$ZJJgay8jFme6Ibx{&qu-oYc5K^140{oQ?HMuwSrSSkVZ=&CMA}&vbrEtJ z9-E}itw>bK?}K-YBgWBg7vv?h{MNR;cm5H6w5J4Cu?Ws#$V~4H7oJ7_O(|^I=!d#k z@PkHno!`;_yrteTul-TeDd?^k$-HwHKg0eCwqLLP(e`f8X;8fUgRrtB?238ltRssh zM4`&%1o+dRnU~bdpZVg9GadcS#^;nmRM*l=u{5B3k(A7mU1`q1|Ck#!;{VLmC^L%} z;fvRNQTbRL{Hh~?AN-k@HNyV@=wr_QSF#hz)kvu{N4;ZhqTn;C_#KvSTg?`v6#0B_ zv$Ra!(7PmG{`%3{H+Y_F=UB6xXu2jtGJudefH2#SdRqDrvW5ULgXj&&2*xJR8v@Os zoJ7x${{Y_m0Z9F7oFRE!uFFQvFgXR4o8psI1gbO)lL2-EAi{u82y_EJ!Y@}gRuA8YpG>9l(9M}GkQ z>)6@;lM%RdQn{0T%p%0(AbSS;Z)*T#v?JOw%Xgm*9Jqh`^PeD>PBkc@hIK>l1Z_Ep z;RIgB)iy@3ToR@W*@(z1D!zyeLnOiCc20FZENsogcS=RiVy^UfMx}Du>`aNY?TDp2 zE8DP~-QgL1G7VEO*`RRZ681j)I0Ru)fz2Qv7IFo?2XpFOQb`iD|!>DbhHu^aqcpBipI{!Ap|1r#Q#Q~@(IQ23t zm{GSH#(P+nJRaQ!|7S77C(bMZte(2esvOFMEjK0w?mut?Bf_&d_rRI9W>cJhZx=Fs zMUlIHE97Z$1kg!sufl!p2bepm3_V>iEQe*fU_ zDzs(po*#MP=JFdK|M0=v)0?+GRku#Oc_0pGK-MQPeImkrcFz_hb~F&Va~y;-@HP9q zz-+hrnNHNL+OWDwDP8}Y2G5T>8BE+e`qK4tr^?qqcaJ&|=z{Q$b5w)NqWrfU`J?dV z($lH|+h#UtD74Bcy>pj%GOZetRCdnOZ~1&-SWWTiw_-@bTJ-6c@3pRV@YTVVS+}wj zwA(Lw|F%1W&L`cS;=N<(PK{tEDh6-tR1lVBlx30S_XMr$DjbhH + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj.user b/Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter05/StringPerfTestOne/Test.vb b/Source/VisualStudio2002/Chapter05/StringPerfTestOne/Test.vb new file mode 100644 index 0000000..aafbbb1 --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/StringPerfTestOne/Test.vb @@ -0,0 +1,15 @@ +Option Strict On + +Module StringPerfTestOne + + Sub Main() + Dim strTest As String = "Coming up: ", intTest As Integer = 0 + System.Console.WriteLine("Starting...") + For intTest = 1 To 20000 + strTest += "another test " + Next + System.Console.WriteLine("Finished") + System.Console.ReadLine() + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/AssemblyInfo.vb new file mode 100644 index 0000000..b81bc27 --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln b/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln new file mode 100644 index 0000000..8a00ffe --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StringPerfTestTwo", "StringPerfTestTwo.vbproj", "{8454C1C9-B876-4ACF-8562-02C70E18505E}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.ActiveCfg = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.Build.0 = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.ActiveCfg = Release|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.suo b/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.suo new file mode 100644 index 0000000000000000000000000000000000000000..e069035b45f0b7dcce3ff2574a5f07fce460bbf4 GIT binary patch literal 7168 zcmeHLO>9(E6h1R;rC?hG1rZgW3R(zErdXg@B`MRQV25H`C?Q?=+IbzOOy^BzURxVV zqAp#LxWSdWFd-Tj?%aqAH)>)qZrm87E0?%*p{?I{@4GXPH=V!QXf)i(nS0;;JLlee z&Uene-`(E!^9P^q{zXFRgtW-Y>SnnwP#-~=q|yT-Q55*SvbwseD@9Pem;OUL@F!$# z_0O;kInR3&XfvoCv<1`wx*x=ICf!T_pB)$#7e7xd8Im0Gf-K>r8&5l>tz`4mm0Ibw zrJH{o>-aL#f=+MvoyWzNqFj+-$sqUSJpLU>Vd{&uCPdp_iAJ^}r_SU1wPQ@5E; z%LN&eqzvNcfOkgH*au25rv4XDGmTQUbO8KmGe#q-^$XSq@$xiQ$`i=S6#idtkZXB1 z3;fA@n=eDTrFw~&{jT3kS%~926Jy_8k0}!ecvQ51;y@>;3&eJ~fKtB)QGN)t1GE$L zFv!fY8|6nqkAWTs?EyUjvOv#*o&r4$+7H?XGUK`fWv=mF+V~y#Ex{9Bf1++|O%#@j zo}INuoxEG{l*zUZ+Mdm6w_HpPTVvCgojLW{Ihe7tZrU13WjwdQ4x1;ODeIJ5m{a4n zB;2{Yn{#q{n$C$#F6Ay3%N<%@9#0N)TvsBS$xpdM%PbYY5borhT1>c%^9V~S{KsT3mdv;$tlQ^RVOkDUrCQhJu8A{Ag2}5N$T9Z zq?G(ISjP}Fn|eDf$B=WZr?mX7e}o_PDT`Iifb%3|rgcu1zD52`DYR_H;&~P>?4X%l z=NQ^wI5k=q)<2$f4rdocvhdu&Z|Gl1_Z!te>fUu44N{nY5?VHgU0@tK;mhIz7pvLe zLGY(NGcIYAKjX!55EJc9<8w|SYFX3o#?l02A_5y6)}sa15{)o6YR3KS|If_!R45025N`2^aR1TvQ z$A1FtaU6P&s;5gHl54UIb+7IwwOfwK0vuHyib)5%3=pBiCj^!qKHXN>;nT4j2dted zAyYei&v*FdTk}}P>{penamabZm-&#&xq?He?SbON)$00C^PE~;9BYo_>$qxI=7~(skyl0RrEuKeQDVvUz*tZ?NbYo@f zmlGR2V@yV&I`qW6H9Jrg<6mR&Zzt8EQVCC@4^67P?=Mu5q!#{|yZE4**TxK$DF*zZ z-ZXRX`G#bE~Qbc)l|np{(w*h{8#tiX81pXIWGACH3Flag$C2> zR>SxZ%ey}Jtb_lPnBjYWmIPMMvn;9@%7HF7Ck5U=@B$;kyEym2pSETejK9|lnK9pU za~r$Pj{SJ+PDk?XeK)>{zPICdGsKfM3u=*njwMTq6R`PYJ4yeIFi z(`5v1n9ngw^*UbYRc0G;sNP)#CkaBf-4#P?U? z4r9tj@rRac?mXwAALL4Ha6m>LbB49K^X;(t`$rJ}%saDre;$M0a}W3iL9bNp-eKe- d{&L+Wnfh8e + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.vbproj.user b/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/StringPerfTestTwo.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/Test.vb b/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/Test.vb new file mode 100644 index 0000000..19a18e8 --- /dev/null +++ b/Source/VisualStudio2002/Chapter05/StringPerfTestTwo/Test.vb @@ -0,0 +1,16 @@ +Option Strict On + +Module StringPerfTestTwo + + Sub Main() + Dim sbTest As New System.Text.StringBuilder("Coming up: ") + Dim intTest As Integer = 0 + System.Console.WriteLine("Starting...") + For intTest = 1 To 20000 + sbTest.Append("another test ") + Next + System.Console.WriteLine("Finished") + System.Console.ReadLine() + End Sub + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/AssemblyInfo.vb new file mode 100644 index 0000000..c42de65 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln new file mode 100644 index 0000000..2e701cf --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BooleanSwitchTest", "BooleanSwitchTest.vbproj", "{74999BA0-648F-4433-B23B-66CD0A996617}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {74999BA0-648F-4433-B23B-66CD0A996617}.Debug.ActiveCfg = Debug|.NET + {74999BA0-648F-4433-B23B-66CD0A996617}.Debug.Build.0 = Debug|.NET + {74999BA0-648F-4433-B23B-66CD0A996617}.Release.ActiveCfg = Release|.NET + {74999BA0-648F-4433-B23B-66CD0A996617}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.suo b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.suo new file mode 100644 index 0000000000000000000000000000000000000000..fb5ca229ddd1be9fe217112c95e131dd90da7fad GIT binary patch literal 7168 zcmeHMPf#0G82wTbl(0)(@s0q{vdJx2QChe8~j|IlXz^^Ep3`rJsURJQu{>x!_jBSnDZC?AV z_1)>=rmq9!dy@`@5|y|V_h7Y*_mGY3F^VSO4FU{#!emP#VP5W_8?D!@Q*ll8f9sk6FW>Aau94TOf?_snb0kwh-gB}Ih zV;n{ManLc)6QJXuCqWwMDbNWJdD~E*1U&%#G3oWnLwMMkuV#JrwSx6R>HJZ&Vkq1jZ?$djRAQlHT- z8u^TRuQ6m~az<9qn!_|trn0lfa=~G!dnFnf;d?EibSgJv#PhS-cq*G@*Z!CFte%gj z+4fliKKZ=Z`2J;3NX|y{tE+%uRr z_aT#(E(W5+YYjSgA)mQAYE6pvHsdpkRZk1&&*&^z`FH{C1UN!!Ey%gqBhFj)=iFH; z*~)%)5DoeuOBmxO;QtwG;aLItRPuyw$Y)L_4*QjV2)s!ba4`Q9H-{CDnR}5W zRv`|}v@)y2uvg*Uh$t8REleuEPDByWC5kd#r!*exE4#oK-T8$ai&m zEnK-&YOj&nk?VGp$d|u;wEPY3r|Q{PBb|X&I8(2jQ@=qOKza=#!S>2oIBO7fuRM=m z5DE7*>Ou9i4`Cbz=YV>v5BxnC<(jPdNXuQaghZ87j=z965-Ly_0#3qb8h0mr9xI%L zUnooX1QQ;4Vj#0+%2>nbtI#?GO?%`8)MwP}ShF{X-X1lNAZB|OJ)CE^npZdO&Z+0T zr+u!$vOT9gm#`B4*k`dYCRGG&Rl0V8zeg~TW(~$2QyM0;G0w!X~a4&jNe+a*?W8!^M4wz{t+Tr*p zX@T>vFrV-&=6C+(`!B?w8G(48cCpL%pY$HObL-Qe?R&49vLjfjv|1-3e_Y}FB0|N? zA`9SnNu4i6`r(oS=dNDpb|KF!tBm8w9aX!ha;ePtTkB?Kckz4~vpY1rH z!aP0jJIUHce(gej8&q*h5E=vzA=R<_i&fXe*}3`Gg1eLfKqq5*3HpbiHBWA|K6k~= znEkl(Qy9iAmnVL@b*Cxv&dD2J)x6*OrwXn7x5ERcZY;cd^T!X~8ejk7<3JNQ`Q?Fr zkca#%B#%LdJamYnCKQXT5S*guj6+QwEkixzCJ`UI`9&fGZzr#TJ%qz(f4}1XkYi$` zHe4zR8&#}ef-&d?%3|J1JBzdm zW~;oW@%&xQWL)+ihb^Q+J$0Kteg764qj?U>VI{fnTr@f^b1zr6QsMVk<{h3X{N|tM zz-#Y$ufWA9H4ePeLAE|7E_+UvYiIZ bzoumK>MhlI5=7HJe>=UqZ|zimxum}Vl*HW1 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj new file mode 100644 index 0000000..3b4418f --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj.user b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/Test.vb b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/Test.vb new file mode 100644 index 0000000..2a785a3 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/BooleanSwitchTest/Test.vb @@ -0,0 +1,25 @@ +Option Strict On + +Module Test + + 'Create switch for controlling tracing in hypothetical component and set + 'the boolean for this switch – setting could come from registry or config file + Private bswTraceOutput As New Diagnostics.BooleanSwitch("MyAppTracing", "Test BooleanSwitch") + + Public Sub Main() + 'Create switch for controlling tracing in hypothetical component and set + 'the boolean for this switch – setting could come from registry or config file + bswTraceOutput.Enabled = True + Test() + End Sub + + Public Sub Test() + 'Show whether the BooleanSwitch is enabled or disabled + If bswTraceOutput.Enabled Then + Trace.WriteLine(bswTraceOutput.DisplayName & " is enabled") + Else + Trace.WriteLine(bswTraceOutput.DisplayName & " is disabled") + End If + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter06/CustomSwitchTest/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter06/CustomSwitchTest/AssemblyInfo.vb new file mode 100644 index 0000000..17cf2fd --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/CustomSwitchTest/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.sln b/Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.sln new file mode 100644 index 0000000..a26faad --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomSwitchTest", "CustomSwitchTest.vbproj", "{02FBDF20-1D73-429D-928A-15C519BAD91D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Debug.ActiveCfg = Debug|.NET + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Debug.Build.0 = Debug|.NET + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Release.ActiveCfg = Release|.NET + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.suo b/Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.suo new file mode 100644 index 0000000000000000000000000000000000000000..5e98f16d22c9498c241b9db1d99a03109c336b46 GIT binary patch literal 7168 zcmeHMO>h)N6n>ioNn!#5f{2JC1`QF`BqTsUv64-qKmwR7Bt`9IlT0=nc6YXRH;F0W zphr&}@uVKCva~GAn-}rmMXj>%=Ebt~q-$6H|am*fj?nu zojr$~>n-4V@K$gGxCz_{ei+PoCU4UJ#{(l`;a3tv1|)}jK^8I7;b{+6jN=WiqiU4@ z?d4C-H+>nYr4SbuC@x7U$~761H0~w2jH?MNocf{`3%s^SO=LUXa=p@yKtbONu5r>? zXrc!)GJ)&sGOD!C!w*P$ReZ@m|{3v)gcn|n7 zu+zsrl%D|a2R{iu0DcN=fS(2*1XH#J_e0=k!OwwP!H25^5T zK*N|hVGLS@tZLU7v$AepRkgJDPts^OR;L} zD`w6tBr`0Bq)14)AThS5IWajU3G8G`=CE&x9SPLU0NwIHH6mKO99MO73g;}zLV5u> zQ-bsiP{>sEi6BJ*_3O3Y#h-pfx$M!-8B@?ZiqQe;Cig>SwHU;-6ptpc?a3*-Exet$2g}`(qEQpSo|^ z3)ioI7-P?3+{{D9Y+Eeslb|^`g7GtUF)oGG&wL>cCehz|f95dj8R7Udu%T$j<5`p^ zArVt^LCNwJamw~Tb(3_j)vwGIoLs3N{Z3;2XYHQ7W4?rUMc7kqCA8c6iNj&_?}Tj1 z2ORVvar2zQF`bK~FbhdoW_Y}kK(4~vh`CA;JPqp%e2fDi`46 zIFRoOTAje1ZA-X|y!nslBc5b1ifL$0z)GTX;{Nl$YlXILwU`gLl@YPePwT1k_w{!^ zZxIEbQ%c8P`KHdS#Zq2gZmp5ppI*MzjoRnVmwj0~H8&W-J)r+@1s>MyYf%@uUIV$rAQ+c)QXCXhS zwh1?Y8}1p#{o$Tlo5vc4`=Te@6G&K}0PB+0a07i`hs80BrvtXeFdmMKch+)@93|^c z;ulk+ZO3yjIHpF_fl@m>&?7hD)sD_%UERk6r?49SIA^hb466jLL{Z=mGe~|P2#Y^^ zA!~q1%$PE8l7n#?XQzQ3Ddk#f)^SkF`>()%rI)%%{`ZxhA4la?dxKoWw9W$4h;>02 zU#SnL?!X%G{~0vyv-QU?dY*ub3PVjSk=0p&^RN15!?Re}@q6_5E&odMbRZ$IkV zdGF50Kl-X4cw{Ua#!O|@JQ4Ym3g73jS#%Vcg~Uthd?|7o%TlnwH*V`j5oZ=u#Budr zRN0ePDnZlrCe<;;eUb_8(2{Df=91XwunHH!GwhgzLG_d$k`>iYe~ z4Y$P2+`?PIETtFV$vr&}`(v=0CpUVZS+U#aX*`7?Zli4%Mt`_-uW9(LL$|-Ed1v?U z5jHG*eXjTL?b-7meE;qnBTJuss7?v|^1yXafc_jbUxEz<*bv8^a4fP&aEhZc2{TQU zEcKE}B0hE-xVSGXo!>rq4vo=)7KImY!A3^tZA_y4SUY zzSCgFI7toY@gOc<=Xe#mv#_gt7J3yx(qn3hj0e;VD3>rZAA%~bDCOATvAL>N_qh{2 zm(yzo&;J{j4tV}yDOVKmG=7(RYVG7;G|xeKOcLjmj@D?&?9sR!bn0_$I=F`T?~Q-XcV=g6j$*ab2gFfkB`aCL_{(uS + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj.user b/Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/CustomSwitchTest/Test.vb b/Source/VisualStudio2002/Chapter06/CustomSwitchTest/Test.vb new file mode 100644 index 0000000..b265118 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/CustomSwitchTest/Test.vb @@ -0,0 +1,96 @@ +Option Strict On + +Module Test + + 'Create switch for controlling tracing in hypothetical component and set + 'the boolean for this switch – setting could come from registry or config file + Private AppTrace As New TraceSwitchCustom("AppTrace", "A custom trace switch") + + Public Sub Main() + 'Show a trace information message + AppTrace.MessageInfo("Trace information message", _ + "This is a verbose version of the trace information") + 'Show a trace warning message + AppTrace.MessageWarning("Trace warning message", _ + "This is a verbose version of the trace warning") + 'Show a trace error message + AppTrace.MessageError("Trace error message", _ + "This is a verbose version of the trace error") + End Sub + +End Module + +Public Class TraceSwitchCustom : Inherits TraceSwitch + + Sub New(ByVal DisplayName As String, ByVal Description As String) + 'Chain call to base class, then show that tracing has started + MyBase.New(DisplayName, Description) + ControlTraceOutput(TraceLevel.Info, Me.DisplayName & _ + " trace listener created - trace level is " & Me.Level.ToString, "", 1) + End Sub + + Protected Overrides Sub OnSwitchSettingChanged() + 'Show that switch setting has changed + If Me.TraceInfo Then + ControlTraceOutput(TraceLevel.Info, Me.DisplayName & _ + " trace level is now " & Me.Level.ToString, "", 1) + End If + End Sub + + Public Sub MessageError(ByVal Message As String, ByVal VerboseMessage As String) + 'Show trace error message if errors are switched on + If Me.TraceError Then + ControlTraceOutput(TraceLevel.Error, Message, VerboseMessage, 2) + End If + End Sub + + Public Sub MessageWarning(ByVal Message As String, ByVal VerboseMessage As String) + 'Show trace warning message if warnings are switched on + If Me.TraceWarning Then + ControlTraceOutput(TraceLevel.Warning, Message, VerboseMessage, 2) + End If + End Sub + + Public Sub MessageInfo(ByVal Message As String, ByVal VerboseMessage As String) + 'Show trace information message if information messages are switched on + If Me.TraceInfo Then + ControlTraceOutput(TraceLevel.Info, Message, VerboseMessage, 2) + End If + End Sub + + Private Sub ControlTraceOutput(ByVal MessageLevel As TraceLevel, ByVal Message As String, ByVal VerboseMessage As String, ByVal StackDepth As Int16) + 'Validate parameters supplied by caller + If Message Is Nothing Then Message = "" + If VerboseMessage Is Nothing Then VerboseMessage = "" + 'Add system date/time to the trace message + Dim strDateTime As String = New System.DateTime().Now.ToString + 'Add originating module/procedure name to the trace message + '(catch any stackframe error, probably a permission problem) + Dim strTraceSource As String + Try + Dim objStackFrame As New System.Diagnostics.StackFrame(StackDepth) + strTraceSource = objStackFrame.GetMethod.DeclaringType.FullName & _ + "." & objStackFrame.GetMethod.Name + Catch + strTraceSource = _ + "unknown procedure (stackframe call failed - check permissions)" + Finally + Trace.WriteLine _ + (MessageLevel.ToString & " message at " & strDateTime & _ + " from " & strTraceSource, Me.DisplayName) + End Try + 'Write augmented trace message + Trace.Indent() + Trace.WriteLine(Message) + 'Emit verbose trace message if allowed and supplied + If Me.TraceVerbose And VerboseMessage.Length > 0 Then + Trace.Indent() + Trace.WriteLine(VerboseMessage) + Trace.Unindent() + End If + 'Finish message + Trace.Unindent() + Trace.Flush() + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter06/CustomTraceListener/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter06/CustomTraceListener/AssemblyInfo.vb new file mode 100644 index 0000000..0e631e6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/CustomTraceListener/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.sln b/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.sln new file mode 100644 index 0000000..1e7ea25 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomTraceListener", "CustomTraceListener.vbproj", "{39549A95-F908-4BE4-AF53-C349C8E49FC5}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Debug.ActiveCfg = Debug|.NET + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Debug.Build.0 = Debug|.NET + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Release.ActiveCfg = Release|.NET + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.suo b/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.suo new file mode 100644 index 0000000000000000000000000000000000000000..45f396270732da1788635e6c0a07427f2526d440 GIT binary patch literal 7168 zcmeHMO;B4^6g~lJ0fE|TYpq(Jl`5@;fdXwQ+7S|3TcOa97RJdq4e)@_BrlT$kZHS6 zcdqKLuGEDyjz5d;+*lWG)ETF495;@mt1j!(jl}P}_dQ++dEphJ9UTsH^6t-h_ndp~ zx!<|>@#CGHzkPIT-|tdHr=(hz^L6r2L3;pYvZ6;ss!(8kIiJt#MiCUZ=s)CvzhG;P zy@p)tZQxq)c5ofI0bCD$7|eAhZ_)q917Wf7mlHz2max+PX%8aC@djh199{0e z`_q|*Zvxd2dW8W6ibzbdazzFuj%Q9T;@5-~PJ331dHyy_RbU5t8Lza%Q?RImF-|%Q zP4qxQCh+^Fj4JI5ux1ja^~r#K>fH%Zzxs)p@7qJ4l}pe$Bq15WtSw0^{W+{czp5|V z{_wKoF!Xc(Qa8y3_XC_e_?4c-HO z9PEs-59KGpPl2BX?*~5vHo(t<4}dA#jORh{^WYc2E#O07_PuC7S>B?`dEk#AS9s&Z z*w_)wEM;@Cgb_B=Rwk#mY)vSZi*eZc@u5LubaK{As%m2>9!pp=#=ulOXJsf*H)c*4 zr>#s>D4f4IFU?QHLuwt1hBOFi7uxa}lGi7FC z36_0Qz^9y-7~c13-k@?& zvHk(%AVvhECJqZyWwjG4b^c*K^E-d$N+p!jLJhdv4X{Q%K|H|C`>Zk4-cHkE4 zAHv*|m^aTMW40}pFbkHZBhb&>#k}NKKhFyhdpP=A@6QxgJt3TbLdBlW$8#u8LL#Wv zf|9Ev;^YSA&$9w!kQBnWlZgMMJ#yikN6^O|SuPUV?e!-P`bv| z-JC+WxBnG=#FGSOF%8X8SV?q_uGB>yq!rpW|7Z_~l^|kYF>R);c&vZ2zD*Q-PAMIG z<@*}58ljxew_sZj-f(t_e0BHZ#cxp`uVq`6bOo+Tr}Rj-bm6y8m0A&|JxH@Bq!q3G z2)izn`q0`9*;Z`fP9+_L1p9i>6GY#2xrV2owA>~ONLFbT{Bw9~Qf(G)12^e2brmOl zZg5_1nDlwY(n&v|HjRc9o%C6zoYr#<8m`Jw*w!u`urrA5)2`-mT(!2MwF3acwiEc{ z{8~|K$DG?y>rwrzbFSCn;f|wg`pV&ta~BK2;2gLVwE=&4g5-71FaGR>tN|wR#FT)0 z9E{UAI}O*&D5p}h&VyRM_!s!E?qAeRD(){;e*%rK+Z$vU3pxi(Bi4Cge5o; z{~TWaJfKGiV)ncNXBCE;$aME-1@6D6A+BrzPta7wSFG5ie)Ro)1ZOAi=D&x3%ht=t+P%ATj zY1?#mr);gdcUIE2UO83q*@giTJfARTOaO$FU)zx1`q8S-&i#-fq`H28sp6KnCpZ6A z@RZUA*yNsGfc-&O&6^v&&r`8GW-n@fh}*d7{OB*Y?==j)d+_GhRUhpBQ*Euxcjx*J z-JE;vlb=6)E4=*Wrvd6F^0>Dye));O3Z4K(;`}VZAj!bE6wDeyR|W=Bgs6;<-TWfq zFI9-V)4a}j!_dM{OiTRU!FA=imtLV4rm>cKSGo3zTv%_+2sVR-;ojq9+&4K>jVnx6 zj31F(hn2`I=E!j3ajkIHJc1|Dp2Bh|D~&ZH4k&AR9v;M~T*r>p4(?OHMlaHPB|j`) zz_8(pC(?rdQ$TS!8o$H1*aW$`wX>`H*d_*gFt0kd9NvS{hzu?}7fhoi4z^Ii0Xo4MkG%kDH`s|nSIIw~HS7H8hzB4;tU`BC#qYsFqJe90x f0rM~C?T~Akcj*Yaocp)8l>Z(_H=q9B(vp7z8(Z8L literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.vbproj b/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.vbproj new file mode 100644 index 0000000..e5c1f5a --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.vbproj.user b/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/CustomTraceListener/CustomTraceListener.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/CustomTraceListener/Test.vb b/Source/VisualStudio2002/Chapter06/CustomTraceListener/Test.vb new file mode 100644 index 0000000..1ef4e2a --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/CustomTraceListener/Test.vb @@ -0,0 +1,114 @@ +Option Strict On +Imports System.Diagnostics +Imports System.Threading +Imports System.Text +Imports System.IO +Imports System + +Public Module Test + + Public Sub Main() + 'Activate the custom trace listener and its output file stream + Dim objPerformOutput As Stream = File.Create("Performance.xml") + Dim objPerformRecorder As New TimerTraceListener(objPerformOutput) + Trace.Listeners.Add(objPerformRecorder) + 'Add this statement at the start of every monitored procedure + Trace.WriteLine("Entering procedure") + 'Add this statement at the end of every monitored procedure + Trace.WriteLine("Leaving procedure") + 'Add these statements when closing the custom trace listener + objPerformRecorder.Flush() + objPerformRecorder.Close() + End Sub + +End Module + +Public Class TimerTraceListener : Inherits TextWriterTraceListener + + Private msbBuffer As New StringBuilder() + + 'All of our constructors are here + Public Sub New(ByVal Stream As Stream) + MyBase.New(Stream) + EmitHeader() + End Sub + + Public Sub New(ByVal Stream As Stream, ByVal Name As String) + MyBase.New(Stream, Name) + EmitHeader() + End Sub + + Public Sub New(ByVal Writer As TextWriter) + MyBase.New(Writer) + EmitHeader() + End Sub + + Public Sub New(ByVal Writer As TextWriter, ByVal Name As String) + MyBase.New(Writer, Name) + EmitHeader() + End Sub + + Protected Sub EmitHeader() + 'Start tracing performance data + MyBase.WriteLine("") + End Sub + + Public Overloads Overrides Sub Write(ByVal Message As String) + If msbBuffer Is Nothing Then + msbBuffer = New StringBuilder() + End If + msbBuffer.Append(Message) + End Sub + + Public Overloads Overrides Sub WriteLine(ByVal Message As String) + If Not (msbBuffer Is Nothing) Then + Message = msbBuffer.ToString & Message + msbBuffer = Nothing + End If + EmitMessage(Message) + End Sub + + Protected Sub EmitMessage(ByVal Message As String) + 'Write performance data + Dim objNow As DateTime = New System.DateTime().Now + Dim objCalledFrom As New StackFrame(4) + MyBase.WriteLine("") + 'Timing data + With objNow + MyBase.WriteLine(CreateTag("time", .ToLongTimeString() & "." & .Millisecond.ToString)) + MyBase.WriteLine(CreateTag("message", Message)) + End With + 'Caller data + With objCalledFrom.GetMethod + MyBase.WriteLine(CreateTag("method", .DeclaringType.FullName & "." & .Name)) + End With + 'Thread data + MyBase.WriteLine(CreateTag("thread", Thread.CurrentThread.Name)) + 'Finish log entry + MyBase.WriteLine("") + End Sub + + Protected Function CreateTag(ByVal TagName As String, ByVal TagContents As String) As String + 'Return an XML tag + Return "<" & TagName & ">" & TagContents & "" + End Function + + Public Overrides Sub Flush() + 'Flush any remaining information to file + If Not (msbBuffer Is Nothing) Then + EmitMessage(msbBuffer.ToString) + msbBuffer = Nothing + End If + 'Don’t forget to chain to MyBase + MyBase.Flush() + End Sub + + Public Overrides Sub Close() + 'Finish tracing performance data + MyBase.WriteLine("") + Me.Flush() + 'Don’t forget to chain to MyBase + MyBase.Close() + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter06/CustomTraceListener/bin/Performance.xml b/Source/VisualStudio2002/Chapter06/CustomTraceListener/bin/Performance.xml new file mode 100644 index 0000000..8742f16 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/CustomTraceListener/bin/Performance.xml @@ -0,0 +1,14 @@ + + + +Entering procedure +CustomTraceListener.Test.Main + + + + +Leaving procedure +CustomTraceListener.Test.Main + + + diff --git a/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/AssemblyInfo.vb new file mode 100644 index 0000000..a4facbb --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln b/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln new file mode 100644 index 0000000..619bb4e --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RemoveDefaultTrace", "RemoveDefaultTrace.vbproj", "{831BA6C7-D44A-4C54-B62F-C12A3D3831C6}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Debug.ActiveCfg = Debug|.NET + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Debug.Build.0 = Debug|.NET + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Release.ActiveCfg = Release|.NET + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.suo b/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.suo new file mode 100644 index 0000000000000000000000000000000000000000..65d48b1621267f4c6d45a48b3d14903c25a14333 GIT binary patch literal 7168 zcmeHML2MgE6#Y(8nuH{!g_aVaEG31sB9YUkX=tF5vreHUZbITV5weh+c;h&=y_UUc zh}s_D$f?}Q2{<63A`aXT5(SA1Afa;Of)JcImLnHp-kaTtT_?7;si6X8qVJiV{WJg1 zpFi*a+5C8G_pcv**8Q7QlvC0yYsEHspsYWDHc6F-M4Hgx^IEZ3bUQ`R+%Eqi3;YFL zTf9BwUhe?4f_8%1Ko5f2K^-9OGikg0e=IO1HvSwjWK6QC^RkMa_FwkFW3)BsN3}|D zw(E=Gj&B0ZVEUR)g%Xvx6y&0eOA56k=kaSn3*BFE*{c5bNK;@J-qK&GM^(m(7xZzK zGmu0Jq-74jZ_2ciehJ#lqgB5ckWab0!Rl8&G4nld>N9cyG9wa}NvztIoRaTg7e>|d zif4~%nj8TNQ?4%6_{#gs@tSSoIQK-KZ{mP%69c$a!~tSJC#Va=_Xq*&d=I1j2xu>8 zALvn#o}(M>$3ahko&+5LJq0pAPlFDE$lHVZ5a?OZb6($Jujc#h(s&E}VRDDJUg#UU z%=~J>iKmSzD`)2&b!1z@aVO4c+h-%=#`OH6l~IqK;Z!_rCylX0%CYlgXq&O-jMH{L zqsFzHb|zM&>l9Lqo-2RM{R z+Z|a=+Q$BS)xU&4)TRL3OCkdmbF7 z+6!{t=@BPA`%^ZHH*L*|xq{A>!kBj+{-5z?E?@H`-tk1%@`Ru#pE&GS{vPn!6~I9o z5;xB(9CO#6#4g04nNeny7;+WnM$A(0U(O-3jKbe9 zVAKiJ9P23mfBRpNM?6Vm6$_9YgO)_+*!r``{nWzMO=AJfv86)nt1S1@S2@=|`Mg6E zd?u8P{qlW_)eKiI7JHi{Fn&#+68ZA?k5<0L^K2{onj{#wEW>h429PF)5LivPRv*B8 z5Pu=G2GMgIzkPT=BuC-EedrlLD}+&DkUQGM+pBWLS6J>x(4GS@)Ag4yW?mf?9)eQH zXW*&~`3xvJ>I|P zi52zXDTwt2@$`av&*wq3ufn2&5hP)R$Q8M1W$enk8#(z>7Q@j?ufi|==xVp@9+In9j*L#XG4dt zFTMKlPanKBwf6Z9bxYxw2l_!C^0SaU2_5p#A&Q#di|^Szbyy}akROIt`IW-YZ4MIa z%^8IY+nDa%Blw9Tgt&JQW>Do?GAqttkF&6#Qh`8Px;BOsjBr6*h|kY>I?H7qoP*a; zhI{+tX<<;RUHJWtxWk;%FaGp`_YH5_^H>d~#^J9PNbBRC%W7GFNvDHb!2fdm)885O z_s3~ipElq*VpOW90r8jX)}^Fb^%i$o-@mGJ`G2Ejv-UsA<$TTH_lw4+GG+fIs;kcI MEn>oUxnCCe8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj.user b/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/Test.vb b/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/Test.vb new file mode 100644 index 0000000..9a76b38 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/RemoveDefaultTrace/Test.vb @@ -0,0 +1,12 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + 'Remove the default trace listener from the listeners collection + 'This method takes either a string containing the listener name + 'or the listener object + Trace.Listeners.Remove("DefaultTraceListener") + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter06/TraceAssert/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter06/TraceAssert/AssemblyInfo.vb new file mode 100644 index 0000000..3223915 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceAssert/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter06/TraceAssert/Test.vb b/Source/VisualStudio2002/Chapter06/TraceAssert/Test.vb new file mode 100644 index 0000000..86f8991 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceAssert/Test.vb @@ -0,0 +1,21 @@ +Option Strict On + +Module Test + + Sub Main() + Dim VbClassic As Int16, VbNet As Int16 + 'Does TRUE have the same value when using + 'VB.Classic functions and VB .NET functions? + VbClassic = CInt(True) + VbNet = Convert.ToInt16(True) + 'This overload just shows the call stack leading to the assertion failure + Trace.Assert(VbClassic = VbNet) + 'This overload adds an brief explanation of the assertion failure + Trace.Assert(VbClassic = VbNet, "Assertion failed: VbClassic(True) <> VbNet(True)") + 'This overload adds a more detailed explanation of the assertion failure + Trace.Assert(VbClassic = VbNet, "Assertion failed: VbClassic(True) <> VbNet(True)", _ + "CInt(True)=" & VbClassic.ToString & _ + " : Convert.ToInt16(True)=" & VbNet.ToString) + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.sln b/Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.sln new file mode 100644 index 0000000..cef6116 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceAssert", "TraceAssert.vbproj", "{DB28045D-F29C-46C5-88B1-1B5A786DC862}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Debug.ActiveCfg = Debug|.NET + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Debug.Build.0 = Debug|.NET + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Release.ActiveCfg = Release|.NET + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.suo b/Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.suo new file mode 100644 index 0000000000000000000000000000000000000000..6a244d75d51e01a25cc65e0cbe597ab3995a90b0 GIT binary patch literal 7168 zcmeHLO>7%Q6n;)pnuH|%p)I9ASxO3NMWZB5N@$=`yiOq{ZbIUc2>IgJ8^@{bwQM&b zYKwp)r*bPN;DCfc9Jq0zJ#YaeRBl`lf)mGZgIcb*lQky(f(H=mZtZ1)D6DoXOFO^D8qX?=y^Z`iYqzxyFd zcv*51C``SYyyPm|EAg6j;yBkt?{DIOt`h^eRKx*dKqt5h%zmVR4Y@~9KL9=mJ_LRg ztj9Ql`s3gyz)ymYf}a8#;HSaIz?AJqc^v$#``qJ}?AxLHajDFilyzOF_uUb?K}nAX03VSyq(Xe_u5T6 zle4o{))}UAHkD1-D}}N^%d3&_1mEj2)2ZCN9m^+-=~On!rrobtSt}n)v+k1uKIOc` z_rcv_(*hss2&yYzOO#Xm6D6)&4U6gkWU> zxR*p8puPT(5cm@yUJx4?p?>DU{jBAvbsj!T;zzBs@JnG}3u;DV+&4xFa6YJ%m9_Z&9P&Y{py2&5USQlNHYW-u#L5vuM)f zI{AnB%&>N}d0z^`BRBPTUpAuBkN(=--&TU;Wg5!wuYO{b9^KgL(5DGV9u63$tKt zdLHvj3cSV?q_Zaj=iuxDup_CQOwCRntfgH9 z_`l`+^B9JD)7>DGSl}gK8nMm`<7;bnT8}n>|IgsnHFr=Gvv-1o7-}KYZOsbYf7Le| z-o^a-zw-Qr{pajJywAL#>Blby_pjah@>l)rRWg@_u~KQZPDK6~JW2e|xi{J+NW84> zmm(twRYA~i-`4F#o>@^Dr>u8Uot`SSGUL~_&B^YRZB_Tq?X+z~&Tac_rx7DOpD<=D z0Eo`7y~uAtv^rj=Mp{O0YZj}HD7;EVb1FN~hJx%Ap+KY#r0^!nGI2RJ^zJTMOO(4U3o zDcF#Q4H1+CW_-`?-b7>)FItdU-ApioxU?bo!Abl@kR_ap1&>9Qs(IASVBxZGiyD{c zSo@a9ol{M(8@zuuo|yD0m*?OdqK4);w?FP=Can6z?{CB%VuxS+c@DBu?y#3IacYer zUM;Y;$Jv)&r~a}{#~Q%@O8nE`8TI$a87vfiz + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.vbproj.user b/Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceAssert/TraceAssert.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/TraceSwitchTest/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/AssemblyInfo.vb new file mode 100644 index 0000000..bbded1f --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter06/TraceSwitchTest/Test.vb b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/Test.vb new file mode 100644 index 0000000..3d9c0af --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/Test.vb @@ -0,0 +1,28 @@ +Option Strict On + +Module Test + + 'Create switch for controlling tracing in hypothetical component and set + 'the boolean for this switch – setting could come from registry or config file + Private tswTraceControl As New Diagnostics.TraceSwitch("SwitchTrace", "Test trace switch") + + Public Sub Main() + 'Create switch for controlling tracing in hypothetical component and set + 'the boolean for this switch – setting could come from registry or config file + tswTraceControl.Level = TraceLevel.Warning + Test() + End Sub + + Public Sub Test() + 'Either check the TraceError, TraceWarning, TraceInfo + 'or TraceVerbose properties + If tswTraceControl.TraceError Then + Trace.WriteLine("Trace only shows if traceswitch is set to show errors") + End If + 'Or check the Level property against the TraceLevel enumeration + If tswTraceControl.Level = TraceLevel.Warning Then + Trace.WriteLine("Trace shows if traceswitch is set to show warnings or errors") + End If + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.sln b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.sln new file mode 100644 index 0000000..fb5873a --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceSwitchTest", "TraceSwitchTest.vbproj", "{CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Debug.ActiveCfg = Debug|.NET + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Debug.Build.0 = Debug|.NET + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Release.ActiveCfg = Release|.NET + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.suo b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.suo new file mode 100644 index 0000000000000000000000000000000000000000..fc4e42a2f4a689b9926dff7c712bba795def3e75 GIT binary patch literal 7168 zcmeHMK};NF6n+cT0s^(w*4k-YWt3^T0E?iA2Q!y|9!pMT!`@BQz8 z|M%WM+_}B?=MO$V^ox|y8L5@kQiD9;=?|ezR`ifa4H~>(EtN{TQv}T&`VV>FPuN;# zuOZiZ7q}k08{7bH0ylym1aqCqJM{nYz^GXGD~cg;$>N%q6|8h{I)I3AyumoCM4#On zzBADDO{f+^Uo)UU2}wyoF3O;!aV^RP{F<=B=`Uz8-``fL3GKmC#w+dc6)bze7$=>B zCVC(vQ~13sV@mrHteHluIvLPUy?Y@VR6jBEU3=(rG7gdnmH?9R9m(#mMW$=Y~$q6pfNT*Z!W6a=2$wFvF42UOuA_0DbO%s zP8nyd{GxiVF={R5tgM;U!!%E%voqFm!4;@`H8C{E_gbQvbZ*K@Iy*^*1xx5SPl`sRUdIiMO5ty7*yUjnU^dOjx0K$#-i z^XN4d`X&9;`1WtreiwgY%7(PeArH{rU`Po32@x-d4U9%#Lp=|;cb!{mor2Hi@JFo^ z@Q(HgJyM;Bzr-VASWx}UQ^YD#xqhOq2^%hA-7KsRb7Cbs+Mu6nK;0xYXq6wEyq1{b$vjXVyisZR&;>=wF+AQ2o?>-45Jx z{X>}hBIeCHWWu(^!cOs9gAn9Ee)xQt2Zg|&9pn=#aqCJB?OTuyxawV;(oH8eKpb=x`HhkL14z^q`G!X2U>Cb z^`g~--xyME2g>MvJddDtO0{~W8*-=cECPuLuGi#hm9!j|B_yew3i<^|PpeJB@OP6v z(|CEZ=W$9W`+_Ig6GV8_NrH7tkAD>-Ux95=*wh6Jqu4H-0k7=sKyQ~lt6t16ikWmk zf-~vF-HYlu?|aa`29I`~)W6+5zDrmMf1I;e43j8=H=;1`hZQ7`b3yUvAY=_Ni4{`@ zZgenCf0D{%f*-)wjm3p#&q{e}IfcOc&9`OKkPpY-gzd-Kzu zoO{13bJ-A9Dx=nk$e)5IiT}B^3@Y-nI$w(PAv6U+zI|Iaj6AcfGLEZvSXED6t<3lv z+orQSW$V?sb31M8lQY{s+fhIU>l4O|3BYjjYZ&>hAHBME?uQH^)%E*J+irw^7Uau^(^VZ5n##*p07h-rN6sh%e^98;Bgg zvGCeQKfM3e=;{|Ahgc!<%LC&e5B*ta9)S&c*pR@LkSwx7aB>f6{5ZsiEE4gt+rW?e zaHA8P$RGS{5yb}JfEEf3_XX!87mG+LhPqb#RI+GTi9(PcMY#AZj_EqOY8DHwx1Osb zz?cc_7>mle;rr1f1T&mY|Sx5JAFVLWmQtm0_I=N+acF7|5g}}ob$K8RPZN`ZeD}G Hr6vCYaTMT) literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj new file mode 100644 index 0000000..caa3796 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj.user b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/TraceToConsole/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter06/TraceToConsole/AssemblyInfo.vb new file mode 100644 index 0000000..5dac7a1 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToConsole/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter06/TraceToConsole/Test.vb b/Source/VisualStudio2002/Chapter06/TraceToConsole/Test.vb new file mode 100644 index 0000000..38175fe --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToConsole/Test.vb @@ -0,0 +1,23 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + 'Create a trace listener that writes trace information to the console + Dim objTraceToConsole As New TextWriterTraceListener(System.Console.Out) + 'Add the new trace listener to the collection of listeners + Trace.Listeners.Add(objTraceToConsole) + 'Write trace information to all listeners, including the console + Trace.WriteLine("This trace information is for all listeners") + 'Write trace information to just the console listener + objTraceToConsole.WriteLine _ + ("This trace information is just for the console listener") + 'Pause application to see console output + Console.ReadLine() + 'Finish and clean up our console listener + objTraceToConsole.Flush() + objTraceToConsole.Close() + objTraceToConsole.Dispose() + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.sln b/Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.sln new file mode 100644 index 0000000..111c80f --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceToConsole", "TraceToConsole.vbproj", "{10886B1B-5C6A-4023-ADAC-D32412E5B9AC}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Debug.ActiveCfg = Debug|.NET + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Debug.Build.0 = Debug|.NET + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Release.ActiveCfg = Release|.NET + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.suo b/Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.suo new file mode 100644 index 0000000000000000000000000000000000000000..cb2b701c1fcbc5d47755f59ed5828b049653e32a GIT binary patch literal 7168 zcmeHMO>7%Q6n;)pnuH{!EiI)$SxQ>cibVMjG*HR0Q`!S*ue7)t&MmT7kcy zYlFRq-0NMSM$m3h6X;=3GpGf`eJ1Uc|IZ3cih(~@PJ1s0abld+sIM^W zjaBpA(Uxy~_^AiJFL2V$uM+n&B+mHIApaY4Cp9`yzO`%104rFXZM}3pM1YlYQF-11h~W17oLqh zf%HbkjKsA`J!Pa#<+2UIh#BFu&9k8~Z7RB~CseaF7>mS>C2e#eW*TWSG|lMq+8HCA zP~(~dMj~Y-^`tdT>r5=UV610chK94@&=|+H1>&*Pyb(z+Xp^zz61#T4q9^rqB+k0W z;`7K?ijCvXf&y|%=HSVOtio@J9dqbg2D+tyYDBbd8AM+gwTOC8+zEh^@NnV}M{K{` zul_Fn1ff9&xVHq2sINC9B>oUDoRjIr0{XJUN2&8zvnBjd>I_!L#QH2NZ5*!BPvS4} zXgl(Wm&7WTLit2p9Xedbz8P2z#>8?lr~~r32iuX)coC*>ltTHVh(SC(JT)=k- zE`~4)7BA0NA)m3@S%0p#<)2CHdR%BfeKBLl;}z7S;IKTEocSl>l)e76ou#;z`MrD5 z%wXk%n2KTXaTZQ>sVY#2a!nyv*_AXKIxu9emlJ6VzdK~3! zwxdpbV>cWxkuQJ0wf-&IvyJSl6U}#3dJs}yz~3NJ9b!VD8staMd@zlSi9W>3b9DUOA7FwVl+MPSF0T3$-F;$Si9 zBEWwiGg#hDyyD;E;C;<@ka2A73NVdWR|?~cOSXECRAK+K82Yl$8Xti5ya8tvhU$oP z+tUK~Utv7qUCgWfx%n6T&+J=`)*6E5A!?#O#@h$5e#R4mI-n}>i&R<0pToD=9zVv&`W#9DVozd{x5D>4x zYvNFY6Z7^*PiBxRU-%yBnxcaoeJsB$mG!$i9ku0CHjDeF zbS)SEobQaz_s1y&a;^dWh*7DM2E<=Wvh`b9s{4jp=-j{D-s)@Hm7go=qQ>tRwMl7m U{yUT_qHKNk4l!Y;Jg61;8_S- + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.vbproj.user b/Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToConsole/TraceToConsole.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/TraceToEventLog/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter06/TraceToEventLog/AssemblyInfo.vb new file mode 100644 index 0000000..aa32d4b --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToEventLog/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter06/TraceToEventLog/Test.vb b/Source/VisualStudio2002/Chapter06/TraceToEventLog/Test.vb new file mode 100644 index 0000000..a4d8324 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToEventLog/Test.vb @@ -0,0 +1,29 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + + 'Create an event log trace listener, give it a name, and configure it + Dim objTraceToAppLog As New EventLogTraceListener("LogTraceListener") + With objTraceToAppLog + 'Write to the Application event log + .EventLog.Log = "Application" + 'Specify source of tracing information + .EventLog.Source = "AppName." & .Name + End With + 'Add the new trace listener to the collection of listeners + Trace.Listeners.Add(objTraceToAppLog) + 'Write trace information to all listeners, + 'including the Application event log + Trace.WriteLine("This trace information is for all listeners") + 'Finish and clean up our console listener + With objTraceToAppLog + .Flush() + .Close() + .Dispose() + End With + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.sln b/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.sln new file mode 100644 index 0000000..da1a871 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceToEventLog", "TraceToEventLog.vbproj", "{DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Debug.ActiveCfg = Debug|.NET + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Debug.Build.0 = Debug|.NET + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Release.ActiveCfg = Release|.NET + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.suo b/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.suo new file mode 100644 index 0000000000000000000000000000000000000000..d91541dbc5033eede95d92c70cda167df0f142d0 GIT binary patch literal 7168 zcmeHMO-x)>6h1Rh3kcL!TWi(&tW+rqfkLeoZ31tg7MVg}_=zDg1M?V$&di(4ycS8@ z7+t!mySlP2OpL}wcW$f;H)>*V=f)UaxvWb!GJfBE@9~D|{Jf!~M#CZJz58?CJ?EZ# z?sx7Te%RRm%SX45{3=CsRvKh8-z*Olvswms#ixOGqX$Yf~~xzlBv8R`oTMz7=mgzsPiMzjv18$iZ;O>87K^wT;=|>9Kl6x5CN5BWchro}5-7$`! z{5bdt@RQ)9;HSVE_-XJlFl9UNJ`R2s{2aIw%=Rwl&GIhQ*8{)nT;ZJ)V`HD5UC&w3 zq&8(_%&euhY-1>DMLBHCe0W@&URp6ys@fJxM3ZJ*8;K<>GfRQyIb%^9HM1%8U5jp} zGG^LH+rzZYCDJi-E$0a|z7`3O^SgFEnaC`f(QHhcN~Gg#+I!AO8`)@*WuFxADOXO6 z-;aTHIU@_$$);S!z9n`nplt={mI0~}(R$@Yv_(*gs(#|mh+IJ*ad#ZGIQna)`?cT0 zpAam`0r%pthxYnILgEkc!i`El_H!S*a@4vApT+S1^=ulYh0=FZ{jcUs22Ui zOJWtNSU*wMfDMX)%i&-iM73&{C4r25$Y7(#@T~Rx+G8mw4 z<}<$4pj95sm2Unk)<3G|9NQMjm4<`wZ)jgQO6~ zT|)e)oRJIXJc&N;$V!pW3;oQ=#9_bs4?yDCvJ`@9JA*h$0|f&nO5MH1)NoQ zHsV<&2VRDC8lst}x68_d8e+#nIfgb%Ibzq7ta6nw^%j>Ga@qtSp+&gVOW(lCC* z-6itnZy&FHgZg|E+k(;&xQeZ#OFxduqj-8KB*G@yD|8iw3}>OCcWD2*Z! z4?wNh$)0e+ zOOHMNHH>@}mg=yrPfp=|8l`UaW@|TE`(Q8IUcw(|-;G+Y41sldS@p9%fbw;CwC|+- z>>nt*gq85ey^Dn~2@70`dUk-nhcS@m48{{v5^i)c&c@kgU`JdzmzwQ7SW3GH@IT=G zPT?2-9>Y*?I2&XF3%d$TBi5C}_|lr~)}uR^|1-Heetf`FS>77ugr$VjF_@!;LvpZ#*)V;HwwhhYJy3ckBkiqi_ zW5xhrxcRjQ`E3}j_StzDGK5sm@2}L|67S^Z-wH<85a5%0nl~RER`cdY@AFjbjX8*# zA7ae5Uzq;s&fV7Vd&h5n75wnvA8Ko5za1MoadY+cPky}h&eY}?pDL6f@@&6>MPLO_ zfFcS0EWsej!nicdnnYI?22zA5jUT%^s)$VBLjyAF{0W0g#iJ}I%84ywdF+kinILkp z+L#fpK4(}9x^Un#$&O5`-AR4Ka(Q1HQdu&`TckA6)@(n^YxR1bN7221d#yV!)vCWx(_d;B&3XU; literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.vbproj b/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.vbproj new file mode 100644 index 0000000..77d226a --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.vbproj.user b/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToEventLog/TraceToEventLog.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/TraceToText/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter06/TraceToText/AssemblyInfo.vb new file mode 100644 index 0000000..307f6ec --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToText/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter06/TraceToText/Test.vb b/Source/VisualStudio2002/Chapter06/TraceToText/Test.vb new file mode 100644 index 0000000..464ca21 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToText/Test.vb @@ -0,0 +1,22 @@ +Option Strict On +Imports System.IO + +Class Test + + Public Shared Sub Main() + + 'Create a trace listener that writes trace information to a text file + Dim objTextFile As Stream = File.Create("TraceListener.txt") + Dim objTraceToText As New TextWriterTraceListener(objTextFile) + 'Add the new trace listener to the collection of listeners + Trace.Listeners.Add(objTraceToText) + 'Write trace information to all listeners, including the text file + Trace.WriteLine("This trace information is for all listeners") + 'Finish and clean up our console listener + objTraceToText.Flush() + objTraceToText.Close() + objTraceToText.Dispose() + + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.sln b/Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.sln new file mode 100644 index 0000000..c600440 --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceToText", "TraceToText.vbproj", "{32485B72-9BD6-46CE-BA3D-A685907A58D2}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Debug.ActiveCfg = Debug|.NET + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Debug.Build.0 = Debug|.NET + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Release.ActiveCfg = Release|.NET + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.suo b/Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.suo new file mode 100644 index 0000000000000000000000000000000000000000..44c57af769ad8f24983aebceb9788350bf414793 GIT binary patch literal 7168 zcmeHMO>7%Q6n=J6nuMgKr7fjESxO3NAd%CiP18W7#7>|kY0|_c5%R@}H;xnAYuRqn zsO+R0WzMc2x z&71GdtiQj%@8=Kh9{EK|=)5$@+Iq7*RM752nXKp$5kCs7udT1I>qZe2cj!Olfj?kt zqdkY5>s{a`@NRH3xE0(2ei+PoChySy#{-jM;g=Ufh9!-AR#q|7-sun`#_>i&jn@LX zFFzY;{mQ507*L?FL?tInGAaq&^Ku1O6IM9wIW1Q4+Ae+{aftCsJ1Pp6JYbBIEzKH`)nHb=#e_}x!c#r)YDPTkHQIrpW4}uSY9|Jpm z96|XB@RQ)Dz(>JPgAMRA;A3FQw&Q*r{2cgsa0i&}o%WsO9ok+G{1)U4*H4U%y}|5i zE+0)AlV--s=GBsI3`O%%cH1&DHfl`GEtn})Z3`u$Nh@v)#}aufOM&KTbJiHKvMKdm zOVCPXthAZd-Ly?7(lKi#=L$5w8XgJh_JFkxJdyY~QN= zF8+jIOAfdfM;@TP-jI;^L%eXJvZlch;5v5XsC5=Ti{nSF)9_9n{#j7gI8v4G#9!jk zX7m#;iB+Uh{X|_8HY{P@EO>)Cv04u5fPT)wX7n>(T%vMNss3Ta1EYsglYj;3s@jQ_ zejjx+pYg6bt#M(lbn;)R{t-3iSWzTb>kj%i#_m-=b>FfBw^aWa#-75sxeuAPZLx$| zuspq3hkoYju-zT~t=DH7vz`==KdE9*=i^0`=O7VOb3w`Ch&X5apJOMLx3ai(AF7N& zQV9LdA^uZ#&xK>2z%#DMYLO6te&%H2uvh*2Av<0I9L)d3&5H`h^w{H=g(xgD3cM1* zUWI!j?p1Q&d01y)55wKtRpmhgv6DwRhBiyO5$VJ5b_6nW(uX_W)rj}jKcbI#lEf(H zp*aF8iO!LYy2!t2g|@AJ^oIjMetj#tZl$fLqrbVbOB8&@l$yixZKK(MP+ni}@Jqw! zEoYU;=f8fq@-^x+O>Fba0pE2wB`2j<&dO;d;69YQq#vaa(rg#n&tS<8qckLgkPM+T zh&D?1BNg|db{e%1-n%I`Dx~FZSw?cos9;}&)SOxz40|`pGgXx)c^;#5lFvhyprMmI zOFZQ0es7@1>(C#BJw31{2&)3HlXtdup|uAVvh6H>L5!mdwE%1npw_RRv)+sHO?a^9 zq`sc&^*n3U@W(leg)o>rxEyuYfxm~*kzsen9a9qSbTCfi>^!g|uAEHGIuDl9E&}}b zIo~O~;@{)w>J58=jAMcqfoa6LN*G^Wvu-_F$M~P6exH6nh|%)|oKqNTBGYZo3Y>q1 z`GjXNuj4P=e_{RU6=?V2>QKMGG0|12ITyqzc z3vn6mxit0Ty$7vhZy&$?h5x;SzpJH{{pRA}iQ9{>ee}coZ%(d#ddJ7eCi0X&fr%{f zvjl@A3**u-YXSylVPF_{qBcHux7QFE$BQOpR{05oQ^l<;2g-rXV|w&LaZM1pT&vG8 z;@d)Z@6bN?O&%XLR4^YgBt-6ZDv<@4%?RNRtZ*RQRj1IN#tbMci`_A(V2ESpSUr9Q zyln9NyVb;4@V^37Z-!>>Gp2T^UJp2@9G-(R2qVUbKK&EPxnZeJ{Qk + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.vbproj.user b/Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToText/TraceToText.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter06/TraceToText/bin/TraceListener.txt b/Source/VisualStudio2002/Chapter06/TraceToText/bin/TraceListener.txt new file mode 100644 index 0000000..913e28a --- /dev/null +++ b/Source/VisualStudio2002/Chapter06/TraceToText/bin/TraceListener.txt @@ -0,0 +1 @@ +This trace information is for all listeners diff --git a/Source/VisualStudio2002/Chapter07/DebugAddIn/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter07/DebugAddIn/AssemblyInfo.vb new file mode 100644 index 0000000..65078ef --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/DebugAddIn/AssemblyInfo.vb @@ -0,0 +1,36 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +'TODO: Review the values of the assembly attributes + + + + + + + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Revision +' Build Number +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + + + + + + +' Note: A strong name key has been generated. If you wish to use it, uncomment the following line: +' diff --git a/Source/VisualStudio2002/Chapter07/DebugAddIn/Connect.vb b/Source/VisualStudio2002/Chapter07/DebugAddIn/Connect.vb new file mode 100644 index 0000000..fc4c4e6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/DebugAddIn/Connect.vb @@ -0,0 +1,83 @@ +Imports Microsoft.Office.Core +imports Extensibility +imports System.Runtime.InteropServices +Imports EnvDTE + +#Region " Read me for Add-in installation and setup information. " +' When run, the Add-in wizard prepared the registry for the Add-in. +' At a later time, if the Add-in becomes unavailable for reasons such as: +' 1) You moved this project to a computer other than which is was originally created on. +' 2) You chose 'Yes' when presented with a message asking if you wish to remove the Add-in. +' 3) Registry corruption. +' you will need to re-register the Add-in by building the DebugAddInSetup project +' by right clicking the project in the Solution Explorer, then choosing install. +#End Region + + _ +Public Class Connect + + Implements Extensibility.IDTExtensibility2 + Implements IDTCommandTarget + + Dim applicationObject As EnvDTE.DTE + Dim addInInstance as EnvDTE.AddIn + + Public Sub OnBeginShutdown(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnBeginShutdown + End Sub + + Public Sub OnAddInsUpdate(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnAddInsUpdate + End Sub + + Public Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete + End Sub + + Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection + End Sub + + Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection + + applicationObject = CType(application, EnvDTE.DTE) + addInInstance = CType(addInInst, EnvDTE.AddIn) + If connectMode = Extensibility.ext_ConnectMode.ext_cm_UISetup Then + Dim objAddIn As AddIn = CType(addInInst, AddIn) + Dim CommandObj As Command + + ' When run, the Add-in wizard prepared the registry for the Add-in. + ' At a later time, the Add-in or its commands may become unavailable for reasons such as: + ' 1) You moved this project to a computer other than which is was originally created on. + ' 2) You chose 'Yes' when presented with a message asking if you wish to remove the Add-in. + ' 3) You add new commands or modify commands already defined. + ' You will need to re-register the Add-in by building the DebugAddInSetup project, + ' right-clicking the project in the Solution Explorer, and then choosing install. + ' Alternatively, you could execute the ReCreateCommands.reg file the Add-in Wizard generated in + ' the project directory, or run 'devenv /setup' from a command prompt. + Try + CommandObj = applicationObject.Commands.AddNamedCommand(objAddIn, "DebugAddIn", "DebugAddIn", "Executes the command for DebugAddIn", True, 59, Nothing, 1 + 2) '1+2 == vsCommandStatusSupported+vsCommandStatusEnabled + CommandObj.AddControl(applicationObject.CommandBars.Item("Tools")) + Catch e as System.Exception + End Try + End If + End Sub + + Public Sub Exec(ByVal cmdName As String, ByVal executeOption As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As Object, ByRef handled As Boolean) Implements IDTCommandTarget.Exec + handled = False + If (executeOption = vsCommandExecOption.vsCommandExecOptionDoDefault) Then + If cmdName = "DebugAddIn.Connect.DebugAddIn" Then + 'Here is the active code + MsgBox("The add-in debugging demo is born", MsgBoxStyle.OKOnly Or MsgBoxStyle.Information, "Welcome") + handled = True + Exit Sub + End If + End If + End Sub + + Public Sub QueryStatus(ByVal cmdName As String, ByVal neededText As vsCommandStatusTextWanted, ByRef statusOption As vsCommandStatus, ByRef commandText As Object) Implements IDTCommandTarget.QueryStatus + If neededText = EnvDTE.vsCommandStatusTextWanted.vsCommandStatusTextWantedNone Then + If cmdName = "DebugAddIn.Connect.DebugAddIn" Then + statusOption = CType(vsCommandStatus.vsCommandStatusEnabled + vsCommandStatus.vsCommandStatusSupported, vsCommandStatus) + Else + statusOption = vsCommandStatus.vsCommandStatusUnsupported + End If + End If + End Sub +End Class diff --git a/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.sln b/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.sln new file mode 100644 index 0000000..79a3573 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugAddIn", "DebugAddIn.vbproj", "{535259D0-3BAD-4EA0-8E16-9FC33E98294F}" +EndProject +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "DebugAddInSetup", "DebugAddInSetup\DebugAddInSetup.vdproj", "{456DEF88-8A39-4CF8-9BF8-CF25DBBEDDA6}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Debug.ActiveCfg = Debug|.NET + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Debug.Build.0 = Debug|.NET + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Release.ActiveCfg = Release|.NET + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Release.Build.0 = Release|.NET + {456DEF88-8A39-4CF8-9BF8-CF25DBBEDDA6}.Debug.ActiveCfg = Debug + {456DEF88-8A39-4CF8-9BF8-CF25DBBEDDA6}.Release.ActiveCfg = Release + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.suo b/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.suo new file mode 100644 index 0000000000000000000000000000000000000000..959ddb2068acd63280cb3b01fa9cfcba07c6c535 GIT binary patch literal 9216 zcmeI1OKj9d9LJ}n$U`22f(W9kf;^S4!vx<+tRY#ZMMrRK*Yp& zFdjS^JP9!-M&rT60~ayTlSTva;>8&C;t`Ktq<+3LJGin{ow>ljUG4t!UfY2lljN5+0n=d;yi?{Jr&~U( zHuJMOFMCi54qaWB>|XL!)jT>~TJCxtHW4#!PMQN|n0MM7;TdBVo<3e`K-xB#YCE3f zReL{8_iVHJ3);+f6Ee-F-Rz*;XzD42DYuwb(`27v>TS?lO^{~@4AT;%k69dcO>ICAZpXXWAYgd1o-58)WJp|w{ot0jeyMCS1yP2V-ze1gfw*#ts z8_)z@b?Lusfoy>EU&kk&YFn9ktGtTxYVc8T4fq(i7HkI9zMl6J;FDkgdm zKYP&Gbt0{Cq_r2@AsvpHQLIT6Y8shNl^k5YWqBxdZaf`{2YO;-$yC~^d`&o#j_Aw9 z$GZ*$dIwI#Ms0OzcsLSI4h1@*!|9|QdeO01f1op&8nxdo4kbs&l8IQt4YTyva3Y#K zGoI^E^U~q20~&Z)C_X&apNyoUfu7;SkVp$&j3r{JNL=MIp{mS&Q+3n#FMuJWw2vK3 znp5nUbiWVU39RFo-O&`%z5`mAmVWvSVUwc#_F=XA_+H~^FZC`qCr_829|k?YedZ`! zyBPNne3NjK^-Xhn*BdvXX9r%^;`B=ws0o=wO{fXf^T*aHLYu=Ah}F{PA;7+4zU*zY)K$%VaAd5E_P+W%H}w; z7-W9}$grY^Q}m8g>xFj8+Mgt~I@66cI?R_x`A#~duhUj*UjK(UN~YqhWDwqc%v2iQ zm#rJ~@6Dr7{yK<3WPN0HhV3brl0NzB>MF^eyolbsrUmu&@mC>#`H}=@mv0G64G90N z?3c@5cJiGnH)%giNdWCe@EHux)UQcP4X{}uF=4Hjs>3GH-kI*(i52tbJIoTrY%9tFg8+vobqOG#F~melo4|$2P)4AS+PX`vWK3N^Cew3{Zx}CJFl4^WAEHejxs)ZS zNB)!(C_gAy{^a{!mB9x}@%Oo4*iJm+J}7wB!Cxn3g}+SsUq^rCG6LC|I9ux1==5xm zRS!XRTjuPb>tFap|E>L-3IE3#S_%!*tsdT)MXMX*OS=hgA46x4+GFhJb zkh^?Ws&GE%O1(TflO!37B6Thtm9#13S2(JaUh+6fTO3Ifb&!pAQhfn=K92?{m2N%VpVlb?hk)}-80@ZHD3m7>|; z$dR&7-zI`=aTiOBTM1C)5aA@W=&`H?Hf9gEp@LnoG)%s7>R-pEov{&1j_*P1ee=00 z!Yn>FcNFTo(B{pRoZBvLH!8i_9>hYqqC_NyAo%F44gqPmdal^Jojy@`=k{H>dnMOa zmuGg%pM^X9Am`uA_Z=8;38)Nx8$#MjDTug=DwE%yDTyLi5r)#vSMEls8RK8x>FW;T zJR?_*>*Q0IZtr!MQd$1FsB1djvh8g)0vg6N#n|0JY^9TT`R?3Ey5X5QC{9_{-TUM9 zTT8m$+<5tm>i1Utp*t*-`g(ucmdhhAfB3_d*LrSW`^Xv+-E8GJ%3Z$_Fy!yfJu4r{ zW$%*X!tA}cx%3(PTdZy_w*Zr8=I#cRMLTO&{O%xxra5!194dw_nwb~k{?+LIPj<9i z|DT`#yG(BctvHL-i?f5uf0g~q5-Z*<4Z8moU&XZL@~@@uubE+w;F`o$?kfiR`FIys zn!D~UXYT*=*YEGS{rz_@QlmZ49fYEisqzj#FYUk9?ZMMay&Gus`BzRpm@23u8J33R7k1nrGpj7njuHROLo4tkB(o10M(I4%$N% z1#o#EN<@r>RT~I)ECvE2^A`R5bF$eH+u{tgNE5*+Fh{cZ2+v(p250 zm8+@Fhv**n?poiSXXMZC{X3if7Zjym+ljEkJUeVutA95YX||DMwb9yQ%SzGo@2IXc mnu%xIC<*lcr*i3;_@74l`}-%2F<0=s^`7fkv-$pB=KmLYIh7Fr literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.vbproj b/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.vbproj new file mode 100644 index 0000000..a218e6f --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.vbproj @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.vbproj.user b/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.vbproj.user new file mode 100644 index 0000000..802dbed --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddIn.vbproj.user @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddInSetup/DebugAddInSetup.vdproj b/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddInSetup/DebugAddInSetup.vdproj new file mode 100644 index 0000000..171587b --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/DebugAddIn/DebugAddInSetup/DebugAddInSetup.vdproj @@ -0,0 +1,1108 @@ +"DeployProject" +{ +"VSVersion" = "3:700" +"ProjectType" = "8:{5443560c-dbb4-11d2-8724-00a0c9a8b90c}" +"IsWebType" = "8:FALSE" +"ProjectName" = "8:DebugAddInSetup" +"LanguageId" = "3:1033" +"CodePage" = "3:1252" +"UILanguageId" = "3:1033" +"SccProjectName" = "8:" +"SccLocalPath" = "8:" +"SccAuxPath" = "8:" +"SccProvider" = "8:" + "Hierarchy" + { + "Entry" + { + "MsmKey" = "8:_0D33446DB35ABE39380F913BAE2C5E18" + "OwnerKey" = "8:_BCD80AE2D938269E96F87AF8A272F370" + "MsmSig" = "8:office_736ce26e3972ad23e1298f97ce43db19" + } + "Entry" + { + "MsmKey" = "8:_0D33446DB35ABE39380F913BAE2C5E18" + "OwnerKey" = "8:_A18D22CB7CF548E99EF4F3A51C564401" + "MsmSig" = "8:office_736ce26e3972ad23e1298f97ce43db19" + } + "Entry" + { + "MsmKey" = "8:_558FE741FD1E46CE401F7BA1D72B6167" + "OwnerKey" = "8:_BCD80AE2D938269E96F87AF8A272F370" + "MsmSig" = "8:C:\\PROGRAM FILES\\COMMON FILES\\MICROSOFT SHARED\\MSENV\\DTE.OLB" + } + "Entry" + { + "MsmKey" = "8:_678125EF90053A6ECC714C2E5364CE99" + "OwnerKey" = "8:_A18D22CB7CF548E99EF4F3A51C564401" + "MsmSig" = "8:extensibility_8c9c6e3362c636948ff73615c81d6576" + } + "Entry" + { + "MsmKey" = "8:_A18D22CB7CF548E99EF4F3A51C564401" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:C:\\DOCUMENTS AND SETTINGS\\ADMINISTRATOR\\MY DOCUMENTS\\VISUAL STUDIO PROJECTS\\DEBUGADDIN\\OBJ\\DEBUG\\DEBUGADDIN.DLL" + } + "Entry" + { + "MsmKey" = "8:_BCD80AE2D938269E96F87AF8A272F370" + "OwnerKey" = "8:_A18D22CB7CF548E99EF4F3A51C564401" + "MsmSig" = "8:envdte_d890e65cda365bb06db21a11aabba008" + } + "Entry" + { + "MsmKey" = "8:_F293FC85A07EACA34FA466B4955CB861" + "OwnerKey" = "8:_BCD80AE2D938269E96F87AF8A272F370" + "MsmSig" = "8:stdole_c209afdbbe385f6128d9c8ea2a9f992d" + } + "Entry" + { + "MsmKey" = "8:_F293FC85A07EACA34FA466B4955CB861" + "OwnerKey" = "8:_0D33446DB35ABE39380F913BAE2C5E18" + "MsmSig" = "8:stdole_c209afdbbe385f6128d9c8ea2a9f992d" + } + "Entry" + { + "MsmKey" = "8:_FD15B18949EE432D83E8F0BE5E724F4B" + "OwnerKey" = "8:_678125EF90053A6ECC714C2E5364CE99" + "MsmSig" = "8:mondo.E4183BB4_18A8_11D5_A549_0090278A1BB8" + } + "Entry" + { + "MsmKey" = "8:_FD15B18949EE432D83E8F0BE5E724F4B" + "OwnerKey" = "8:_A18D22CB7CF548E99EF4F3A51C564401" + "MsmSig" = "8:mondo.E4183BB4_18A8_11D5_A549_0090278A1BB8" + } + "Entry" + { + "MsmKey" = "8:_FD15B18949EE432D83E8F0BE5E724F4B" + "OwnerKey" = "8:_0D33446DB35ABE39380F913BAE2C5E18" + "MsmSig" = "8:mondo.E4183BB4_18A8_11D5_A549_0090278A1BB8" + } + "Entry" + { + "MsmKey" = "8:_FD15B18949EE432D83E8F0BE5E724F4B" + "OwnerKey" = "8:_BCD80AE2D938269E96F87AF8A272F370" + "MsmSig" = "8:mondo.E4183BB4_18A8_11D5_A549_0090278A1BB8" + } + "Entry" + { + "MsmKey" = "8:_FD15B18949EE432D83E8F0BE5E724F4B" + "OwnerKey" = "8:_F293FC85A07EACA34FA466B4955CB861" + "MsmSig" = "8:mondo.E4183BB4_18A8_11D5_A549_0090278A1BB8" + } + } + "Configurations" + { + "Debug" + { + "DisplayName" = "8:Debug" + "IsDebugOnly" = "11:TRUE" + "IsReleaseOnly" = "11:FALSE" + "OutputFilename" = "8:Debug\\DebugAddInSetup.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + } + "Release" + { + "DisplayName" = "8:Release" + "IsDebugOnly" = "11:FALSE" + "IsReleaseOnly" = "11:TRUE" + "OutputFilename" = "8:Release\\DebugAddInSetup.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + } + } + "Deployable" + { + "CustomAction" + { + } + "DefaultFeature" + { + "Name" = "8:DefaultFeature" + "Title" = "8:" + "Description" = "8:" + } + "Feature" + { + } + "File" + { + "{C7BF5952-4B9D-11D3-8E24-00C04F6837D0}:_0D33446DB35ABE39380F913BAE2C5E18" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Office, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_0D33446DB35ABE39380F913BAE2C5E18" + { + "Name" = "8:Office.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Office.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{54DA9790-1474-11D3-8E00-00C04F6837D0}:_558FE741FD1E46CE401F7BA1D72B6167" + { + "Signature" = "8:20000000002ea1978b95c101909bd683af14c201002ea1978b95c1010000000000e0050000000000000000006400740065002e006f006c006200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "SourcePath" = "8:dte.olb" + "TargetName" = "8:dte.olb" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{C7BF5952-4B9D-11D3-8E24-00C04F6837D0}:_678125EF90053A6ECC714C2E5364CE99" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Extensibility, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_678125EF90053A6ECC714C2E5364CE99" + { + "Name" = "8:Extensibility.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Extensibility.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{C7BF5952-4B9D-11D3-8E24-00C04F6837D0}:_BCD80AE2D938269E96F87AF8A272F370" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:EnvDTE, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_BCD80AE2D938269E96F87AF8A272F370" + { + "Name" = "8:EnvDTE.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:EnvDTE.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{C7BF5952-4B9D-11D3-8E24-00C04F6837D0}:_F293FC85A07EACA34FA466B4955CB861" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:TRUE" + "AssemblyAsmDisplayName" = "8:stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_F293FC85A07EACA34FA466B4955CB861" + { + "Name" = "8:stdole.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:stdole.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + } + "FileType" + { + } + "Folder" + { + "{777C097F-0ED8-11D3-8D6C-00A0C9CFCEE6}:_752873E334AC42F28BA930688B96759E" + { + "Name" = "8:#1919" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:ProgramMenuFolder" + "Folders" + { + } + } + "{777C097F-0ED8-11D3-8D6C-00A0C9CFCEE6}:_B77B8CC82F544E14958EA25C687EBC48" + { + "Name" = "8:#1916" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:DesktopFolder" + "Folders" + { + } + } + "{EE62640D-12F2-11D3-8D6C-00A0C9CFCEE6}:_CDE300ED3B194097AE33ECB71ECE9B7F" + { + "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]" + "Name" = "8:#1925" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:TARGETDIR" + "Folders" + { + } + } + } + "LaunchCondition" + { + "{B26CFB94-18E3-45BF-8D42-933BDAF5E76C}:_0DEF9CE8DF624E3593347BAA24F85D79" + { + "Name" = "8:MsiNetAssemblySupport" + "Condition" = "8:MsiNetAssemblySupport" + "Message" = "8:[VSDNETMSG]" + } + } + "Locator" + { + } + "Shortcut" + { + } + "Sequences" + { + } + "Registry" + { + "HKLM" + { + "Keys" + { + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_D8629588BB434B99AFF1B48A49CB55F6" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_69989357966443E881ABD5623DDA1BE3" + { + "Name" = "8:Microsoft" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_09A6D1EA72204C8F95507099738A41DE" + { + "Name" = "8:VSA" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_273AAC7056794D72975B80AA8D6C91D0" + { + "Name" = "8:7.0" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_F83464988848477BAF60E13BD25C51A0" + { + "Name" = "8:AddIns" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_760A9241284549849D704A7092BB9869" + { + "Name" = "8:DebugAddIn.Connect" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_11947A1EA185469590A77AF750773B0E" + { + "Name" = "8:Description" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:Demonstrate add-in debugging" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_3E878CE40D6141BC8DA290F9FB5D7D60" + { + "Name" = "8:LoadBehavior" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:1" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_7A2F3F5E81E24C36BBD71FA51E9462B8" + { + "Name" = "8:AboutBoxIcon" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:4" + "Value" = "8:0000010002002020100000000000E8020000260000001010100000000000280100000E0300002800000020000000400000000100040000000000800200000000000000000000000000000000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ABA00000000000000000000000000000BAB00000000000000000000000000000ABA00000000000000000000000F00000BAB00000000000008888888888F0ABABABABABA0000000008F77777777F0BABABABABAB0000000008F77777777F0ABABABABABA0000000008F77777777F00000BAB00000000000008F77777777FFFFF0ABA00000008880008F777777777777F0BAB00000887788008F777777777777F0ABA000008FF770778F777777777777F0000000008FFF78088F777777777777FFFFFF000008FF70008F7777777777777777800000008880008F7777777777777777800000000000008F7777777777777777800000000000008F7777777777777777800000000000008F7777777777777777800000000000008FFFFFFFFFFFFFFFFF800000000000008888888888888888888000000000000000000870000008700000000000000000000008F0000008F000000000000000000000008000000080000000000000000000000808000008080000000000000000000877788008777880000000000000000008FF778008FF7780000000000000000008FFF78008FFF7800000000000000000008FF700008FF7000000000000000000000777000007770000000000000000000000000000000000000000FFFFFFFFFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFF000000FF000000FF000000FF000000FF000000C700000F8300000F0000000F0000000F0000000F8300000FC700000FFF00000FFF00000FFF00000FFF00000FFF00000FFFF8F8FFFFF8F8FFFFF8F8FFFFF0707FFFE0203FFFE0203FFFE0203FFFF0707FFFF8F8FFFFFFFFFF2800000010000000200000000100040000000000C00000000000000000000000000000000000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000000000000000000000000000000000000000A000000000000000B00000000000F0ABABA000008F88F000B00000008F77FFF0A00070708F7777F000000F008F7777FFFF0070708F777777800000008FFFFFFF800000008888888880000000000000000000000000070700000000000000F00000000000000707000000FFFF0000FFE30000FFE30000FF800000F0000000F0000000F0030000100300000003000010030000F0030000F0030000FF7F0000FE3F0000FE3F0000FE3F0000" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_8FEFF79061BA49B08795EDCEF0FAD25C" + { + "Name" = "8:CommandLineSafe" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:0" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_A7C4E07C9B3049C28FB2C27A063E04F1" + { + "Name" = "8:FriendlyName" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:Debug AddIn" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_AE28F0AFA43741458B1449FB88335D41" + { + "Name" = "8:CommandPreload" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:1" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_DC92F045E0DD4F048CC51E5AEB57B049" + { + "Name" = "8:AboutBoxDetails" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:This Visual Studio .NET add-in is a debugging demonstration" + } + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_EFB6A2CFDF204BFF845AFADBF144FB32" + { + "Name" = "8:VisualStudio" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_5D224508FB724B778F87AE714E8EB555" + { + "Name" = "8:7.0" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_0D86E33CA23741F8BBD2C390AC4ED8B6" + { + "Name" = "8:AddIns" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_F9CE86043D2B48369CE7E86AA726972E" + { + "Name" = "8:DebugAddIn.Connect" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_058E8ADEBEBC4DA5BFA240CF913CD84C" + { + "Name" = "8:AboutBoxIcon" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:4" + "Value" = "8:0000010002002020100000000000E8020000260000001010100000000000280100000E0300002800000020000000400000000100040000000000800200000000000000000000000000000000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ABA00000000000000000000000000000BAB00000000000000000000000000000ABA00000000000000000000000F00000BAB00000000000008888888888F0ABABABABABA0000000008F77777777F0BABABABABAB0000000008F77777777F0ABABABABABA0000000008F77777777F00000BAB00000000000008F77777777FFFFF0ABA00000008880008F777777777777F0BAB00000887788008F777777777777F0ABA000008FF770778F777777777777F0000000008FFF78088F777777777777FFFFFF000008FF70008F7777777777777777800000008880008F7777777777777777800000000000008F7777777777777777800000000000008F7777777777777777800000000000008F7777777777777777800000000000008FFFFFFFFFFFFFFFFF800000000000008888888888888888888000000000000000000870000008700000000000000000000008F0000008F000000000000000000000008000000080000000000000000000000808000008080000000000000000000877788008777880000000000000000008FF778008FF7780000000000000000008FFF78008FFF7800000000000000000008FF700008FF7000000000000000000000777000007770000000000000000000000000000000000000000FFFFFFFFFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFF000000FF000000FF000000FF000000FF000000C700000F8300000F0000000F0000000F0000000F8300000FC700000FFF00000FFF00000FFF00000FFF00000FFF00000FFFF8F8FFFFF8F8FFFFF8F8FFFFF0707FFFE0203FFFE0203FFFE0203FFFF0707FFFF8F8FFFFFFFFFF2800000010000000200000000100040000000000C00000000000000000000000000000000000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000000000000000000000000000000000000000A000000000000000B00000000000F0ABABA000008F88F000B00000008F77FFF0A00070708F7777F000000F008F7777FFFF0070708F777777800000008FFFFFFF800000008888888880000000000000000000000000070700000000000000F00000000000000707000000FFFF0000FFE30000FFE30000FF800000F0000000F0000000F0030000100300000003000010030000F0030000F0030000FF7F0000FE3F0000FE3F0000FE3F0000" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_66BFFC4A036F475F8630545DE4F7F84E" + { + "Name" = "8:AboutBoxDetails" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:This Visual Studio .NET add-in is a debugging demonstration" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_94963B340CE84207BF19AA8403B83E9B" + { + "Name" = "8:CommandLineSafe" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:0" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_B6F46FA7092B4CB19031659BD70DB93C" + { + "Name" = "8:Description" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:Demonstrate add-in debugging" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_BDFB3C729CE84D42AECADBDAA31673F4" + { + "Name" = "8:LoadBehavior" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:1" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_D50A998B828C4589BFABB1E3E4BD6D56" + { + "Name" = "8:CommandPreload" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:1" + } + "{B73D4F5A-FF29-11D2-8D6B-00A0C9CFCEE6}:_F5DE8AC508494456A4773705B4A1C6FD" + { + "Name" = "8:FriendlyName" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:Debug AddIn" + } + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCU" + { + "Keys" + { + "{7DF0CD0A-FF27-11D2-8D6B-00A0C9CFCEE6}:_6B40E74C6A3648E19EC5C00FD7DA0A53" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + } + "HKCR" + { + "Keys" + { + } + } + "HKU" + { + "Keys" + { + } + } + "HKPU" + { + "Keys" + { + } + } + } + "ProjectOutput" + { + "{B1E2BB22-187D-11D3-8E02-00C04F6837D0}:_A18D22CB7CF548E99EF4F3A51C564401" + { + "SourcePath" = "8:..\\obj\\Debug\\DebugAddIn.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:2" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectCanonicalName" = "8:DebugAddIn.vbproj" + "OutputProjectGuid" = "8:{535259D0-3BAD-4EA0-8E16-9FC33E98294F}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + } + "Product" + { + "Name" = "8:Microsoft Visual Studio" + "ProductName" = "8:DebugAddInSetup" + "ProductCode" = "8:{3D050B02-F6BD-4803-BCF5-8FE325A4F971}" + "PackageCode" = "8:{7E2C78B2-2B27-4375-BD94-1DCCD3675BAC}" + "UpgradeCode" = "8:{6FB60611-7F9C-44AB-8E9B-799CE6399B7D}" + "RestartWWWService" = "11:FALSE" + "RemovePreviousVersions" = "11:FALSE" + "DetectNewerInstalledVersion" = "11:TRUE" + "ProductVersion" = "8:1.0.0" + "Manufacturer" = "8:Sleek Software Ltd" + "ARPHELPTELEPHONE" = "8:" + "ARPHELPLINK" = "8:" + "Title" = "8:DebugAddInSetup" + "Subject" = "8:" + "ARPCONTACT" = "8:Sleek Software Ltd" + "Keywords" = "8:" + "ARPCOMMENTS" = "8:" + "ARPURLINFOABOUT" = "8:" + "ARPPRODUCTICON" = "8:" + "ARPIconIndex" = "3:0" + "SearchPath" = "8:" + "UseSystemSearchPath" = "11:TRUE" + } + "MsiBootstrapper" + { + "LangId" = "3:1033" + } + "MergeModule" + { + "{AC8774A4-3E09-11D3-8E14-00C04F6837D0}:_FD15B18949EE432D83E8F0BE5E724F4B" + { + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:TRUE" + "SourcePath" = "8:dotnetfxredist_x86_enu.msm" + "ModuleSignature" = "8:mondo.E4183BB4_18A8_11D5_A549_0090278A1BB8" + "Properties" + { + } + "LanguageId" = "3:1033" + "Exclude" = "11:TRUE" + "Folder" = "8:" + "Feature" = "8:" + "IsolateTo" = "8:" + } + } + "UserInterface" + { + "{E4ECAB26-4AB7-11D3-8D78-00A0C9CFCEE6}:_6218B88E89FE478E8B64EE267D46CFB2" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdUserInterface.wim" + "ModuleSignature" = "8:VsdUserInterface.524F4245_5254_5341_4C45_534153783400" + } + "{7DFFC192-4ABE-11D3-8D78-00A0C9CFCEE6}:_6C6A2019794A428AAC594CF1F4D0D8D0" + { + "Name" = "8:#1901" + "Sequence" = "3:2" + "Attributes" = "3:2" + "Dialogs" + { + "{E4ECAB24-4AB7-11D3-8D78-00A0C9CFCEE6}:_3DDA4B78A4D44F9EA0C350450DFFBB62" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminProgressDlg.wid" + "ModuleSignature" = "8:VsdDialogs.EE9A1AFA_41DD_4514_B727_DF0ACA1D7389" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{7DFFC192-4ABE-11D3-8D78-00A0C9CFCEE6}:_7B0B0E38D1C04BFAB059184A451012ED" + { + "Name" = "8:#1902" + "Sequence" = "3:2" + "Attributes" = "3:3" + "Dialogs" + { + "{E4ECAB24-4AB7-11D3-8D78-00A0C9CFCEE6}:_032AE689439C4F52B1646CEC625D44BA" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" + "ModuleSignature" = "8:VsdDialogs.83D22742_1B79_46f6_9A99_DF0F2BD4C077" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{7DFFC192-4ABE-11D3-8D78-00A0C9CFCEE6}:_9A854B9E75D447AC8A77C302D70B2349" + { + "Name" = "8:#1902" + "Sequence" = "3:1" + "Attributes" = "3:3" + "Dialogs" + { + "{E4ECAB24-4AB7-11D3-8D78-00A0C9CFCEE6}:_182877F5792B4153B0623805DCD78B2E" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFinishedDlg.wid" + "ModuleSignature" = "8:VsdDialogs.1DB77F5A_BA5C_4470_89B6_0B0EC07E3A10" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{7DFFC192-4ABE-11D3-8D78-00A0C9CFCEE6}:_B0D7A8425A044AC494921E9159923DDA" + { + "Name" = "8:#1900" + "Sequence" = "3:2" + "Attributes" = "3:1" + "Dialogs" + { + "{E4ECAB24-4AB7-11D3-8D78-00A0C9CFCEE6}:_3419C658202E4141A292F8097FA90D51" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFolderDlg.wid" + "ModuleSignature" = "8:VsdDialogs.2DED2424_5429_4616_A1AD_4D62837C2ADA" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{E4ECAB24-4AB7-11D3-8D78-00A0C9CFCEE6}:_3D47C35321644641B44D8910FFCD10AC" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" + "ModuleSignature" = "8:VsdDialogs.E35A0E2C_F131_4B57_B946_59A1A2A8F45F" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{E4ECAB24-4AB7-11D3-8D78-00A0C9CFCEE6}:_50A57E1AB4AB486AA7FE6F9D752B8383" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" + "ModuleSignature" = "8:VsdDialogs.FA58E60A_A1E8_4876_95FC_2AC3B5AAA5F8" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{7DFFC192-4ABE-11D3-8D78-00A0C9CFCEE6}:_B866188749924DE390D758D413B13E1D" + { + "Name" = "8:#1901" + "Sequence" = "3:1" + "Attributes" = "3:2" + "Dialogs" + { + "{E4ECAB24-4AB7-11D3-8D78-00A0C9CFCEE6}:_9FF09CF32AA4497DAA0CF1AD1051F8EF" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdProgressDlg.wid" + "ModuleSignature" = "8:VsdDialogs.4FB12620_0D15_42D0_8677_2766FFA6923F" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{E4ECAB26-4AB7-11D3-8D78-00A0C9CFCEE6}:_C354EEFC52134F47A537732481755B06" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdBasicDialogs.wim" + "ModuleSignature" = "8:VsdDialogs.CE4B864F_F1C1_4B85_98D4_2A2BF5FFB12B" + } + "{7DFFC192-4ABE-11D3-8D78-00A0C9CFCEE6}:_CE2DB2EACD34479992CADC4C0326386E" + { + "Name" = "8:#1900" + "Sequence" = "3:1" + "Attributes" = "3:1" + "Dialogs" + { + "{E4ECAB24-4AB7-11D3-8D78-00A0C9CFCEE6}:_4EEE0209AC304F7981534B738F1E4D14" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdWelcomeDlg.wid" + "ModuleSignature" = "8:VsdDialogs.68F69290_BB7C_474E_A153_6679845F3DDF" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{E4ECAB24-4AB7-11D3-8D78-00A0C9CFCEE6}:_51687977F6BE4225ADB22755AA7A8AF8" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFolderDlg.wid" + "ModuleSignature" = "8:VsdDialogs.C113BC36_2532_4D45_8099_4818B1133B2F" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{E4ECAB24-4AB7-11D3-8D78-00A0C9CFCEE6}:_917F1F1053AC478B9AB035F9D81BB6F9" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdConfirmDlg.wid" + "ModuleSignature" = "8:VsdDialogs.6DBC9783_3677_4D68_8BF5_D749558A0AC1" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + } + } +} diff --git a/Source/VisualStudio2002/Chapter07/DebugAddIn/ReCreateCommands.reg b/Source/VisualStudio2002/Chapter07/DebugAddIn/ReCreateCommands.reg new file mode 100644 index 0000000..1b4cb3f --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/DebugAddIn/ReCreateCommands.reg @@ -0,0 +1,5 @@ +REGEDIT4 +[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VSA\7.0\PreloadAddinState] +"DebugAddIn.Connect"=dword:1 +[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\7.0\PreloadAddinState] +"DebugAddIn.Connect"=dword:1 diff --git a/Source/VisualStudio2002/Chapter07/NumericTextBox/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter07/NumericTextBox/AssemblyInfo.vb new file mode 100644 index 0000000..8741dfc --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/NumericTextBox/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter07/NumericTextBox/ControlContainer.resx b/Source/VisualStudio2002/Chapter07/NumericTextBox/ControlContainer.resx new file mode 100644 index 0000000..d10f386 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/NumericTextBox/ControlContainer.resx @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + ControlContainer + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter07/NumericTextBox/ControlContainer.vb b/Source/VisualStudio2002/Chapter07/NumericTextBox/ControlContainer.vb new file mode 100644 index 0000000..bb29be2 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/NumericTextBox/ControlContainer.vb @@ -0,0 +1,66 @@ +Option Strict On + +Public Class ControlContainer + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Switch on control debugging + Me.CustomControl.DebugMode = True + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents CustomControl As DebugDemo.NumericTextBox + Private Sub InitializeComponent() + Me.CustomControl = New DebugDemo.NumericTextBox() + Me.SuspendLayout() + ' + 'CustomControl + ' + Me.CustomControl.DebugMode = False + Me.CustomControl.Location = New System.Drawing.Point(80, 112) + Me.CustomControl.Name = "CustomControl" + Me.CustomControl.TabIndex = 0 + Me.CustomControl.Text = "" + ' + 'ControlContainer + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(292, 272) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.CustomControl}) + Me.Name = "ControlContainer" + Me.Text = "Form1" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub ShowDebugMessage(ByVal DebugMethod As String, ByVal DebugComment As String) Handles CustomControl.DebugMessage + 'Show the debug message whenever user types non-numeric character + MsgBox(DebugComment, MsgBoxStyle.OKOnly Or MsgBoxStyle.Information, DebugMethod) + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBox.resx b/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBox.resx new file mode 100644 index 0000000..df79c33 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBox.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBox.vb b/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBox.vb new file mode 100644 index 0000000..3a73386 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBox.vb @@ -0,0 +1,11 @@ +Imports System.Windows.Forms + +Public Class NumericTextBox : Inherits TextBox + + Private Sub NumericTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress + If e.KeyChar < "0"c Or e.KeyChar > "9"c Then + e.Handled = True + End If + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.sln b/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.sln new file mode 100644 index 0000000..9ee862d --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.sln @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NumericTextBoxTest", "NumericTextBoxTest.vbproj", "{8A595660-BB97-4824-AD3F-43500C201AB4}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8A595660-BB97-4824-AD3F-43500C201AB4}.Debug.ActiveCfg = Debug|.NET + {8A595660-BB97-4824-AD3F-43500C201AB4}.Debug.Build.0 = Debug|.NET + {8A595660-BB97-4824-AD3F-43500C201AB4}.Release.ActiveCfg = Release|.NET + {8A595660-BB97-4824-AD3F-43500C201AB4}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(SolutionItems) = postSolution + Item:1 = ..\DebugDemoControl\NumericTextBox.vb + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.suo b/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.suo new file mode 100644 index 0000000000000000000000000000000000000000..88a0ad1cf15bc44ed992d47e647cda0ddac713d0 GIT binary patch literal 7168 zcmeHL&2Jk;6o2_BO+u1VXiF(j7HIjXNaQ3fO`B3Fwi8;2+mfVB4i?hJaU7?P*Rq|a z6(E7c0r3Z*a-tlNP;ZC}7d|AofP~r`7Y^mb5e^)<5cB)Z?8KW*yk0j^t4bN`?aa=+ znfG?yd%t<(+qZV#`TVN`e~7P~mKIs5w97-D{wB0Zsyrgnj0WFVDwT@v6hU*lJU~0} zA9QVXZMXw9?Y$G!4r&8+fI306F^j47+xGK8-+^&)@GFZYBa%m5lxwhd__9xStj0Wj zC8*rV{PT69^T(zZFuhL)Lzxs?N^)7oB#XK%7x7F(3)5fHY&D;Uq`7GqM(MM(MNLNE z0DYU~EF^IUax#PGRhdxIuRxm=TJ?(s`INgGtYPI7Ge32gJ}Z|XGa+%gfUkC>pyZcf zg{XR8cK4%}CPyHj@k`k(wfMaKUc6?TI8K|eO(F)EHqAu4J`5rbbb-1-9LEu`%4hiZ zqHiDQanOFy6QBd2CqYkvo(3HRJp`KBTI-|Vn-5v^FX%(P>qNdk>lt)hw(-APK236>ng^h3VV{SB1P~e zfB+Uy!2y?^L3A!*lwK+99JQ%mh`+=mVi*Sn;eh=bvFD{^vp3kM&uU!Cu(#R!c^qOHNsYo=NZFSyckfK~Kx)lN0D$ zg3oE6?1j&d;Ct!0DHQ{pUB&wSCuALC8qa~{5)^LV{=e9n?C8u+lI4XYjqov(_6e^uZ$ytc#`ne zmzH<&{rYt11vW>~TLv=Eqm{$Hcz58`mTOW)p72^|>&IcgI4l{5o`bM!58B6Y#tov? zr^foxio)_S*ty5Gdj$3#g^!%Td%yCBu-0deJ&b)J4qU;m#jsb*cWHC_fAvd-;K>DP z#D9YD$K1u^$}Tn}tuMX6AKoAu!Jo&#Z}5-jOb%KbjMF$fhcC^bm#3f^SudMCz<-th zG$MZw=G}Gy>O8W~1t0)V+*%mFv1HwQ@Gj(AnEH{sXbfM^SSYC+Dh(`XObh(~p?rXM zaqfY;Y+&Whzqt+F=O%vt?yt_o$A_jnJ{Vv5=4KN) zkAS=<)J8W7=B$12ar`$-Knl9>@cL7NfdN}#(bA6}Z&|#5rPS?<`Dpd_MI7(@&H|Hy4_zjU7JO{0Lh4x+hw`(0M+ za~)}ASRDs9?ZSr{_ER6GZIEfaN+;2#2x08Ve#jA@V@OXdlCLYsq}_4 z$mnBi7%ZLt9X5Xd@Zz8OpV|EXJOR|;9xxB#sT6egr*6bwezz(0^yT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.vbproj.user b/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.vbproj.user new file mode 100644 index 0000000..7d7a099 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/NumericTextBox/NumericTextBoxTest.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter07/NumericTextBox/obj/Debug/WindowsApplication10.ControlContainer.resources b/Source/VisualStudio2002/Chapter07/NumericTextBox/obj/Debug/WindowsApplication10.ControlContainer.resources new file mode 100644 index 0000000000000000000000000000000000000000..7d2717ad015aa99cfcb8b73b33316540f976082f GIT binary patch literal 666 zcmb_YOG*Pl5UmKJpo<`GTsaFj!q7~JNz5XPFxhD&WW=3>`IOq&ALx&et0;H{Z{Pu3 zcmXfqN^cOY#;6MyZl>th)l|Rwyn23me{2B2Jz+naTZfWO(Q0o>v_G#Y<`tSalD5=F z@WTFOdgZvp@6-(4FFTIT&{(e3pv4l_ZYK##;wbgPd4mIm-kDs)(Zm;mmq$21)z_#7 zMX#54%1*b{Zy#WC*bh^#EOEZeHq)$ literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter07/SortingDebug/AssemblyInfo.vb new file mode 100644 index 0000000..e68a407 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/SortingDebug/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemo.sln b/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemo.sln new file mode 100644 index 0000000..b71c4dc --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemo.sln @@ -0,0 +1,33 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoLogic", "SortingDll\DebugDemoLogic.vbproj", "{057FA2D6-5280-4393-BE33-C6631BA07451}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoForm", "DebugDemoForm.vbproj", "{1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + ConfigName.2 = ReleaseCustom + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.0 = {057FA2D6-5280-4393-BE33-C6631BA07451} + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.ActiveCfg = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.Build.0 = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.ActiveCfg = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.Build.0 = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.ActiveCfg = ReleaseCustom|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.Build.0 = ReleaseCustom|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.ActiveCfg = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.Build.0 = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.Build.0 = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemo.suo b/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemo.suo new file mode 100644 index 0000000000000000000000000000000000000000..f2fedcf7f73cfddc20e09336d549fd8b71d3a993 GIT binary patch literal 12800 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 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemoForm.vbproj b/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemoForm.vbproj new file mode 100644 index 0000000..1eff798 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemoForm.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemoForm.vbproj.user b/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemoForm.vbproj.user new file mode 100644 index 0000000..7d7a099 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/SortingDebug/DebugDemoForm.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/DemoForm.resx b/Source/VisualStudio2002/Chapter07/SortingDebug/DemoForm.resx new file mode 100644 index 0000000..363456d --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/SortingDebug/DemoForm.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + Assembly + + + True + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + DebugDemo + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/DemoForm.vb b/Source/VisualStudio2002/Chapter07/SortingDebug/DemoForm.vb new file mode 100644 index 0000000..cf4ee1a --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/SortingDebug/DemoForm.vb @@ -0,0 +1,207 @@ +Public Class DebugDemo + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents lblTwo As System.Windows.Forms.Label + Friend WithEvents lblOne As System.Windows.Forms.Label + Friend WithEvents boxSort As System.Windows.Forms.GroupBox + Friend WithEvents Timing As System.Windows.Forms.Label + Friend WithEvents StartSort As System.Windows.Forms.Button + Friend WithEvents MaxValue As System.Windows.Forms.TextBox + Friend WithEvents NumberItems As System.Windows.Forms.TextBox + Friend WithEvents SortCounting As System.Windows.Forms.RadioButton + Friend WithEvents SortQuick As System.Windows.Forms.RadioButton + Friend WithEvents SortSelection As System.Windows.Forms.RadioButton + Friend WithEvents SortBubble As System.Windows.Forms.RadioButton + Private Sub InitializeComponent() + Me.lblTwo = New System.Windows.Forms.Label() + Me.lblOne = New System.Windows.Forms.Label() + Me.StartSort = New System.Windows.Forms.Button() + Me.MaxValue = New System.Windows.Forms.TextBox() + Me.NumberItems = New System.Windows.Forms.TextBox() + Me.boxSort = New System.Windows.Forms.GroupBox() + Me.SortCounting = New System.Windows.Forms.RadioButton() + Me.SortQuick = New System.Windows.Forms.RadioButton() + Me.SortSelection = New System.Windows.Forms.RadioButton() + Me.SortBubble = New System.Windows.Forms.RadioButton() + Me.Timing = New System.Windows.Forms.Label() + Me.boxSort.SuspendLayout() + Me.SuspendLayout() + ' + 'lblTwo + ' + Me.lblTwo.Location = New System.Drawing.Point(32, 96) + Me.lblTwo.Name = "lblTwo" + Me.lblTwo.Size = New System.Drawing.Size(112, 30) + Me.lblTwo.TabIndex = 14 + Me.lblTwo.Text = "Max item value" + ' + 'lblOne + ' + Me.lblOne.Location = New System.Drawing.Point(32, 40) + Me.lblOne.Name = "lblOne" + Me.lblOne.Size = New System.Drawing.Size(112, 30) + Me.lblOne.TabIndex = 12 + Me.lblOne.Text = "Number of items" + ' + 'StartSort + ' + Me.StartSort.Location = New System.Drawing.Point(280, 285) + Me.StartSort.Name = "StartSort" + Me.StartSort.Size = New System.Drawing.Size(92, 39) + Me.StartSort.TabIndex = 10 + Me.StartSort.Text = "Start sort" + ' + 'MaxValue + ' + Me.MaxValue.Location = New System.Drawing.Point(160, 96) + Me.MaxValue.Name = "MaxValue" + Me.MaxValue.Size = New System.Drawing.Size(72, 22) + Me.MaxValue.TabIndex = 13 + Me.MaxValue.Text = "10000" + ' + 'NumberItems + ' + Me.NumberItems.Location = New System.Drawing.Point(160, 40) + Me.NumberItems.Name = "NumberItems" + Me.NumberItems.Size = New System.Drawing.Size(72, 22) + Me.NumberItems.TabIndex = 11 + Me.NumberItems.Text = "1000" + ' + 'boxSort + ' + Me.boxSort.Controls.AddRange(New System.Windows.Forms.Control() {Me.SortCounting, Me.SortQuick, Me.SortSelection, Me.SortBubble}) + Me.boxSort.Location = New System.Drawing.Point(280, 16) + Me.boxSort.Name = "boxSort" + Me.boxSort.Size = New System.Drawing.Size(232, 247) + Me.boxSort.TabIndex = 9 + Me.boxSort.TabStop = False + Me.boxSort.Text = "Sort algorithm" + ' + 'SortCounting + ' + Me.SortCounting.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.SortCounting.Location = New System.Drawing.Point(41, 178) + Me.SortCounting.Name = "SortCounting" + Me.SortCounting.Size = New System.Drawing.Size(164, 29) + Me.SortCounting.TabIndex = 3 + Me.SortCounting.Text = "Counting sort" + ' + 'SortQuick + ' + Me.SortQuick.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.SortQuick.Location = New System.Drawing.Point(41, 128) + Me.SortQuick.Name = "SortQuick" + Me.SortQuick.Size = New System.Drawing.Size(164, 30) + Me.SortQuick.TabIndex = 2 + Me.SortQuick.Text = "Quick sort" + ' + 'SortSelection + ' + Me.SortSelection.Location = New System.Drawing.Point(41, 79) + Me.SortSelection.Name = "SortSelection" + Me.SortSelection.Size = New System.Drawing.Size(164, 30) + Me.SortSelection.TabIndex = 1 + Me.SortSelection.Text = "Selection sort" + ' + 'SortBubble + ' + Me.SortBubble.Checked = True + Me.SortBubble.Location = New System.Drawing.Point(41, 30) + Me.SortBubble.Name = "SortBubble" + Me.SortBubble.Size = New System.Drawing.Size(164, 29) + Me.SortBubble.TabIndex = 0 + Me.SortBubble.TabStop = True + Me.SortBubble.Text = "Bubble sort" + ' + 'Timing + ' + Me.Timing.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.Timing.Location = New System.Drawing.Point(400, 288) + Me.Timing.Name = "Timing" + Me.Timing.Size = New System.Drawing.Size(112, 32) + Me.Timing.TabIndex = 15 + ' + 'DebugDemo + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(544, 348) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Timing, Me.lblTwo, Me.lblOne, Me.StartSort, Me.MaxValue, Me.NumberItems, Me.boxSort}) + Me.Name = "DebugDemo" + Me.Text = "Debug demo" + Me.boxSort.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private m_SortType As DemoSort.SortType = DemoSort.SortType.BubbleSort + + Private Sub StartSort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartSort.Click + Dim SortObject As New DemoSort() + + 'Show that we're busy + Cursor.Current = Cursors.WaitCursor + Me.StartSort.Enabled = False + + 'Build a list to sort + Me.Timing.Text = "Building list to sort..." + Me.Timing.Refresh() + SortObject.ListBuild(Convert.ToInt32(Me.NumberItems.Text), 1, Convert.ToInt32(Me.MaxValue.Text)) + + 'Do the sort and report timing + Me.Timing.Text = "Performing sort..." + Me.Timing.Refresh() + Me.Timing.Text = SortObject.DoSort(m_SortType).ToString & " seconds" + + 'Show that we've finished + Me.StartSort.Enabled = True + Cursor.Current = Cursors.Default + + End Sub + + Private Sub SortBubble_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortBubble.CheckedChanged + m_SortType = DemoSort.SortType.BubbleSort + End Sub + + Private Sub SortSelection_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortSelection.CheckedChanged + m_SortType = DemoSort.SortType.SelectionSort + End Sub + + Private Sub SortQuick_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortQuick.CheckedChanged + m_SortType = DemoSort.SortType.QuickSort + End Sub + + Private Sub SortCounting_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortCounting.CheckedChanged + m_SortType = DemoSort.SortType.CountingSort + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/AssemblyInfo.vb new file mode 100644 index 0000000..240f036 --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/AssemblyInfo.vb @@ -0,0 +1,30 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj b/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj new file mode 100644 index 0000000..498d34a --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj.user b/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj.user new file mode 100644 index 0000000..ff746ab --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj.user @@ -0,0 +1,64 @@ + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DemoSort.vb b/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DemoSort.vb new file mode 100644 index 0000000..038eb8a --- /dev/null +++ b/Source/VisualStudio2002/Chapter07/SortingDebug/SortingDll/DemoSort.vb @@ -0,0 +1,265 @@ +Option Strict On + +Public Class DemoSort + + 'These are the sorting lists + Private ListUnsorted() As Int32 + Private ListBeingSorted() As Int32 + 'These are max and minimum sort settings + Private ListLengthMin As Int32 + Private ListLengthMax As Int32 + Private ListValueMin As Int32 + Private ListValueMax As Int32 + + Public Enum SortType As Integer + BubbleSort = 1 + SelectionSort = 2 + QuickSort = 3 + CountingSort = 4 + End Enum + + Public Sub ListBuild(ByVal ListLength As Int32, ByVal ValueMin As Int32, ByVal ValueMax As Int32) + Dim ArrayItem As Int32, objRandom As New System.Random(1) + + 'If parameters haven't changed, just use previous list + 'This enables multiple timing checks on an identical array + If ListLength = ListLengthMax And ValueMin = ListValueMin And ValueMax = ListValueMax Then + Exit Sub + End If + + 'Build a new list with given parameters + ReDim ListUnsorted(ListLength) + For ArrayItem = 1 To ListLength + ListUnsorted(ArrayItem) = objRandom.Next(ValueMin, ValueMax) + Next ArrayItem + + 'Set length of sorted list to match + ReDim ListBeingSorted(ListLength) + + 'Store min and max list items and values + ListLengthMin = 1 + ListLengthMax = ListLength + ListValueMin = ValueMin + ListValueMax = ValueMax + + End Sub + + Public Function DoSort(ByVal Sort As SortType) As Double + Dim TimeStart As Int32, TimeFinish As Int32, ArrayItem As Int32 + + 'Copy to array that will contain newly-sorted list + For ArrayItem = ListLengthMin To ListLengthMax + ListBeingSorted(ArrayItem) = ListUnsorted(ArrayItem) + Next + + 'Start the clock so we can report how long the sorting took + TimeStart = System.Environment.TickCount() + + 'Do the sort + Select Case Sort + Case SortType.BubbleSort + SortBubble(ListLengthMin, ListLengthMax) + Case SortType.QuickSort + SortQuick(ListLengthMin, ListLengthMax) + Case SortType.SelectionSort + SortSelection() + Case SortType.CountingSort + SortCounting() + Case Else + Trace.Fail(CStr(Sort) & " is an invalid sort type") + End Select + + 'Stop the clock and report how long the sorting took + TimeFinish = System.Environment.TickCount() + 'Check sort + SortCheck() + 'Convert elapsed time into seconds + Return (TimeFinish - TimeStart) / 1000 + + End Function + + Private Sub SortBubble(ByVal ItemLow As Int32, ByVal ItemHigh As Int32) + Dim intLastSwap As Int32, intLoop1 As Int32, intLoop2 As Int32 + Dim intDrop As Int32 + + 'Repeat until we are done + Do While ItemLow < ItemHigh + + 'First bubble upwards + intLastSwap = ItemLow - 1 + intLoop1 = ItemLow + 1 + + Do While intLoop1 <= ItemHigh + 'Find a bubble + If ListBeingSorted(intLoop1 - 1) > ListBeingSorted(intLoop1) Then + 'See where to drop the bubble + intDrop = ListBeingSorted(intLoop1 - 1) + intLoop2 = intLoop1 + Do While ListBeingSorted(intLoop2) < intDrop + ListBeingSorted(intLoop2 - 1) = ListBeingSorted(intLoop2) + intLoop2 += 1 + If intLoop2 > ItemHigh Then + Exit Do + End If + Loop + ListBeingSorted(intLoop2 - 1) = intDrop + intLastSwap = intLoop2 - 1 + intLoop1 = intLoop2 + 1 + Else + intLoop1 += 1 + End If + Loop + + 'Update maximum value + ItemHigh = intLastSwap - 1 + + 'Next bubble downwards + intLastSwap = ItemHigh + 1 + intLoop1 = ItemHigh - 1 + + Do While intLoop1 >= ItemLow + 'Find a bubble + If ListBeingSorted(intLoop1 + 1) < ListBeingSorted(intLoop1) Then + 'See where to drop the bubble + intDrop = ListBeingSorted(intLoop1 + 1) + intLoop2 = intLoop1 + Do While ListBeingSorted(intLoop2) > intDrop + ListBeingSorted(intLoop2 + 1) = ListBeingSorted(intLoop2) + intLoop2 -= 1 + If intLoop2 < ItemLow Then + Exit Do + End If + Loop + ListBeingSorted(intLoop2 + 1) = intDrop + intLastSwap = intLoop2 + 1 + intLoop1 = intLoop2 - 1 + Else + intLoop1 -= 1 + End If + Loop + + 'Update minimum value + ItemLow = intLastSwap + 1 + + Loop + + End Sub + + Private Sub SortSelection() + Dim LoopOuter As Int32, LoopInner As Int32, BestValue As Int32, BestInnerIndex As Int32 + + For LoopOuter = ListLengthMin To ListLengthMax - 1 + + 'Init lowest-value search + BestValue = ListBeingSorted(LoopOuter) + BestInnerIndex = LoopOuter + + 'Find lowest value that hasn't already been sorted + For LoopInner = LoopOuter + 1 To ListLengthMax + If ListBeingSorted(LoopInner) < BestValue Then + BestValue = ListBeingSorted(LoopInner) + 1 + BestInnerIndex = LoopInner + End If + Next LoopInner + + 'Swap lowest value into proper position + ListBeingSorted(BestInnerIndex) = ListBeingSorted(LoopOuter) + ListBeingSorted(LoopOuter) = BestValue + + Next LoopOuter + + End Sub + + Private Sub SortQuick(ByVal ItemLow As Int32, ByVal ItemHigh As Int32) + Dim IntermediateValue As Int32, Position As Int32 + Dim objRandom As New System.Random() + Dim intLow As Int32, intHigh As Int32 + + 'If the list has only 1 element, it's already sorted + If ItemLow >= ItemHigh Then Exit Sub + + 'Pick a dividing item + Position = objRandom.Next(ItemLow, ItemHigh) + IntermediateValue = ListBeingSorted(Position) + + 'Swap it to the front so we can find it easily + ListBeingSorted(Position) = ListBeingSorted(ItemLow) + + 'Move the items smaller than this into the left + 'half of the list. Move the others into the right. + intLow = ItemLow + intHigh = ItemHigh + Do + 'Look down from low item for a value < IntermediateValue + Do While ListBeingSorted(intHigh) >= IntermediateValue + intHigh -= 1 + If intHigh <= intLow Then Exit Do + Loop + If intHigh <= intLow Then + ListBeingSorted(intLow) = IntermediateValue + Exit Do + End If + + 'Swap the low and high values + ListBeingSorted(intLow) = ListBeingSorted(intHigh) + + 'Look up from ItemLow for a value >= IntermediateValue + intLow += 1 + Do While ListBeingSorted(intLow) < IntermediateValue + intLow += 1 + If intLow >= intHigh Then Exit Do + Loop + If intLow >= intHigh Then + intLow = intHigh + ListBeingSorted(intHigh) = IntermediateValue + Exit Do + End If + + 'Swap the low and high items + ListBeingSorted(intHigh) = ListBeingSorted(intLow) + Loop + + 'Sort the two sublists recursively + SortQuick(ItemLow, intLow - 1) + SortQuick(intHigh + 1, ItemHigh) + + End Sub + + Private Sub SortCounting() + Dim ListCounts(ListValueMax) As Int32 + Dim ArrayItem As Int32, ThisCount As Int32, NextOffset As Int32 + + 'Count the items + For ArrayItem = ListLengthMin To ListLengthMax + ListCounts(ListUnsorted(ArrayItem)) += 1 + Next ArrayItem + + 'Convert the ListCounts into offsets + NextOffset = ListLengthMin + For ArrayItem = ListValueMin To ListValueMax + ThisCount = ListCounts(ArrayItem) + ListCounts(ArrayItem) = NextOffset + NextOffset += ThisCount + Next ArrayItem + + 'Place the items in the sorted array + For ArrayItem = ListLengthMin To ListLengthMax + ListBeingSorted(ListCounts(ListUnsorted(ArrayItem))) = ListUnsorted(ArrayItem) + ListCounts(ListUnsorted(ArrayItem)) += 1 + Next ArrayItem + + End Sub + + Private Function SortCheck() As Boolean + Dim ArrayItem As Int32 + + For ArrayItem = 2 To ListLengthMax + If ListBeingSorted(ArrayItem - 1) > ListBeingSorted(ArrayItem) Then + Trace.Fail("Item " & (ArrayItem - 1).ToString & " is larger than item " & ArrayItem.ToString) + Exit For + End If + Next ArrayItem + + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter07/SortingDebug/obj/Debug/DebugDemo.DebugDemo.resources b/Source/VisualStudio2002/Chapter07/SortingDebug/obj/Debug/DebugDemo.DebugDemo.resources new file mode 100644 index 0000000000000000000000000000000000000000..24379ba0a8cb61c130bc0ebc4ac085e9c4f5fe25 GIT binary patch literal 4029 zcmeHKTSyd982&YN4J*26N*5bU(rVdOOijZF-7QF6Q+KrtYTMa8+2qU)%*B*IFnsbk z!jg&}f-I;WQhG`vBB-#UAo8i#$`ap<$ogj5UELiekbP@s_n$N8obP=9?VO*P$rm$^ z(}?IgWVg3Z)tKaHW2&qxL8iu@+E^gO6gwxWL0J(6UbQ0iuqH?>y41_G1+<;(V2Ucp z;o35X(@|dTbUK`N&ZUc*uCUrL(={a^+PM~;7lmLW>+{LoEL_W1RRt=76_sVx<@=fQ zK(%3I0b~{AR78KhEQ>4M>h_%Of8Hl3UItdQl8)vPV+?|I^z?I}4uP*8ntU%yWt z&3dVIA}do!(RQ@=(K?KD;i`n(gZt=lu zX~}qQ#YW}gr>z{V0Bz%um)>RUnFXLI5n$yhvB4J6+%HEFtHizi9MfF2BoHC*3eAD>K*?m+oorxUw%Jj8#d5-qMVdh3&~F9YNanfsU3)VkvdnA_ua%I TnmSjhbG7(WDOD~0k81G;_%8yo literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter08/ReadMe.txt b/Source/VisualStudio2002/Chapter08/ReadMe.txt new file mode 100644 index 0000000..638ecfa --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/ReadMe.txt @@ -0,0 +1,13 @@ +To setup the TimeService web service on your IIS web server, +use IIS to create a IIS virtual directory called TimeServer_2002, +pointing at the real folder C:\Inetpub\wwwroot\TimeServer_2002. +This real folder should have been created when you un-zipped +the zip file containing the source code. + +Then in Visual Studio 2002, load the TimeServer solution and set +a web reference to the TimeService web service (using the +Project...Add web reference menu item). The web service can be +found at the ISS virtual directory that you've just created. + + + diff --git a/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServer.sln b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServer.sln new file mode 100644 index 0000000..6a41a06 --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServer.sln @@ -0,0 +1,27 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TimeServer", "http://localhost/TimeServer_2002/TimeServer.vbproj", "{1BB5B66C-C66B-474D-BE43-03E212F5DF3F}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TimeServerClient", "TimeServerClient\TimeServerClient.vbproj", "{B2064CD5-D49D-4BF7-B31E-57025D69727C}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {1BB5B66C-C66B-474D-BE43-03E212F5DF3F}.Debug.ActiveCfg = Debug|.NET + {1BB5B66C-C66B-474D-BE43-03E212F5DF3F}.Debug.Build.0 = Debug|.NET + {1BB5B66C-C66B-474D-BE43-03E212F5DF3F}.Release.ActiveCfg = Release|.NET + {1BB5B66C-C66B-474D-BE43-03E212F5DF3F}.Release.Build.0 = Release|.NET + {B2064CD5-D49D-4BF7-B31E-57025D69727C}.Debug.ActiveCfg = Debug|.NET + {B2064CD5-D49D-4BF7-B31E-57025D69727C}.Debug.Build.0 = Debug|.NET + {B2064CD5-D49D-4BF7-B31E-57025D69727C}.Release.ActiveCfg = Release|.NET + {B2064CD5-D49D-4BF7-B31E-57025D69727C}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServer.suo b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServer.suo new file mode 100644 index 0000000000000000000000000000000000000000..ebbd2f9caa66fee036a92ce5de98a527de2a151e GIT binary patch literal 11776 zcmeI2U2I%O6~||7hdLo2Z6P5P8WuNg(>B@oJ8{w$;B)5>R+RLa41uc>p0mphh6X3!v~s1&G2EJV4CvKXb3|?s~ns zcGgx>GOKgv-nlb#&di+eyO-a-uIdL6hZIFj3QMGSoSMS0D9innD+izmZEV== zd_L&V@c8gRzs7Bk&!p!@v&r0ebTFNnRMTybr822paz^(R8}*{JM0k`u$u9OFu?6%= z8fkXcP})p#JV$#P`OeT@S~UJV5QobXNPpIxM*CqFvAj#KAbrPkb81A||OPE&pk6qGphL(c}0_9z!{I`;B~9{a&VmB-W37VV!bzmo&Ui<9g{5_+OgCz%p|B;ZwXg!nlROh8Yx zL{g$9vJ%BwoPg3{dO5jivywH2g-F{sqoLKAE)! zOZdufw0?2Be5bJMSIneXNu?bB09-B!lplV|+Y6_;UH|gy{xz&$@!GIAQL!{s=1A8n z8CkEQ{VOlm(^fv$dOmM5R{f7#9J|fFhA-5^UW<$O*O^HF*TogK{P54;nEx5iBaN=@ zeB>OiYd60Rpp#!5*EVkNy18pdJ+;Fe2YB1dT^o1JTzgSsEkGaRdbqX$7jPh^P$mUT z#t|IjgRpECWg@p>iaUih2P?V-pEIqJcjrB1?0`Vi`jJ_RsS4IMNcTIh!PoQh&0YNE z+aQ0z)oSs+zcW3S)YI_1o4J_hpR~lM!Rmac0BbONvxk2xO=0CvIf`dwa46OA`>|jT zJ0riYQi*x;r`$+b{0e>ddXq`d&0tskHOdAn5|$q%Pf(aEdyZ}b?kLIA@LRG+Z`jom44kIl6NYIEu-dw?7$VB@z;rU>&Cmq|b1dGjN)R zY59BS;Kf*K9yU0O!4}r@{LV2d&bSu1J&r^)TNycITMy9M!ttr?Fu%AbBhBU*ZE@3O z-^)>M=Uy_>2Yop(5Hu29?l!+@NY!uI#QDAZ)_4DCrI=TW9TmH({OZ;AJB#1BR(JK^ zNtX|>5i@q#^3szak*_}IdDOCWk68cEn4=J5SXS*sKZdQGw;oS`_awLr9#+wJ)OzQY zX>-yo3L9r_sW+CufF!}7FkqfW`@xxL40@; zQJaQ?hOjeF|kNtV#Ga1^DzhxvXUIO6h4@1ODRme>!T+ z<26$3{@0<#eLO$tvZvtQG6|Ik)YiiP4>B&ufA?6v7=u@wtFRC<^W%6%@-G{wm?o_J74v^_ zoGHyCDfBgvT$<|9pIv`M{-k``u=um|-4E2N__{AF{t~?F;cLmmYHJVWw_VG7iQv5` zS9T72C>OFeR`dG2h+0yz7B4~?^BD4}$Urg^$M;eGT0Wd|i@}_H_2|PlK0x<&>Mrhz zz2+9v)*s7MFU<`g1mj`7n{QIW2PyW8SFGiJp ztXuqBt^)$Cg7{}p9|h{%I%OV$e8Ysx4c>#l`mocNVgls`U*Xx;p`Tr?4n?ciJ~z1D zUg~mHy)k(p?YQ!^Uvy{DRQ)WbZk+|{YGZP8ZS5VM7dV|sjB>&T#Is1Iq*LLdONB~G z^^t4=<2a7Yj>$GUN2S!tSGS<=9sA?!f15zk?)kY*PuCC|*GKBV#EYfkzD4{-`JlS~ zV!xu&u7t5)#a1V356l0jLKHhEUu_!CMgFP|HqgDn*;Q_>&57=bI6uj<3o)(#r6CUs z=?nKbwQ`C2fFgEV75kOUmw*$49LJ5c6JbtKzU1onsPx}0e!fb)RsQ|o{ga`5kN!{e zt5ZiYgdq65Jc literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/AssemblyInfo.vb new file mode 100644 index 0000000..30e9959 --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.resx b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.resx new file mode 100644 index 0000000..323365d --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.resx @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + ClientForm + + + 80 + + + True + + + Assembly + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.vb b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.vb new file mode 100644 index 0000000..3a537ca --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.vb @@ -0,0 +1,206 @@ +Option Strict On +Imports System.Windows.Forms + +Public Class ClientForm : Inherits System.Windows.Forms.Form + + Private m_TimeTest As localhost.TimeService + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents GetTime As System.Windows.Forms.Button + Friend WithEvents ShowTime As System.Windows.Forms.Label + Friend WithEvents ProxyDebugDemo As System.Windows.Forms.Button + Friend WithEvents TriggerRawException As System.Windows.Forms.Button + Friend WithEvents TriggerCustomException As System.Windows.Forms.Button + Private Sub InitializeComponent() + Me.GetTime = New System.Windows.Forms.Button + Me.ShowTime = New System.Windows.Forms.Label + Me.ProxyDebugDemo = New System.Windows.Forms.Button + Me.TriggerRawException = New System.Windows.Forms.Button + Me.TriggerCustomException = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'GetTime + ' + Me.GetTime.Location = New System.Drawing.Point(40, 40) + Me.GetTime.Name = "GetTime" + Me.GetTime.Size = New System.Drawing.Size(160, 56) + Me.GetTime.TabIndex = 0 + Me.GetTime.Text = "Test time retrieval" + ' + 'ShowTime + ' + Me.ShowTime.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.ShowTime.Location = New System.Drawing.Point(240, 48) + Me.ShowTime.Name = "ShowTime" + Me.ShowTime.Size = New System.Drawing.Size(128, 48) + Me.ShowTime.TabIndex = 1 + ' + 'ProxyDebugDemo + ' + Me.ProxyDebugDemo.Location = New System.Drawing.Point(40, 120) + Me.ProxyDebugDemo.Name = "ProxyDebugDemo" + Me.ProxyDebugDemo.Size = New System.Drawing.Size(160, 56) + Me.ProxyDebugDemo.TabIndex = 2 + Me.ProxyDebugDemo.Text = "Demo proxy debugging" + ' + 'TriggerRawException + ' + Me.TriggerRawException.Location = New System.Drawing.Point(40, 200) + Me.TriggerRawException.Name = "TriggerRawException" + Me.TriggerRawException.Size = New System.Drawing.Size(160, 56) + Me.TriggerRawException.TabIndex = 4 + Me.TriggerRawException.Text = "Trigger raw exception" + ' + 'TriggerCustomException + ' + Me.TriggerCustomException.Location = New System.Drawing.Point(40, 280) + Me.TriggerCustomException.Name = "TriggerCustomException" + Me.TriggerCustomException.Size = New System.Drawing.Size(160, 56) + Me.TriggerCustomException.TabIndex = 5 + Me.TriggerCustomException.Text = "Trigger custom exception" + ' + 'ClientForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(432, 396) + Me.Controls.Add(Me.TriggerCustomException) + Me.Controls.Add(Me.TriggerRawException) + Me.Controls.Add(Me.ProxyDebugDemo) + Me.Controls.Add(Me.ShowTime) + Me.Controls.Add(Me.GetTime) + Me.Name = "ClientForm" + Me.Text = "TimeServer client" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub ClientForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'Create web service instance (via proxy) and + 'ensure timeout never happens during debugging + m_TimeTest = New localhost.TimeService +#If DEBUG Then + m_TimeTest.Timeout = -1 +#End If + + End Sub + + Private Sub GetTime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetTime.Click + 'Get time details + Me.ShowTime.Text = m_TimeTest.CurrentTime + + End Sub + + Private Sub ProxyDebugDemo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProxyDebugDemo.Click + 'Trigger exception without catching it + 'Ensure proxy has DebuggerStepthroughAttribute removed + 'This exception will then break into the debugger + m_TimeTest.ThrowExceptionRaw() + + End Sub + + Private Sub TriggerRawException_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriggerRawException.Click + Dim ExceptionMessage As String, Sep As String = Space$(4) + 'Trigger raw exception and show it + Try + m_TimeTest.ThrowExceptionRaw() + + Catch SoapExc As System.Web.Services.Protocols.SoapException + + With SoapExc + ExceptionMessage += "RECEIVED EXCEPTION INFORMATION" + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Type: " & Environment.NewLine + ExceptionMessage += Sep & .GetType.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Message: " & Environment.NewLine + ExceptionMessage += Sep & .Message + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Stack trace: " & Environment.NewLine + ExceptionMessage += Sep & .StackTrace + ExceptionMessage += Environment.NewLine + ExceptionMessage += "SOAP fault: " & Environment.NewLine + ExceptionMessage += Sep & .Code.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Web service URL: " & Environment.NewLine + ExceptionMessage += Sep & .Actor.ToString + End With + + MessageBox.Show(ExceptionMessage, "Web service raw exception", MessageBoxButtons.OK) + + End Try + + End Sub + + Private Sub TriggerCustomException_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriggerCustomException.Click + Dim ExceptionMessage As String, Sep As String = Space$(4) + 'Trigger custom exception and show it + Try + m_TimeTest.ThrowExceptionCustom() + + Catch SoapExc As System.Web.Services.Protocols.SoapException + + With SoapExc + ExceptionMessage = "ORIGINAL EXCEPTION INFORMATION" + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Type: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionType").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Message: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionMessage").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Stack trace: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionTrace").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "SOAP fault: " & Environment.NewLine + ExceptionMessage += Sep & .Code.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Web service URL: " & Environment.NewLine + ExceptionMessage += Sep & .Actor.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Raw SOAP message: " & Environment.NewLine + ExceptionMessage += Sep & .Message + End With + + MessageBox.Show(ExceptionMessage, "Web service custom exception", MessageBoxButtons.OK) + + End Try + + End Sub + + Private Sub ClientForm_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed + 'Close web service instance + m_TimeTest.Dispose() + m_TimeTest = Nothing + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj new file mode 100644 index 0000000..d3dd6af --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj.user b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj.user new file mode 100644 index 0000000..d5f4c7b --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources b/Source/VisualStudio2002/Chapter08/TimeServerBrowserClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..50edb5966d82360d6c2ec74a2584b8a94d871022 GIT binary patch literal 6134 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 Q$KU;%WL__MDwom!1M25sod5s; literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/AssemblyInfo.vb new file mode 100644 index 0000000..30e9959 --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.resx b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.resx new file mode 100644 index 0000000..323365d --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.resx @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + ClientForm + + + 80 + + + True + + + Assembly + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.vb b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.vb new file mode 100644 index 0000000..3a537ca --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.vb @@ -0,0 +1,206 @@ +Option Strict On +Imports System.Windows.Forms + +Public Class ClientForm : Inherits System.Windows.Forms.Form + + Private m_TimeTest As localhost.TimeService + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents GetTime As System.Windows.Forms.Button + Friend WithEvents ShowTime As System.Windows.Forms.Label + Friend WithEvents ProxyDebugDemo As System.Windows.Forms.Button + Friend WithEvents TriggerRawException As System.Windows.Forms.Button + Friend WithEvents TriggerCustomException As System.Windows.Forms.Button + Private Sub InitializeComponent() + Me.GetTime = New System.Windows.Forms.Button + Me.ShowTime = New System.Windows.Forms.Label + Me.ProxyDebugDemo = New System.Windows.Forms.Button + Me.TriggerRawException = New System.Windows.Forms.Button + Me.TriggerCustomException = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'GetTime + ' + Me.GetTime.Location = New System.Drawing.Point(40, 40) + Me.GetTime.Name = "GetTime" + Me.GetTime.Size = New System.Drawing.Size(160, 56) + Me.GetTime.TabIndex = 0 + Me.GetTime.Text = "Test time retrieval" + ' + 'ShowTime + ' + Me.ShowTime.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.ShowTime.Location = New System.Drawing.Point(240, 48) + Me.ShowTime.Name = "ShowTime" + Me.ShowTime.Size = New System.Drawing.Size(128, 48) + Me.ShowTime.TabIndex = 1 + ' + 'ProxyDebugDemo + ' + Me.ProxyDebugDemo.Location = New System.Drawing.Point(40, 120) + Me.ProxyDebugDemo.Name = "ProxyDebugDemo" + Me.ProxyDebugDemo.Size = New System.Drawing.Size(160, 56) + Me.ProxyDebugDemo.TabIndex = 2 + Me.ProxyDebugDemo.Text = "Demo proxy debugging" + ' + 'TriggerRawException + ' + Me.TriggerRawException.Location = New System.Drawing.Point(40, 200) + Me.TriggerRawException.Name = "TriggerRawException" + Me.TriggerRawException.Size = New System.Drawing.Size(160, 56) + Me.TriggerRawException.TabIndex = 4 + Me.TriggerRawException.Text = "Trigger raw exception" + ' + 'TriggerCustomException + ' + Me.TriggerCustomException.Location = New System.Drawing.Point(40, 280) + Me.TriggerCustomException.Name = "TriggerCustomException" + Me.TriggerCustomException.Size = New System.Drawing.Size(160, 56) + Me.TriggerCustomException.TabIndex = 5 + Me.TriggerCustomException.Text = "Trigger custom exception" + ' + 'ClientForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(432, 396) + Me.Controls.Add(Me.TriggerCustomException) + Me.Controls.Add(Me.TriggerRawException) + Me.Controls.Add(Me.ProxyDebugDemo) + Me.Controls.Add(Me.ShowTime) + Me.Controls.Add(Me.GetTime) + Me.Name = "ClientForm" + Me.Text = "TimeServer client" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub ClientForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'Create web service instance (via proxy) and + 'ensure timeout never happens during debugging + m_TimeTest = New localhost.TimeService +#If DEBUG Then + m_TimeTest.Timeout = -1 +#End If + + End Sub + + Private Sub GetTime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetTime.Click + 'Get time details + Me.ShowTime.Text = m_TimeTest.CurrentTime + + End Sub + + Private Sub ProxyDebugDemo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProxyDebugDemo.Click + 'Trigger exception without catching it + 'Ensure proxy has DebuggerStepthroughAttribute removed + 'This exception will then break into the debugger + m_TimeTest.ThrowExceptionRaw() + + End Sub + + Private Sub TriggerRawException_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriggerRawException.Click + Dim ExceptionMessage As String, Sep As String = Space$(4) + 'Trigger raw exception and show it + Try + m_TimeTest.ThrowExceptionRaw() + + Catch SoapExc As System.Web.Services.Protocols.SoapException + + With SoapExc + ExceptionMessage += "RECEIVED EXCEPTION INFORMATION" + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Type: " & Environment.NewLine + ExceptionMessage += Sep & .GetType.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Message: " & Environment.NewLine + ExceptionMessage += Sep & .Message + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Stack trace: " & Environment.NewLine + ExceptionMessage += Sep & .StackTrace + ExceptionMessage += Environment.NewLine + ExceptionMessage += "SOAP fault: " & Environment.NewLine + ExceptionMessage += Sep & .Code.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Web service URL: " & Environment.NewLine + ExceptionMessage += Sep & .Actor.ToString + End With + + MessageBox.Show(ExceptionMessage, "Web service raw exception", MessageBoxButtons.OK) + + End Try + + End Sub + + Private Sub TriggerCustomException_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriggerCustomException.Click + Dim ExceptionMessage As String, Sep As String = Space$(4) + 'Trigger custom exception and show it + Try + m_TimeTest.ThrowExceptionCustom() + + Catch SoapExc As System.Web.Services.Protocols.SoapException + + With SoapExc + ExceptionMessage = "ORIGINAL EXCEPTION INFORMATION" + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Type: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionType").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Message: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionMessage").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Stack trace: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionTrace").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "SOAP fault: " & Environment.NewLine + ExceptionMessage += Sep & .Code.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Web service URL: " & Environment.NewLine + ExceptionMessage += Sep & .Actor.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Raw SOAP message: " & Environment.NewLine + ExceptionMessage += Sep & .Message + End With + + MessageBox.Show(ExceptionMessage, "Web service custom exception", MessageBoxButtons.OK) + + End Try + + End Sub + + Private Sub ClientForm_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed + 'Close web service instance + m_TimeTest.Dispose() + m_TimeTest = Nothing + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj new file mode 100644 index 0000000..d3dd6af --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj.user b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj.user new file mode 100644 index 0000000..d5f4c7b --- /dev/null +++ b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources b/Source/VisualStudio2002/Chapter08/TimeServerSoapClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..50edb5966d82360d6c2ec74a2584b8a94d871022 GIT binary patch literal 6134 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 Cs&K3T literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter09/AspNetDebugDemo/ReadMe.txt b/Source/VisualStudio2002/Chapter09/AspNetDebugDemo/ReadMe.txt new file mode 100644 index 0000000..defb21a --- /dev/null +++ b/Source/VisualStudio2002/Chapter09/AspNetDebugDemo/ReadMe.txt @@ -0,0 +1,7 @@ +To setup the AspNetDebugDemo application on your IIS web server, use +IIS to create a IIS virtual directory called AspNetDebugDemo_2002, +pointing at the real folder C:\Inetpub\wwwroot\AspNetDebugDemo_2002. +This real folder should have been created when you un-zipped +the zip file containing the source code. + +Then in Visual Studio 2002, load the AspNetDebugDemo solution. diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter10/DebugOnStart/AssemblyInfo.vb new file mode 100644 index 0000000..64988a1 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/Client.vb b/Source/VisualStudio2002/Chapter10/DebugOnStart/Client.vb new file mode 100644 index 0000000..601e85c --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/Client.vb @@ -0,0 +1,130 @@ +Option Strict On + +Imports System.Net +Imports System.Text +Imports System.Threading +Imports System +Imports System.IO +Imports System.ServiceProcess + +Public Class Client + + Private ThisClient As Sockets.Socket = Nothing + Private ReadBuffer(16384) As Byte + Private PageBuffer(16384) As Byte + Private EmptyBuffer() As Byte = Encoding.ASCII.GetBytes(Space$(1024)) + + Public Sub New(ByVal NewClient As Sockets.Socket) + + Me.ThisClient = NewClient + + End Sub + + Public Sub Start() + Dim HtmlStream As StreamReader, PageRequest As String, PageText As String + + Try + Me.ThisClient.Receive(Me.ReadBuffer, Me.ReadBuffer.Length, Sockets.SocketFlags.None) + PageRequest = ReturnPage(Encoding.ASCII.GetString(Me.ReadBuffer)) + 'Open requested page + HtmlStream = New StreamReader(PageRequest) + PageText = HtmlStream.ReadToEnd() + HtmlStream.Close() + 'If status page, display services + PageText = PageText.Replace("#1#", Environment.MachineName & " (" & Me.ThisClient.LocalEndPoint.ToString & ")") + PageText = PageText.Replace("#2#", Me.DisplayServices) + 'Display requested page + Trace.WriteLine("Sending page " & PageRequest) + Me.PageBuffer = Encoding.ASCII.GetBytes(PageText) + Me.ThisClient.Send(Me.PageBuffer, Me.PageBuffer.Length, Sockets.SocketFlags.None) + Me.Close() + + Catch Exc As Sockets.SocketException + Trace.WriteLine(Exc.Message) + Close() + + End Try + + End Sub + + Private Function ReturnPage(ByVal PageRequest As String) As String + Dim HtmlPage As String, IndexStart As Int32, IndexEnd As Int32 + + 'Extract page + IndexStart = InStr(PageRequest, "/") + 1 + IndexEnd = InStr(IndexStart, PageRequest, " ") + HtmlPage = Mid$(PageRequest, IndexStart, IndexEnd - IndexStart) + 'add suffix if necessary + If Right$(HtmlPage, 5) <> ".html" Then + HtmlPage += ".html" + End If + 'Add local path + HtmlPage = Me.ReturnPath & HtmlPage + 'Check page exists + If File.Exists(HtmlPage) = False Then + HtmlPage = Me.ReturnPath & "error.html" + End If + 'Return page + Trace.WriteLine("Page requested: " & HtmlPage) + Return HtmlPage + + End Function + + Private Function ReturnPath() As String + + If Right$(AppDomain.CurrentDomain.BaseDirectory, 1) = "\" Then + Return AppDomain.CurrentDomain.BaseDirectory + Else + Return AppDomain.CurrentDomain.BaseDirectory & "\" + End If + + End Function + + Private Function DisplayServices() As String + Dim ThisService As ServiceController, TempPage As String + + For Each ThisService In ServiceController.GetServices + TempPage += "" & Environment.NewLine + 'Add service name + TempPage += "
    " + TempPage += ThisService.ServiceName & "
    " & Environment.NewLine + 'Add service friendly name + TempPage += "
    " + TempPage += ThisService.DisplayName & "
    " & Environment.NewLine + 'Add service status + TempPage += "
    " + TempPage += ThisService.Status.ToString & "
    " & Environment.NewLine + TempPage += "" & Environment.NewLine + 'Finished with this service + ThisService.Dispose() + Next + + Return TempPage + + End Function + + Public Function IsConnected() As Boolean + + If Me.ThisClient Is Nothing Then + Return False + Else + Return Me.ThisClient.Connected + End If + + End Function + + Public Sub Close() + + If Not (Me.ThisClient Is Nothing) Then + Trace.WriteLine("Closing client socket") + Me.ThisClient.Shutdown(Sockets.SocketShutdown.Both) + Me.ThisClient.Close() + Me.ThisClient = Nothing + End If + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/DummyService.resx b/Source/VisualStudio2002/Chapter10/DebugOnStart/DummyService.resx new file mode 100644 index 0000000..df79c33 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/DummyService.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/DummyService.vb b/Source/VisualStudio2002/Chapter10/DebugOnStart/DummyService.vb new file mode 100644 index 0000000..6d34e4f --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/DummyService.vb @@ -0,0 +1,50 @@ +Option Strict On +Imports System.ServiceProcess +Imports System.Threading + +Public Class DummyService : Inherits System.ServiceProcess.ServiceBase + + +#Region " Component Designer generated code " + + Public Sub New() + MyBase.New() + + ' This call is required by the Component Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call + + End Sub + + 'UserService overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + ' The main entry point for the process + _ + Shared Sub Main() + + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + ' NOTE: The following procedure is required by the Component Designer + ' It can be modified using the Component Designer. + ' Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container() + Me.ServiceName = "DummyService" + End Sub + +#End Region + + +End Class diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/ProjectInstaller.resx b/Source/VisualStudio2002/Chapter10/DebugOnStart/ProjectInstaller.resx new file mode 100644 index 0000000..142cb5c --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/ProjectInstaller.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + Assembly + + + 17, 17 + + + Assembly + + + Assembly + + + 211, 17 + + + Assembly + + + Assembly + + + 360, 17 + + + ProjectInstaller + + + Assembly + + + False + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/ProjectInstaller.vb b/Source/VisualStudio2002/Chapter10/DebugOnStart/ProjectInstaller.vb new file mode 100644 index 0000000..98ed79d --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/ProjectInstaller.vb @@ -0,0 +1,89 @@ +Imports System.ComponentModel +Imports System.Configuration.Install +Imports Microsoft.Win32 + + Public Class ProjectInstaller + Inherits System.Configuration.Install.Installer + +#Region " Component Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Component Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Installer overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Component Designer + 'It can be modified using the Component Designer. + 'Do not modify it using the code editor. + Friend WithEvents ServiceProcessInstaller1 As System.ServiceProcess.ServiceProcessInstaller + Friend WithEvents ServiceInstaller1 As System.ServiceProcess.ServiceInstaller + Friend WithEvents ServiceInstaller2 As System.ServiceProcess.ServiceInstaller + Private Sub InitializeComponent() + Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller + Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller + Me.ServiceInstaller2 = New System.ServiceProcess.ServiceInstaller + ' + 'ServiceProcessInstaller1 + ' + Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem + Me.ServiceProcessInstaller1.Password = Nothing + Me.ServiceProcessInstaller1.Username = Nothing + ' + 'ServiceInstaller1 + ' + Me.ServiceInstaller1.ServiceName = "ServiceAdmin" + ' + 'ServiceInstaller2 + ' + Me.ServiceInstaller2.ServiceName = "DummyService" + ' + 'ProjectInstaller + ' + Me.Installers.AddRange(New System.Configuration.Install.Installer() {Me.ServiceProcessInstaller1, Me.ServiceInstaller1, Me.ServiceInstaller2}) + + End Sub + +#End Region + + Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary) + + 'First do the install + MyBase.Install(stateSaver) + + 'System.Diagnostics.Debugger.Launch() + + Dim SystemKey As RegistryKey = Registry.LocalMachine.OpenSubKey("System") + Dim ControlSetKey As RegistryKey = SystemKey.OpenSubKey("CurrentControlSet") + Dim ServicesKey As RegistryKey = ControlSetKey.OpenSubKey("Services") + Dim ServiceKey As RegistryKey = ServicesKey.OpenSubKey(Me.ServiceInstaller1.ServiceName, True) + + 'Set the service description + ServiceKey.SetValue("Description", "Allows remote service administration") + + 'Cleanup + ServiceKey.Close() + ServicesKey.Close() + ControlSetKey.Close() + SystemKey.Close() + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/Service.resx b/Source/VisualStudio2002/Chapter10/DebugOnStart/Service.resx new file mode 100644 index 0000000..df79c33 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/Service.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/Service.vb b/Source/VisualStudio2002/Chapter10/DebugOnStart/Service.vb new file mode 100644 index 0000000..5c3fc82 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/Service.vb @@ -0,0 +1,82 @@ +Option Strict On +Imports System.ServiceProcess + +Public Class ServiceAdmin : Inherits System.ServiceProcess.ServiceBase + +#Region " Component Designer generated code " + + Private Listener As ServiceListener = Nothing + + Public Sub New() + MyBase.New() + + ' This call is required by the Component Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call + + End Sub + + 'UserService overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + ' The main entry point for the process + _ + Shared Sub Main() + +#If DEBUG Then + Dim DebugService As New ServiceAdmin + DebugService.OnStart(Nothing) +#Else + Dim ServicesToRun() As System.ServiceProcess.ServiceBase + 'The following line instantiates just your service + 'ServicesToRun = New ServiceBase() {New ServiceAdmin()} + + 'The following line (instead of the previous line) additionally instantiates a dummy service within the same + 'process as your real service. Starting the dummy service allows you to attach to the service process - then + 'you can debug your service's OnStart method by setting a breakpoint before starting your service. + ServicesToRun = New ServiceBase() {New ServiceAdmin, New DummyService} + + 'Start the service + ServiceBase.Run(ServicesToRun) +#End If + + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + ' NOTE: The following procedure is required by the Component Designer + ' It can be modified using the Component Designer. + ' Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container + Me.ServiceName = "ServiceAdmin" + End Sub + +#End Region + + Protected Overrides Sub OnStart(ByVal args() As String) + + Me.Listener = New ServiceListener + Me.Listener.Start() + + End Sub + + Protected Overrides Sub OnStop() + + If Not (Me.Listener Is Nothing) Then + Me.Listener.Close() + Me.Listener = Nothing + End If + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.sln b/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.sln new file mode 100644 index 0000000..39f1c59 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ServiceAdmin", "ServiceAdmin.vbproj", "{A7151D9F-543D-46BF-B098-49E2616B8F05}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Debug.ActiveCfg = Debug|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Debug.Build.0 = Debug|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Release.ActiveCfg = Release|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.suo b/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.suo new file mode 100644 index 0000000000000000000000000000000000000000..271cb5fcb59d575f347d4e5ea1f9f6e506365952 GIT binary patch literal 10240 zcmeHNOKg-?6h3`PK^}sD$jcEZ6r^=p3bf^+?X=Zm3)mJ~%`6i6CI-~Ru+XG&Wh;WlUf|31&T z=broBbMD{qYm0xm@bSuDB`NKd61g!kSMGC^7vY_x(gPyJcwzp=#KeRy6v6AgbO&kR zKge2Ytzj9ST<UCdZ^h2Jwu`A^Zj)g(;8a7;^(q zh}xyi@|mOgWHoJ@sa+0Bw{%L290b>hj41ALXrWo(t*Z7Ju?)N^Ox^;>1gv ze+xLrpoJjTfg0#mzb8=Q$6KZZ{zcrg+^IhVsT%{ z)fE_tMB{49mbUofJ`Ovtud~C|?LQhAR@ntDgT7EC=xXgBj7OquFt;~w#MKsw4y%6i zJdxp%NH`GI!z}0>4EIMyV|Ihmr+Yd(*l(dHG&pi3;*0jXx(35R7R`Ao5Dr9rA-<
    |O3yFOY?pb{q&7LQNcR{V0jRUfuYsMGKD{MePXc zxZ`V3>ID)7HAwzg_ zw00mZPk<13M&x8tdy8e3hYR?_jYJ&aGfUISD$0D$%Gt9GDjoDc9>9y6y(YyRZTl)0r{LqAKIKAy?^Td@YT9@+%g zG@O;Y$VQ7l&$E2_^Q<)IA6``={)a)@j`dj>gp@wmi%Z%dOGvGV7iT3;B%YNq&;aCg zC0M#E!PZ?;E&JhH^uXc{qu)+E*<0K5>$Aj>HWk852Ef}3xw%8VlX;O_D~FcO>~AiI z-p#3+OPvQ>-%LujKdy8bDB(o1Y~#cJl-()g&(r>Cd+!hgkdpa#!peqWSM)=BEmn)k^Fh?nBg}>b?kV68@$wIXkd>&vR*RY%Ra=jGH~PFJr<0CN`xshv7^~_TXoN*iG5QW*o1+U!(&wGVjEe&YhZ_K9qVtH~pbzg>^bp6Ul zKPxMMFdoomWeg(UUaVW4eHdYM0sG)^RMFK>$WBJRccFFvgfp)2W8( zj;a$=dwJx0K%M?ht_+sb%cea&wk?M*P`GT_@W;gBEigWsSGrUU{Go0bALfg{tI*b* zc06Z7(7(Yrjk5#T5<#^^$XWYA>9~sk|0l6GU;e8x)bkd=9l$0Uf(6jm$%OIgIqTB3 zQ{c~aI%5s$!R&bh5>q}@0Jcz=6uAE=B9s?${xAl%*khAthP7R?7tN;E+PeT-^dvdw z0AR%UIMwjYnw6aq?3&SrkZ$k0-P10K?Rn%c1!J!!fH-aP1myQXYDS*ieOv{5%w4GE zokOm~y|ZwC_m5Yu&+mM*;_Tq?p%FE$RO1ttv z7%%d+%I1iOkky$2J}l(;<-hyhSodk`hmGI+&;E0AjpCC_z#R3@x)}e?#<6B1Uf%n7 zVIBJT>$}D^5$M7NZBQr1V`KE2coh23%Z`5a?7zD3#O2?YJ-7c{^~LfFfA0B74OYm{ z9e(zkGmd`n2zDJ0b$$Ct#HYWTJ(>I0Lhy&@bKDyC5UiP8xi$fik;mL%WarMi!@}|3 ziGMu`iR}C5ZlDi!z&i+@O17t;UJ~Lj;|W?*zUR+lXlvqcGhgoN0dVFz6q1&MKl$=b zHedc*(Uvl+RJiY_J-+R@Wp()5o3iV@U_v zOwE)Lo!Q^7g#J>|})8JO3K zziqhl;hE#?p>K&CxTn1!dP0n9UIfj?SFuD_KtrPbo=nl!gDOD$9&HjOWYo|J)1;A# zirt*Gm&TVghQ1hI{7JK%->`4ZcdTPClbr9SEcqG4B6y)}6LaYQZ{Qb|xbiUhC1p%p zSenEeVD@r;IZXbZVmwCUA!qx>m#7=_KNdVD&30@De@f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.vbproj.user b/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.vbproj.user new file mode 100644 index 0000000..5c92159 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceAdmin.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceListener.vb b/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceListener.vb new file mode 100644 index 0000000..2dcaa2e --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/ServiceListener.vb @@ -0,0 +1,92 @@ +Option Strict On + +Imports System.Threading +Imports System.Net + +Public Class ServiceListener + + Private ListenThread As Thread = Nothing + Private ThreadExit As Boolean = False + Private Clients As ArrayList = New ArrayList + + Public Sub New() + + End Sub + + Public Sub Start() + + If Me.ListenThread Is Nothing Then + Me.ThreadExit = False + Me.ListenThread = New Thread(New ThreadStart(AddressOf ListeningThread)) + Me.ListenThread.Start() + Else + Throw New InvalidOperationException("Listener thread already started") + End If + + End Sub + + Private Sub ListeningThread() + Dim MyTcpListener As Sockets.TcpListener = Nothing + Dim LocalAddress As Net.IPAddress = IPAddress.Any + Dim ThisClient As Client = Nothing, LoopCounter As Int32 + + Try + MyTcpListener = New Sockets.TcpListener(LocalAddress, 5005) + MyTcpListener.Start() + Trace.WriteLine("Listening thread starting on " & MyTcpListener.LocalEndpoint.ToString) + + While Me.ThreadExit = False + Thread.Sleep(500) + If MyTcpListener.Pending = True Then + Trace.WriteLine(Environment.NewLine & "Connecting new client") + ThisClient = New Client(MyTcpListener.AcceptSocket()) + Clients.Add(ThisClient) + ThisClient.Start() + Else + For LoopCounter = Me.Clients.Count - 1 To 0 Step -1 + ThisClient = DirectCast(Clients(LoopCounter), Client) + If ThisClient.IsConnected = False Then + Trace.WriteLine("Performing client cleanup") + ThisClient.Close() + Me.Clients.RemoveAt(LoopCounter) + End If + Next + End If + End While + + Catch Exc As Sockets.SocketException + Trace.WriteLine(Exc.Message) + + Finally + Trace.WriteLine("Listen thread ending...") + If Not (MyTcpListener Is Nothing) Then + MyTcpListener.Stop() + End If + Trace.WriteLine("Listen thread ended") + + End Try + + End Sub + + Public Sub Close() + Dim ThisClient As Client = Nothing, LoopCounter As Int32 + + Me.ThreadExit = True + 'Pause to process pending requests and do cleanup + Thread.Sleep(1000) + 'Time to die + If Me.ListenThread.IsAlive Then + Me.ListenThread.Abort() + Me.ListenThread = Nothing + End If + 'Dump any client still connected! + For LoopCounter = Me.Clients.Count - 1 To 0 Step -1 + ThisClient = DirectCast(Clients(LoopCounter), Client) + ThisClient.Close() + Me.Clients.RemoveAt(LoopCounter) + Next + Me.Clients = Nothing + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/bin/error.html b/Source/VisualStudio2002/Chapter10/DebugOnStart/bin/error.html new file mode 100644 index 0000000..a64a784 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/bin/error.html @@ -0,0 +1,16 @@ + + + + + + Couldn't find page + + + + +

    Ooops!

    + +

    Sorry - this page cannot be found

    + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/bin/status.html b/Source/VisualStudio2002/Chapter10/DebugOnStart/bin/status.html new file mode 100644 index 0000000..d847698 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/bin/status.html @@ -0,0 +1,25 @@ + + + + + + Service administrator + + + + +

    Windows services on

    +

    #1#

    + + + + + + + +#2# +
    Service name
    Service description
    Service status
    + + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/error.html b/Source/VisualStudio2002/Chapter10/DebugOnStart/error.html new file mode 100644 index 0000000..a64a784 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/error.html @@ -0,0 +1,16 @@ + + + + + + Couldn't find page + + + + +

    Ooops!

    + +

    Sorry - this page cannot be found

    + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Debug/ServiceAdmin.DummyService.resources b/Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Debug/ServiceAdmin.DummyService.resources new file mode 100644 index 0000000000000000000000000000000000000000..d42e55551f494b8ef9389b001d47b993acbce7bb GIT binary patch literal 188 zcmX?i>is@O1_p+CK&%;DSzMBus~417oL^d$oLUTL1*ImYq!#HYycEh^5;&$BhuGte_NFfhR-+SNAOWwZT ztVW3F5$sg9;tFOd3(R#qt~2-7Y=LP-#$!>-)g5jc1-H@DvxQ-??a(X}JKnMA1;$;& zu_xn-sw7lZRn%B?#xsS-*`&=p!8J1$&3FaV(9f~TqH~$qlZ9kbOX!KQ_{7L4Q^zMH z%RX2a%nJ6Oaf&SESjs%J3XD$)!Ht3^m>Y}M99pw;F4!##czdbUd0h(7rya*+n%!#n z$LG@?2L9aU3_ya_kR51=j&^^O~`r{ipF8zU>@wMlp5ns2hmH+ ztC$btI*a>T-9)hyB&bXVxuj5v7?nsvpoypR<;R2b_nqg~caW7}~wC z2!D+#l*TuwCAiFy4m_LI;hM_&fGYsj{UsaV0m+wOUGHe}`N zu=p=Jrmx4~UgTPbmSvBuMk+)-z69@ZKLBg{@*T*#^Me>(-ZDis@O1_p+CK&%;DSzMBus~417oL^d$oLUTL1*ImYq!#HYycEh^5;&$BhuGte_NFfh + + + + Couldn't find page + + + + +

    Ooops!

    + +

    Sorry - this page cannot be found

    + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Debug/status.html b/Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Debug/status.html new file mode 100644 index 0000000..d847698 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Debug/status.html @@ -0,0 +1,25 @@ + + + + + + Service administrator + + + + +

    Windows services on

    +

    #1#

    + + + + + + + +#2# +
    Service name
    Service description
    Service status
    + + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Release/ServiceAdmin.DummyService.resources b/Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Release/ServiceAdmin.DummyService.resources new file mode 100644 index 0000000000000000000000000000000000000000..d42e55551f494b8ef9389b001d47b993acbce7bb GIT binary patch literal 188 zcmX?i>is@O1_p+CK&%;DSzMBus~417oL^d$oLUTL1*ImYq!#HYycEh^5;&$BhuGte_NFfhR-+SNAOWwZT ztVW3F5$sg9;tFOd3(R#qt~2-7Y=LP-#$!>-)g5jc1-H@DvxQ-??a(X}JKnMA1;$;& zu_xn-sw7lZRn%B?#xsS-*`&=p!8J1$&3FaV(9f~TqH~$qlZ9kbOX!KQ_{7L4Q^zMH z%RX2a%nJ6Oaf&SESjs%J3XD$)!Ht3^m>Y}M99pw;F4!##czdbUd0h(7rya*+n%!#n z$LG@?2L9aU3_ya_kR51=j&^^O~`r{ipF8zU>@wMlp5ns2hmH+ ztC$btI*a>T-9)hyB&bXVxuj5v7?nsvpoypR<;R2b_nqg~caW7}~wC z2!D+#l*TuwCAiFy4m_LI;hM_&fGYsj{UsaV0m+wOUGHe}`N zu=p=Jrmx4~UgTPbmSvBuMk+)-z69@ZKLBg{@*T*#^Me>(-ZDis@O1_p+CK&%;DSzMBus~417oL^d$oLUTL1*ImYq!#HYycEh^5;&$BhuGte_NFfh + + + + Couldn't find page + + + + +

    Ooops!

    + +

    Sorry - this page cannot be found

    + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Release/status.html b/Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Release/status.html new file mode 100644 index 0000000..d847698 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/obj/Release/status.html @@ -0,0 +1,25 @@ + + + + + + Service administrator + + + + +

    Windows services on

    +

    #1#

    + + + + + + + +#2# +
    Service name
    Service description
    Service status
    + + + diff --git a/Source/VisualStudio2002/Chapter10/DebugOnStart/status.html b/Source/VisualStudio2002/Chapter10/DebugOnStart/status.html new file mode 100644 index 0000000..d847698 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/DebugOnStart/status.html @@ -0,0 +1,25 @@ + + + + + + Service administrator + + + + +

    Windows services on

    +

    #1#

    + + + + + + + +#2# +
    Service name
    Service description
    Service status
    + + + diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter10/ServiceAdmin/AssemblyInfo.vb new file mode 100644 index 0000000..64988a1 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/Client.vb b/Source/VisualStudio2002/Chapter10/ServiceAdmin/Client.vb new file mode 100644 index 0000000..601e85c --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/Client.vb @@ -0,0 +1,130 @@ +Option Strict On + +Imports System.Net +Imports System.Text +Imports System.Threading +Imports System +Imports System.IO +Imports System.ServiceProcess + +Public Class Client + + Private ThisClient As Sockets.Socket = Nothing + Private ReadBuffer(16384) As Byte + Private PageBuffer(16384) As Byte + Private EmptyBuffer() As Byte = Encoding.ASCII.GetBytes(Space$(1024)) + + Public Sub New(ByVal NewClient As Sockets.Socket) + + Me.ThisClient = NewClient + + End Sub + + Public Sub Start() + Dim HtmlStream As StreamReader, PageRequest As String, PageText As String + + Try + Me.ThisClient.Receive(Me.ReadBuffer, Me.ReadBuffer.Length, Sockets.SocketFlags.None) + PageRequest = ReturnPage(Encoding.ASCII.GetString(Me.ReadBuffer)) + 'Open requested page + HtmlStream = New StreamReader(PageRequest) + PageText = HtmlStream.ReadToEnd() + HtmlStream.Close() + 'If status page, display services + PageText = PageText.Replace("#1#", Environment.MachineName & " (" & Me.ThisClient.LocalEndPoint.ToString & ")") + PageText = PageText.Replace("#2#", Me.DisplayServices) + 'Display requested page + Trace.WriteLine("Sending page " & PageRequest) + Me.PageBuffer = Encoding.ASCII.GetBytes(PageText) + Me.ThisClient.Send(Me.PageBuffer, Me.PageBuffer.Length, Sockets.SocketFlags.None) + Me.Close() + + Catch Exc As Sockets.SocketException + Trace.WriteLine(Exc.Message) + Close() + + End Try + + End Sub + + Private Function ReturnPage(ByVal PageRequest As String) As String + Dim HtmlPage As String, IndexStart As Int32, IndexEnd As Int32 + + 'Extract page + IndexStart = InStr(PageRequest, "/") + 1 + IndexEnd = InStr(IndexStart, PageRequest, " ") + HtmlPage = Mid$(PageRequest, IndexStart, IndexEnd - IndexStart) + 'add suffix if necessary + If Right$(HtmlPage, 5) <> ".html" Then + HtmlPage += ".html" + End If + 'Add local path + HtmlPage = Me.ReturnPath & HtmlPage + 'Check page exists + If File.Exists(HtmlPage) = False Then + HtmlPage = Me.ReturnPath & "error.html" + End If + 'Return page + Trace.WriteLine("Page requested: " & HtmlPage) + Return HtmlPage + + End Function + + Private Function ReturnPath() As String + + If Right$(AppDomain.CurrentDomain.BaseDirectory, 1) = "\" Then + Return AppDomain.CurrentDomain.BaseDirectory + Else + Return AppDomain.CurrentDomain.BaseDirectory & "\" + End If + + End Function + + Private Function DisplayServices() As String + Dim ThisService As ServiceController, TempPage As String + + For Each ThisService In ServiceController.GetServices + TempPage += "" & Environment.NewLine + 'Add service name + TempPage += "
    " + TempPage += ThisService.ServiceName & "
    " & Environment.NewLine + 'Add service friendly name + TempPage += "
    " + TempPage += ThisService.DisplayName & "
    " & Environment.NewLine + 'Add service status + TempPage += "
    " + TempPage += ThisService.Status.ToString & "
    " & Environment.NewLine + TempPage += "" & Environment.NewLine + 'Finished with this service + ThisService.Dispose() + Next + + Return TempPage + + End Function + + Public Function IsConnected() As Boolean + + If Me.ThisClient Is Nothing Then + Return False + Else + Return Me.ThisClient.Connected + End If + + End Function + + Public Sub Close() + + If Not (Me.ThisClient Is Nothing) Then + Trace.WriteLine("Closing client socket") + Me.ThisClient.Shutdown(Sockets.SocketShutdown.Both) + Me.ThisClient.Close() + Me.ThisClient = Nothing + End If + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/ProjectInstaller.resx b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ProjectInstaller.resx new file mode 100644 index 0000000..482e83e --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ProjectInstaller.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + Assembly + + + 17, 17 + + + Assembly + + + Assembly + + + 211, 17 + + + ProjectInstaller + + + Assembly + + + False + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/ProjectInstaller.vb b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ProjectInstaller.vb new file mode 100644 index 0000000..4c0d513 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ProjectInstaller.vb @@ -0,0 +1,83 @@ +Imports System.ComponentModel +Imports System.Configuration.Install +Imports Microsoft.Win32 + + Public Class ProjectInstaller + Inherits System.Configuration.Install.Installer + +#Region " Component Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Component Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Installer overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Component Designer + 'It can be modified using the Component Designer. + 'Do not modify it using the code editor. + Friend WithEvents ServiceProcessInstaller1 As System.ServiceProcess.ServiceProcessInstaller + Friend WithEvents ServiceInstaller1 As System.ServiceProcess.ServiceInstaller + Private Sub InitializeComponent() + Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller + Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller + ' + 'ServiceProcessInstaller1 + ' + Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem + Me.ServiceProcessInstaller1.Password = Nothing + Me.ServiceProcessInstaller1.Username = Nothing + ' + 'ServiceInstaller1 + ' + Me.ServiceInstaller1.ServiceName = "ServiceAdmin" + ' + 'ProjectInstaller + ' + Me.Installers.AddRange(New System.Configuration.Install.Installer() {Me.ServiceProcessInstaller1, Me.ServiceInstaller1}) + + End Sub + +#End Region + + Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary) + + 'First do the install + MyBase.Install(stateSaver) + + 'System.Diagnostics.Debugger.Launch() + + Dim SystemKey As RegistryKey = Registry.LocalMachine.OpenSubKey("System") + Dim ControlSetKey As RegistryKey = SystemKey.OpenSubKey("CurrentControlSet") + Dim ServicesKey As RegistryKey = ControlSetKey.OpenSubKey("Services") + Dim ServiceKey As RegistryKey = ServicesKey.OpenSubKey(Me.ServiceInstaller1.ServiceName, True) + + 'Set the service description + ServiceKey.SetValue("Description", "Allows remote service administration") + + 'Cleanup + ServiceKey.Close() + ServicesKey.Close() + ControlSetKey.Close() + SystemKey.Close() + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/Service.resx b/Source/VisualStudio2002/Chapter10/ServiceAdmin/Service.resx new file mode 100644 index 0000000..df79c33 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/Service.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/Service.vb b/Source/VisualStudio2002/Chapter10/ServiceAdmin/Service.vb new file mode 100644 index 0000000..caf9754 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/Service.vb @@ -0,0 +1,82 @@ +Option Strict On +Imports System.ServiceProcess + +Public Class ServiceAdmin : Inherits System.ServiceProcess.ServiceBase + +#Region " Component Designer generated code " + + Private Listener As ServiceListener = Nothing + + Public Sub New() + MyBase.New() + + ' This call is required by the Component Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call + + End Sub + + 'UserService overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + ' The main entry point for the process + _ + Shared Sub Main() + +#If DEBUG Then + Dim DebugService As New ServiceAdmin + DebugService.OnStart(Nothing) +#Else + Dim ServicesToRun() As System.ServiceProcess.ServiceBase + 'The following line instantiates just your service + ServicesToRun = New ServiceBase() {New ServiceAdmin()} + + 'The following line (instead of the previous line) additionally instantiates a dummy service within the same + 'process as your real service. Starting the dummy service allows you to attach to the service process - then + 'you can debug your service's OnStart method by setting a breakpoint before starting your service. + 'ServicesToRun = New ServiceBase() {New ServiceAdmin(), New DummyService()} + + 'Start the service + ServiceBase.Run(ServicesToRun) +#End If + + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + ' NOTE: The following procedure is required by the Component Designer + ' It can be modified using the Component Designer. + ' Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container + Me.ServiceName = "ServiceAdmin" + End Sub + +#End Region + + Protected Overrides Sub OnStart(ByVal args() As String) + + Me.Listener = New ServiceListener + Me.Listener.Start() + + End Sub + + Protected Overrides Sub OnStop() + + If Not (Me.Listener Is Nothing) Then + Me.Listener.Close() + Me.Listener = Nothing + End If + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.sln b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.sln new file mode 100644 index 0000000..39f1c59 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ServiceAdmin", "ServiceAdmin.vbproj", "{A7151D9F-543D-46BF-B098-49E2616B8F05}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Debug.ActiveCfg = Debug|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Debug.Build.0 = Debug|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Release.ActiveCfg = Release|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.suo b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.suo new file mode 100644 index 0000000000000000000000000000000000000000..482ba30a7ee1e2780b2a47ab561d109e871447f3 GIT binary patch literal 10240 zcmeHMU2GIp6uwJ~l%EzsK}5k33lyYFTZ*(4FzvQzu?1|wR@0a5cH3^*?lilLr2(TP zJ{aNyPo%tPc`z}c4<nVsF4ooy*X(z7{p z@7#Omp8Ip|ch0#xd2_`t7d~41t8mahQ6z3pEfx>h$^*!gB|Rv_0%Z7pdunRRC=>$O zdAg5Q;9rcj*xbW~NV(sOz>C2p;3eQ?;HBVF@JetQn0sy~=exabK7a47K!?!rOAAf3 zhy>E47{l)Rr`2NN^qF6k=d-hye>gB&_F13^?QT$sKu1Jaq{K1NCSpj_;wYX`j6#*C zjApLSa-a}bmpaSTwV|Vex=m^oFNsdkE}F$*NY%xNl%B>aG|Bf-b38`t?B`ZfK4p`# zTV$8m@zRpt49O|1!T|PxE6^#Quc9P^oEt%YfM=HHbtdvT7UDSfgn6>UfJ(EB7{K#S z93Td8>z0Grc7>TT|1k2@fz{wgz-z#dg4cqBV76I@bUpY9um*k-yaD_axE#C@%yyfR zR+#y%X3BE%F1&9CSAna+HQ*iKTJTQrGhnu>L%Q3{^L?JOSK!YOHD~5T-B=z%{z!WpzbgyHVjxO?$2K=E` z5eJy&X)dcd!t-WBqFygnW&l6Vy9?`)#`+E7Eg$x?3(9{8DSa5f^4XSHMRLj~>PIn# zW7rj4u6x>Z92MsLDVt>U>iwjjb%Tola>{SP9#DIz6V#Q2r*t7Uneu7R{K{urW&g}! za454PYFq+rXq;h72e6i5Xs;&rV=i&Iqdl;-v}m-oDR4jLsb!oLE#s_cup9^Bn;enn zDI#_u<=1I>9^Sl55~-7M%%mT(doXUE@Sf>+A^zWS7^5RT6i!b4<4z@jId&xT>J|DY z^-e0kPyMIGIp?DP?a-28=mq`IE^{oppcj^#wn6{tztAu7tN#dHp-%?!ycy`5fUd@E znri6q5XKWhi;z5vY)LQK8qMw*oPWkp#2`{L`i%hphRvSsb3TkZdW2p`P-V)eRq#81 z;^k5`0OYxTPMS@bv#+^)CzeWDBPxntFTyfRO>J5r0&QofCwT3*_eQ_Kdv}RZRuMQU z8UZBLa2Bhv0rlAQO5|(dL^dN=3kR}EmNmg3*NZw?Ru2%WK~1%+twVhkzIjcYa+plZ zUrFZ@xlcr(_7>ynFtz#rOv z#)p3K=P|S;29s!K;#h5kaR$!z1N8>vF`;C`4>H<2pTK`9m$FID`dsgiqwp0I;11!4 z4nYIxtGHo&u0B-R`WeXQKAko@2x0cT0ZB<8C<K_SL$uAEyZW$kX z;r;I>PIuhCa#4CYyh&-59tdM4-d0%>5&5y&EqugAPG0@1`>hQhw|ubs+sOFeC)Sy; zm~V)l^)G6Se{-2O8ZZ_8@@6kP`Yp`(SrM=5RYU*XH@PPQYoSe>S_2bP(o?s`(som- zdi(ssvsZs#_42{?uEduDb2+=;#8 z8t@K+R>|`8bB~1hOIyaX#5Ks>Dzo%yysG$H&6lUTACkEbh0toqr(E92`jx*8ZI%6n z-#2q#kpo>LzAElF{O$^G-*Eli_6@O|_mAH#;Cs8HckWoCPw3A3LZ!!yQ>}w91kW6a zX)9RWf3b|ZtAXv`@)lqKQSzX~1D;Of-XDo1esg7VC9l`BDSzxTjZg7UCs$l<5)E0VNsyy4SN^YocP~%4sqf+89Tn?OJD81Ir1DonKu4= zuyHq*>2V`Ao!GOTw-=>v`;y04buQvk=#qpybrF#g8bFy>K{T^bKp`D*Dg_OzWlD{| z?Re3bmcYqtu`zs;-CvKq)V3RM%Xk)Mydy9fF^q{mqm+g!)OYA0l;kR8)?e^1B#ksS+v$dUs&Q?T_gzyN! zn-MMV-7{kqu7o?$|K;rz@3j5;pLYM-ieHWY|E&KX#$ZVJpQQXZ*L48=|BJrNvI6AS bqpjWlaqZk^1?R2E=O=fxnUc-4(2oBD!PTh# literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.vbproj b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.vbproj new file mode 100644 index 0000000..028f86e --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.vbproj @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.vbproj.user b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.vbproj.user new file mode 100644 index 0000000..447fdc6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceAdmin.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceListener.vb b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceListener.vb new file mode 100644 index 0000000..2dcaa2e --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/ServiceListener.vb @@ -0,0 +1,92 @@ +Option Strict On + +Imports System.Threading +Imports System.Net + +Public Class ServiceListener + + Private ListenThread As Thread = Nothing + Private ThreadExit As Boolean = False + Private Clients As ArrayList = New ArrayList + + Public Sub New() + + End Sub + + Public Sub Start() + + If Me.ListenThread Is Nothing Then + Me.ThreadExit = False + Me.ListenThread = New Thread(New ThreadStart(AddressOf ListeningThread)) + Me.ListenThread.Start() + Else + Throw New InvalidOperationException("Listener thread already started") + End If + + End Sub + + Private Sub ListeningThread() + Dim MyTcpListener As Sockets.TcpListener = Nothing + Dim LocalAddress As Net.IPAddress = IPAddress.Any + Dim ThisClient As Client = Nothing, LoopCounter As Int32 + + Try + MyTcpListener = New Sockets.TcpListener(LocalAddress, 5005) + MyTcpListener.Start() + Trace.WriteLine("Listening thread starting on " & MyTcpListener.LocalEndpoint.ToString) + + While Me.ThreadExit = False + Thread.Sleep(500) + If MyTcpListener.Pending = True Then + Trace.WriteLine(Environment.NewLine & "Connecting new client") + ThisClient = New Client(MyTcpListener.AcceptSocket()) + Clients.Add(ThisClient) + ThisClient.Start() + Else + For LoopCounter = Me.Clients.Count - 1 To 0 Step -1 + ThisClient = DirectCast(Clients(LoopCounter), Client) + If ThisClient.IsConnected = False Then + Trace.WriteLine("Performing client cleanup") + ThisClient.Close() + Me.Clients.RemoveAt(LoopCounter) + End If + Next + End If + End While + + Catch Exc As Sockets.SocketException + Trace.WriteLine(Exc.Message) + + Finally + Trace.WriteLine("Listen thread ending...") + If Not (MyTcpListener Is Nothing) Then + MyTcpListener.Stop() + End If + Trace.WriteLine("Listen thread ended") + + End Try + + End Sub + + Public Sub Close() + Dim ThisClient As Client = Nothing, LoopCounter As Int32 + + Me.ThreadExit = True + 'Pause to process pending requests and do cleanup + Thread.Sleep(1000) + 'Time to die + If Me.ListenThread.IsAlive Then + Me.ListenThread.Abort() + Me.ListenThread = Nothing + End If + 'Dump any client still connected! + For LoopCounter = Me.Clients.Count - 1 To 0 Step -1 + ThisClient = DirectCast(Clients(LoopCounter), Client) + ThisClient.Close() + Me.Clients.RemoveAt(LoopCounter) + Next + Me.Clients = Nothing + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/error.html b/Source/VisualStudio2002/Chapter10/ServiceAdmin/error.html new file mode 100644 index 0000000..a64a784 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/error.html @@ -0,0 +1,16 @@ + + + + + + Couldn't find page + + + + +

    Ooops!

    + +

    Sorry - this page cannot be found

    + + diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/obj/Debug/ServiceAdmin.ProjectInstaller.resources b/Source/VisualStudio2002/Chapter10/ServiceAdmin/obj/Debug/ServiceAdmin.ProjectInstaller.resources new file mode 100644 index 0000000000000000000000000000000000000000..cdee8ee84dc365796172e66ddd90a4c3a691e65d GIT binary patch literal 1990 zcmdT@J!=$E6uldxQ6iE;uyhIuh{G_G&1OxpMUrizyRz&CySU8E-Xvq@1KzwB+(H{0 z1q&@iP*9sRmiYnu0|Z4&E3q<#XlWrt&l^|GW)aq~#rkIMyy4w*&pqeDd;RiDCr3n2 z5$7B2RB~k1IZc%CIsN@tXSc<|G@{f`L>PE!KT^dqi1=4&gXJHzX4Nj5nydBvhz@C$R!e14Ygi}PCL3B(aZ)a}2N zw78r^R+S@<#e$R~@Ra1#G=2hlI~VN3bzbduYk)ppAGWV+UG~K!3E7Q@O-XXN z8@E6B_aA-Ud-7Oq+}rLvyZK^z_uJ0ih2T@A_3F&WTidHM81W@c*Fk(mD1=^baNfaw z7khP_$UH}qHYlK!EGiSz8o2<6IIU7bEo9aZOachKPVX}RPM3F7WifA%7RTIf|_T_S%N;eEyjP)rV*R`j5?_@?7H8VmK bOpd(Ii5bT+4W~HjLPuR+?wC{jALjT244)G4 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/obj/Debug/ServiceAdmin.ServiceAdmin.resources b/Source/VisualStudio2002/Chapter10/ServiceAdmin/obj/Debug/ServiceAdmin.ServiceAdmin.resources new file mode 100644 index 0000000000000000000000000000000000000000..4e892e645f74a7d45a9b16ff50c89dee3f7790c7 GIT binary patch literal 188 zcmX?i>is@O1_p+CK&%;DSzMBus~417oL^d$oLUTL1*ImYq!#HYycEh^5;&$BhuGte_OHZagL&{1$M%_%7@O0~^PEiEZZ%+XN@ rC{4=AO!iK#49U+<&9hB1H%~N8HZ?P}G&V^!u&@NV5(WYs_W+py1_C`D literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter10/ServiceAdmin/status.html b/Source/VisualStudio2002/Chapter10/ServiceAdmin/status.html new file mode 100644 index 0000000..d847698 --- /dev/null +++ b/Source/VisualStudio2002/Chapter10/ServiceAdmin/status.html @@ -0,0 +1,25 @@ + + + + + + Service administrator + + + + +

    Windows services on

    +

    #1#

    + + + + + + + +#2# +
    Service name
    Service description
    Service status
    + + + diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/FormInterop.frm b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/FormInterop.frm new file mode 100644 index 0000000..1d2038e --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/FormInterop.frm @@ -0,0 +1,42 @@ +VERSION 5.00 +Begin VB.Form FormInterop + Caption = "Interop debugging" + ClientHeight = 2544 + ClientLeft = 48 + ClientTop = 288 + ClientWidth = 3744 + LinkTopic = "Form1" + ScaleHeight = 2544 + ScaleWidth = 3744 + StartUpPosition = 2 'CenterScreen + Begin VB.CommandButton DebugTest + Caption = "Test debug of VB6 app calling VB .NET component" + Height = 1092 + Left = 720 + TabIndex = 0 + Top = 720 + Width = 2172 + End +End +Attribute VB_Name = "FormInterop" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Option Explicit + +Private Sub DebugTest_Click() +Dim InteropTest As InteropDemo.MathClass +Set InteropTest = New InteropDemo.MathClass + +Me.DebugTest.Caption = "Result = " & CStr(InteropTest.AddTwoNumbers(1.1, 2.2)) + +Set InteropTest = Nothing + +End Sub + +Private Sub Form_Load() + +Me.Caption = "Test interop debugging" + +End Sub diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/AssemblyInfo.vb new file mode 100644 index 0000000..b8889fb --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropClass.vb b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropClass.vb new file mode 100644 index 0000000..510e7b9 --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropClass.vb @@ -0,0 +1,20 @@ +Option Strict On +Imports System.Runtime.InteropServices + +Public Interface IMathClass + Function AddTwoNumbers(ByVal FirstNumber As Double, _ + ByVal SecondNumber As Double) As Double +End Interface + + _ +Public Class MathClass : Implements IMathClass + + Public Sub New() + End Sub + + Public Function AddTwoNumbers(ByVal FirstNumber As Double, ByVal SecondNumber As Double) As Double Implements IMathClass.AddTwoNumbers + 'Return the result to VB6 + Return FirstNumber + SecondNumber + End Function + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln new file mode 100644 index 0000000..41538ff --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InteropDemoBetter", "InteropDemoBetter.vbproj", "{5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.ActiveCfg = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.Build.0 = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.ActiveCfg = Release|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.suo b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.suo new file mode 100644 index 0000000000000000000000000000000000000000..f91b8a31a1c5a84308bad45dbd299bf7c9ac9838 GIT binary patch literal 7168 zcmeHLOKe+36unMTnuMgKl$KIxd4v`UYOS{P0}WJ4Y^N0Lq~x#48~@_Eb^I*bNgDB& z5UNSKz z+UD%x2K;lsH=?wobf9#hbfVmf!hL30r~i)yhQ-FOB$k9EhyQ}iW2e2-cG<8P^YoEM z^!e2n-~YDj3tuakUUHa6B_>6=AYsYiza(RLrl5uCFE*MG@AgQGkA6#k<*qbgUwln| z(rHMd1+o&y^P-F>>9f!#fm(C2AfIw?2dh{4#LPFGsZYx|WJV+?XRvBp@=AUQyU?%N zbB;agY4R}SGkz(XRFAK+zY?!mCysMZOnmd77;wPpGx1L>=tkLuvKa+OfEvTKSB_=< zPW0_SxeH|{%H1gUpzK1~jdCvv`R>Di56b;cdoTVUaO!+ti|X~);$81+Y=PebMETVd zePeT=FkdXives}aZx>1`WZQzVQjF7fPDaAkNa9>-S~a_anON3NTcKp8WEaTLF_DT} z19o9rjq429(|J3W%IRskCo;LDJy&!Y+MXPZggI_gAe+g@?N}jc4QFy`c5OVB%B2di zEbAWWXF4CKyuc?xi8z>)A(=v45)V^AsA;~eNsQ&S5XWCc3CIbFLZU4*kV))`qVF7J z=b;4=@eqDdphaAcDU{4W&$MbE2d51k^LXaKOB|2NDYR^?M86wXa}9$&_0qp4mA;k5YNjAR3T+wb(Z%-7(52e{LqH><4^c;BMI-Oy zS*`OQo+4iTkGYr0zpCYPmx;fXxB&LL1o?};?^Ql^{n4kVtd<{fJe+y(grkcs%))BZ ze#mF;#GJ^h{4L-eb*7`eb$sQN=el05{oll*!9Fv2M(VlE)UyGdeJu626NdYxJ0H}Ke z>GER`8j>TZ9YIe&faU<6hrxFcwSyQDf^s4B1?5q+f)b=JM1WLT6>mhXm_nu*M4<5i zktdXoiS%M(5l1w{9mT3wEgC964;5_0`waX*dsd~-pTRq31dWj3ApDPa0{R|F*|Euk zXCHG0QX~21E*OMOXqQ^#hkTwwTDmv++rV#jmN=8e`pp`3oK0cXY4q~!F>h)~XC9&P zZzb}#W2&=GfD9q~I1dltIae>nYfIL>yH_FK!q8uwN&RsBIdxjPemA7hztZb?+pF!H zI#VETySlgCNZ;&L8O4p9(J#aBb7m3z>X4G>#Ne7AXL7&VZRURc;2|WqarZb{H&zq( z>3>T?$ckpBCqYe{8`JJ+x}8F!ot<3 z`X0J`{^@tVdF$ojg%967#QAxH55P9GUQvCsiK`glX?Ym$=J()HJ7w&Lx+VOWO5$?^ zzX7<~vc|kJjFQIM5}b>l4{Fbam(*nW_yLSBU?wnJ|M>UGOFbWj-aGMi;_{ytcd7GU zL9W6*zccz7i}$aD%2}C9y04{f>K8P@|UK zzMLdPyxM=cc_**w9DJ#H|7f;RzMEtJ<=b+z?QiVIn?A9g{==32Ku-hpVqmS9c#?pCP mUAg?q^_%b9=KJ>uP=_|)Hwb1WZl+&blhv&MK}==tU;hBtA6W + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj.user b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj.user new file mode 100644 index 0000000..18fcf12 --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj.user @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.exe b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.exe new file mode 100644 index 0000000000000000000000000000000000000000..5f251c4b742143c434dc5f9151090e16e27ddfd2 GIT binary patch literal 20542 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 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.pdb b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.pdb new file mode 100644 index 0000000000000000000000000000000000000000..747fe6ef50694e85e7a725695e0148ec90e3f896 GIT binary patch literal 74752 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 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.vbp b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.vbp new file mode 100644 index 0000000..181c660 --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.vbp @@ -0,0 +1,36 @@ +Type=Exe +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\WINNT\System32\stdole2.tlb#OLE Automation +Form=FormInterop.frm +IconForm="FormInterop" +Startup="FormInterop" +HelpFile="" +Title="InteropDebug" +ExeName32="InteropDebug.exe" +Command32="" +Name="InteropDebug" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="Sleek Software Ltd" +CompilationType=0 +OptimizationType=2 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=-1 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.vbw b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.vbw new file mode 100644 index 0000000..7ce665e --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDebug.vbw @@ -0,0 +1 @@ +FormInterop = 138, 138, 915, 786, Z, 92, 92, 869, 740, C diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/AssemblyInfo.vb new file mode 100644 index 0000000..b8889fb --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropClass.vb b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropClass.vb new file mode 100644 index 0000000..8468909 --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropClass.vb @@ -0,0 +1,17 @@ +Option Strict On +Imports System.Runtime.InteropServices + + _ +Public Class MathClass + + Public Sub New() + End Sub + + Public Function AddTwoNumbers(ByVal FirstNumber As Double, ByVal SecondNumber As Double) As Double + + 'Return the result to VB6 + Return FirstNumber + SecondNumber + + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln new file mode 100644 index 0000000..5188e56 --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InteropDemo", "InteropDemo.vbproj", "{5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.ActiveCfg = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.Build.0 = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.ActiveCfg = Release|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.suo b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.suo new file mode 100644 index 0000000000000000000000000000000000000000..38d21d6527d65a623f7cb4075a77e263aef2340f GIT binary patch literal 7168 zcmeHLU2KzO6h0k87>-{B5d}XHa3IW0CPPr-))qnA4Y$D-)0?jCN=Mf=ZDA~c(F-E+ z$_p>>!l)NUf=(zVn^) z{+#oi^L|$@um0h+_cr_}Rpo#zlIc>5+*C2{Lz|?^Dv>5M*q<(yN_tQP%^T%Ev;%)) zuFd8Q7o+BRF99tDwSZbd%Ro1Sc+R97<^Qt-1CqtBD2@argE}u$IBD-?oh&ZJD1^(_L^qlS4%qEe6(5|R|^q8!D40<*B=g?a+PDcXt%Uio=OAu@?-L| z9EK+DKw3uee_95W_EVTm46Vk+fqwc7;Lx*vV&+Rm^kF#$onZ;c5v)2ZIi>Ne1J)4$Kue0HNO+z$NeC(6&i z&^A{3^HYUlH0=x|a@l-QxomSFT8vWcvXOAe8H^oIOsMYiKq{KfCY@kBRm|qe&@!AD zbq;3p6Y9NX{_I39n@MD}nB~K%OguYTa2c8p4TVE|Z-qad%8h2D`M5KX$|O0o(Q@u8Ha`A<+H4#uTl#^9I4!vqj&f)8sJU(HePgM6R!^~*kqKx0-;LMO2& zg0bV!ox?1Mh@JRFfEJ^&N1QU@@5vNKe2Ew>u0>Wbr$_ZeOlZJb(%cmB2H!Y z(gyvsp}FX1ygF?}TKi35&m9wk#xaAK(%Z<2=>58IPY-}L8%sWh__fEQM7{rXL;`}9 zpyOc@WAr~q4#GCm>Qo|#myFM}>;h;Eb9G?H%pj~?(|1q8n)JHbr4N2Rr2Ho)-KhCC zy@XmX{9{^aTWPFj4EiIOEj>L_?*AKeskZ+hEQ9Dn)ZyM`>RO-3HrO9+k5Pm*s)mKR zm(9Pb_4Aa8zm>R9PayP{ZQrYY&h;msmRhYpjI|RdnFkM>xnzY|SnaYC`k6a1C-SO) zHF$@NIPSMb>5M{T*UGj1TVJ%8sL|b>%|7gZtI_RMKe3Yj%2I8M+CsHoXb!<{I5N|N zG$(n8zt!b>#;RpC>PHaW`hhz~feS%-TE)p8jD->1`apUlqz_<2*hvA$_0{h)~duEc53Sck>)(PwdV@;*aAHg$ZNzT51lXj@XMh$;KS$P!+PvR`Y^FLjFV2Qb7s~M#Yr%C z$d$7pkw=tlk^PvkVCf6z`t68ylR%_Oz5OcsR%&I2c`eVi(Sf{65sMdgZu?b6x3H@n zfQd1Sqd6sDMmDarBPZ&`sLs86!9z%P_x<4oURyiN(`NqOXF;Ut0bUXlPT_q&X3d)? zcb{3kD|0_!dFCp#_4KHa5QMXI>D-}j@ViS_Tf@(9z4&p{D{KEyH}d=!kN0f9IR3<& z-@N+l!1ViXb<&QB9R9L1@|)Qxtd$l!1)2C7&rd7vB-mmy69Of{9K+KoewC?xH-z<2 z!OZs$;{7}%;q5CQ{x))9^9R9q_I(|@`1|RN8pgGn`Mm$6!~5^w5ZF{Sv$x;4*@y_1 zU;+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.vbproj.user b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.vbproj.user new file mode 100644 index 0000000..18fcf12 --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.vbproj.user @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/AssemblyInfo.vb new file mode 100644 index 0000000..b160da1 --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.dll b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.dll new file mode 100644 index 0000000000000000000000000000000000000000..fc98996ff9671925b04d3ccb87b077df28a7f73e GIT binary patch literal 32864 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 Ob|fzTy1v7Dko{jXU}hHp literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.pdb b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.pdb new file mode 100644 index 0000000000000000000000000000000000000000..1707568f526fbdcf7c9e19044b94aa1df85e0130 GIT binary patch literal 91136 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 z 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 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbp b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbp new file mode 100644 index 0000000..dff22ba --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbp @@ -0,0 +1,39 @@ +Type=OleDll +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINNT\System32\stdole2.tlb#OLE Automation +Class=ComPrinting; ComPrinting.cls +Startup="(None)" +HelpFile="" +Title="ComPrintUtils" +ExeName32="ComPrintUtils.dll" +Command32="" +Name="ComPrintUtils" +HelpContextID="0" +CompatibleMode="2" +CompatibleEXE32="Compatibility\ComPrintUtils.dll" +VersionCompatible32="1" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="Sleek Software Ltd" +CompilationType=0 +OptimizationType=2 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=-1 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=1 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 +ThreadingModel=1 +DebugStartupOption=0 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbw b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbw new file mode 100644 index 0000000..a6718a9 --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbw @@ -0,0 +1 @@ +ComPrinting = 23, 23, 800, 671, Z diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrinting.cls b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrinting.cls new file mode 100644 index 0000000..1321832 --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrinting.cls @@ -0,0 +1,259 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True + Persistable = 0 'NotPersistable + DataBindingBehavior = 0 'vbNone + DataSourceBehavior = 0 'vbNone + MTSTransactionMode = 0 'NotAnMTSObject +END +Attribute VB_Name = "ComPrinting" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = True +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = True +Option Explicit +Option Base 0 + +Private Type PALETTEENTRY + peRed As Byte + peGreen As Byte + peBlue As Byte + peFlags As Byte +End Type + +Private Type LOGPALETTE + palVersion As Integer + palNumEntries As Integer + palPalEntry(255) As PALETTEENTRY ' Enough for 256 colors. +End Type + +Private Type GUID + Data1 As Long + Data2 As Integer + Data3 As Integer + Data4(7) As Byte +End Type + +Private Const RASTERCAPS As Long = 38 +Private Const RC_PALETTE As Long = &H100 +Private Const SIZEPALETTE As Long = 104 + +Private Type RECT + Left As Long + Top As Long + Right As Long + Bottom As Long +End Type + +Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Long) As Long +Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Long, _ + ByVal nWidth As Long, _ + ByVal nHeight As Long) As Long +Private Declare Function GetDeviceCaps Lib "GDI32" (ByVal hDC As Long, ByVal iCapability As Long) As Long +Private Declare Function GetSystemPaletteEntries Lib "GDI32" (ByVal hDC As Long, _ + ByVal wStartIndex As Long, ByVal wNumEntries As Long, _ + lpPaletteEntries As PALETTEENTRY) As Long +Private Declare Function CreatePalette Lib "GDI32" (lpLogPalette As LOGPALETTE) As Long +Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal hObject As Long) As Long +Private Declare Function BitBlt Lib "GDI32" (ByVal hDCDest As Long, ByVal XDest As Long, _ + ByVal YDest As Long, ByVal nWidth As Long, _ + ByVal nHeight As Long, ByVal hDCSrc As Long, _ + ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop As Long) As Long +Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Long) As Long +Private Declare Function GetForegroundWindow Lib "USER32" () As Long +Private Declare Function SelectPalette Lib "GDI32" (ByVal hDC As Long, ByVal hPalette As Long, _ + ByVal bForceBackground As Long) As Long +Private Declare Function RealizePalette Lib "GDI32" (ByVal hDC As Long) As Long +Private Declare Function GetWindowDC Lib "USER32" (ByVal hWnd As Long) As Long +Private Declare Function GetDC Lib "USER32" (ByVal hWnd As Long) As Long +Private Declare Function GetWindowRect Lib "USER32" (ByVal hWnd As Long, lpRect As RECT) As Long +Private Declare Function ReleaseDC Lib "USER32" (ByVal hWnd As Long, ByVal hDC As Long) As Long +Private Declare Function GetDesktopWindow Lib "USER32" () As Long + +Private Type PicBmp + Size As Long + Type As Long + hBmp As Long + hPal As Long + Reserved As Long +End Type + +Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" _ + (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, _ + IPic As IPicture) As Long + +Public Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture +'Creates a bitmap type picture object from a bitmap and palette. +Dim r As Long, Pic As PicBmp, IPic As IPicture, IID_IDispatch As GUID + +'Fill in with IDispatch Interface ID. +With IID_IDispatch + .Data1 = &H20400 + .Data4(0) = &HC0 + .Data4(7) = &H46 +End With + +'Fill Pic with necessary parts. +With Pic + .Size = Len(Pic) ' Length of structure. + .Type = vbPicTypeBitmap ' Type of Picture (bitmap). + .hBmp = hBmp ' Handle to bitmap. + .hPal = hPal ' Handle to palette (may be null). +End With + +'Create picture object. +r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic) + +'Return the new Picture object. +Set CreateBitmapPicture = IPic + +End Function + +Public Function CaptureWindow(ByVal hWndSrc As Long, ByVal Client As Boolean, _ + ByVal LeftSrc As Long, ByVal TopSrc As Long, _ + ByVal WidthSrc As Long, ByVal HeightSrc As Long) As Picture +'Captures any portion of a window. +Dim hDCMemory As Long, hBmp As Long, hBmpPrev As Long, r As Long +Dim hDCSrc As Long, hPal As Long, hPalPrev As Long, RasterCapsScrn As Long +Dim HasPaletteScrn As Long, PaletteSizeScrn As Long, LogPal As LOGPALETTE + +'Depending on the value of Client, get the proper device context. +If Client Then + hDCSrc = GetDC(hWndSrc) 'Get device context for client area. +Else + hDCSrc = GetWindowDC(hWndSrc) 'Get device context for entire window. +End If + +'Create a memory device context for the copy process. +hDCMemory = CreateCompatibleDC(hDCSrc) +'Create a bitmap and place it in the memory DC. +hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc) +hBmpPrev = SelectObject(hDCMemory, hBmp) + +'Get screen properties. +RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS) 'Raster capabilities. +HasPaletteScrn = RasterCapsScrn And RC_PALETTE 'Palette support. +PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE) 'Size of palette. + +'If the screen has a palette make a copy and realize it. +If HasPaletteScrn And (PaletteSizeScrn = 256) Then + 'Create a copy of the system palette. + LogPal.palVersion = &H300 + LogPal.palNumEntries = 256 + r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0)) + hPal = CreatePalette(LogPal) + ' Select the new palette into the memory DC and realize it. + hPalPrev = SelectPalette(hDCMemory, hPal, 0) + r = RealizePalette(hDCMemory) +End If + +'Copy the on-screen image into the memory DC. +r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy) + +'Remove the new copy of the on-screen image. +hBmp = SelectObject(hDCMemory, hBmpPrev) + +'If the screen has a palette get back the palette that was selected in previously. +If HasPaletteScrn And (PaletteSizeScrn = 256) Then + hPal = SelectPalette(hDCMemory, hPalPrev, 0) +End If + +'Release the device context resources back to the system. +r = DeleteDC(hDCMemory) +r = ReleaseDC(hWndSrc, hDCSrc) + +'Call CreateBitmapPicture to create a picture object from the +'bitmap and palette handles. Then return the resulting picture object. +Set CaptureWindow = CreateBitmapPicture(hBmp, hPal) + +End Function + +Public Function CaptureScreen() As Picture +'Captures the entire screen. +Dim hWndScreen As Long + +' Get a handle to the desktop window. +hWndScreen = GetDesktopWindow() + +' Call CaptureWindow to capture the entire desktop give the handle +' and return the resulting Picture object. + +Set CaptureScreen = CaptureWindow(hWndScreen, False, 0, 0, _ + Screen.Width \ Screen.TwipsPerPixelX, _ + Screen.Height \ Screen.TwipsPerPixelY) + +End Function + +Public Function CaptureForm(ByVal WindowHandle As Long) As Picture +'Captures an entire form including title bar and border. +Dim r As Long, RectActive As RECT + +'Get the dimensions of the window. +r = GetWindowRect(WindowHandle, RectActive) + +'Call CaptureWindow to capture the active window given its +'handle and return the Resulting Picture object. +Set CaptureForm = CaptureWindow(WindowHandle, False, 0, 0, _ + RectActive.Right - RectActive.Left, _ + RectActive.Bottom - RectActive.Top) + +End Function + +Public Function CaptureActiveWindow() As Picture +'Captures the currently active window on the screen. +Dim hWndActive As Long, r As Long, RectActive As RECT + +'Get a handle to the active/foreground window. +hWndActive = GetForegroundWindow() + +'Get the dimensions of the window. +r = GetWindowRect(hWndActive, RectActive) + +'Call CaptureWindow to capture the active window given its +'handle and return the Resulting Picture object. +Set CaptureActiveWindow = CaptureWindow(hWndActive, False, 0, 0, _ + RectActive.Right - RectActive.Left, _ + RectActive.Bottom - RectActive.Top) + +End Function + +Public Sub PrintPictureToFitPage(ByRef Pic As Picture) +'Prints a Picture object as big as possible. +Const vbHiMetric As Integer = 8 +Dim PicRatio As Double, PrnWidth As Double, PrnHeight As Double +Dim PrnRatio As Double, PrnPicWidth As Double, PrnPicHeight As Double + +'Determine if picture should be printed in landscape or portrait +'and set the orientation. +If Pic.Height >= Pic.Width Then + Printer.Orientation = vbPRORPortrait 'Taller than wide. +Else + Printer.Orientation = vbPRORLandscape 'Wider than tall. +End If + +'Calculate device independent Width-to-Height ratio for picture. +PicRatio = Pic.Width / Pic.Height + +'Calculate the dimentions of the printable area in HiMetric. +With Printer + + 'Calculate device independent Width to Height ratio for printer. + PrnWidth = .ScaleX(.ScaleWidth, .ScaleMode, vbHiMetric) + PrnHeight = .ScaleY(.ScaleHeight, .ScaleMode, vbHiMetric) + PrnRatio = PrnWidth / PrnHeight + + 'Scale the output to the printable area. + If PicRatio >= PrnRatio Then + PrnPicWidth = .ScaleX(PrnWidth, vbHiMetric, .ScaleMode) + PrnPicHeight = .ScaleY(PrnWidth / PicRatio, vbHiMetric, .ScaleMode) + Else + PrnPicHeight = .ScaleY(PrnHeight, vbHiMetric, .ScaleMode) + PrnPicWidth = .ScaleX(PrnHeight * PicRatio, vbHiMetric, .ScaleMode) + End If + +End With + +'Print the picture using the PaintPicture method. +Printer.PaintPicture Pic, 0, 0, PrnPicWidth, PrnPicHeight + +End Sub diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/Compatibility/ComPrintUtils.dll b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/ComPrinting/Compatibility/ComPrintUtils.dll new file mode 100644 index 0000000000000000000000000000000000000000..82452cc63252427329513538731340524df4c247 GIT binary patch literal 32878 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 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/FormInterop.resx b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/FormInterop.resx new file mode 100644 index 0000000..0a2c16a --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/FormInterop.resx @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + Form1 + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/FormInterop.vb b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/FormInterop.vb new file mode 100644 index 0000000..99f4c07 --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/FormInterop.vb @@ -0,0 +1,67 @@ +Option Strict On + +Public Class Form1 + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents cmdTest As System.Windows.Forms.Button + Private Sub InitializeComponent() + Me.cmdTest = New System.Windows.Forms.Button() + Me.SuspendLayout() + ' + 'cmdTest + ' + Me.cmdTest.Location = New System.Drawing.Point(64, 104) + Me.cmdTest.Name = "cmdTest" + Me.cmdTest.Size = New System.Drawing.Size(152, 80) + Me.cmdTest.TabIndex = 0 + Me.cmdTest.Text = "Test debug of VB .NET app calling VB6 component" + ' + 'Form1 + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(292, 272) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.cmdTest}) + Me.Name = "Form1" + Me.Text = "Interop debugging" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub cmdTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdTest.Click + Dim DebugTest As New ComPrintUtils.ComPrinting() + DebugTest.PrintPictureToFitPage(DebugTest.CaptureForm(Me.Handle.ToInt32)) + System.Runtime.InteropServices.Marshal.ReleaseComObject(DebugTest) + DebugTest = Nothing + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.sln b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.sln new file mode 100644 index 0000000..27f661e --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InteropDebug", "InteropDebug.vbproj", "{BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Debug.ActiveCfg = Debug|.NET + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Debug.Build.0 = Debug|.NET + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Release.ActiveCfg = Release|.NET + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.suo b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.suo new file mode 100644 index 0000000000000000000000000000000000000000..ad580a29263a25bf58eaf2037dc3bf1527d72c3a GIT binary patch literal 8704 zcmeHMU2IfE6h8fvf)oS=5kc1qQjpfR)B-JF+HI@FmY=rRYBn+3-R-ilf7#vg6N-t6 z4~8e63_J-BCPvi6#0SKPMiZkZhQ@?wj2eBC2NN_t=!;#yZ{|+#?sj*3w`?>d%;wy= zGk0drnVECGb7pq>+KQhqzPI)l$w_;pN@miF<*tnS3cQn4x<{lEFD%cb(`j8Pg4a9g zHd=vyAZxX?hc(E#--|$tLA9VIpu0g!LCZmPpk*NLIq6Qiy;opJV)&)RCA|_wo{*E+ zUFT`F)Xduas(HGdy?&wP2g$3UAv4WP}SZJ@_N zY}<&u3G@W0*{W-`@;2m8g4(U}4lC!nn7Q$tiRC*fo&Md;9bR~%ZY*~vP9{^{uxls~ zk0nydWUG6;DKCdzGB!Bi8ulFyL{zb^C*%#sg05bFC>2Yv!Q#=txT`Ogh^T%`+_6YJ z77ax8FmroAA4aLeU_r7Cjw^1`^&d-}6@TLw2Gq z-b!Ns5s+It!~;u?$t3KS*x^ClVW3+as76FjNt>45K(a4|J(t|JKkT8fZI@$QcZDVIM{ zHvk!qs@>ooaUBb%25>fWcgmk})>&&qbNTne2T^;dHQdu^QSQV_?SJUcobsoyH2%-b zjQAe~X+74yD2TQ2LN8s?2U)^uM?COV^o`V~BxnM1x}e4M-jiq@Mrjyzlj2wMyMWgF z5L=8W-Sf#*@Y6{+5lN@{2I}w74^M%>rt)x ztbXj(Dm!a1QzZe|>;@TJ{Q6Sc%9~f;`HA0NKt1CN#KaX*;oXTq=+gK-*X zCxCiE)H41sUv&H2C-A?5Cm7yOImJKTQ%qZ6wjc5E5m+!|okAF&%QLh5&;sWFFa{X6 z261Ed)a9g#p#rew(xl-12jfYe#huPSfBY@-;q;Y1#$K)ep!e;L>%Mb;omj6FsW>7W zbkUdk)ai%upndvb44-@YIi^lOlgg{{^uuyHdKWtV=tT+_8Gq~=J)d9%7f_E;sqxr6 z{pk4JoPPX34Eyw>CMPhZ(}0m&qc9Ddl!#{FsUm`8AM>0~bOItL;Qq5k)qJNQ*(rd9 z8)n}E&*lb95E_`XHWMy($PUyHLNeikaKdsMpyRY!s5SCcbwK;r2KZRx2N(y%p^FrT z>!rN~>)%|0N%6rc}{gUWx0)2DPP zk^?W=xEY=3#QY%0#Fwn4TX_1~Z>>)wcM=1bXkMDxp^d*1iVv0&bV5#MRq8syAg<*#qT?82DsF7)DUcob1& zojTv-m3_+EHVqu*xUwkU6v~g^Ev?(yfJ^4In1pW3AN|uqc41W+NgY%8G67rBF+XDm zJCf}z;E3#%H;&PRc$+wRtB&sTi%(s-vFiDK=bJ9oUi@wMkMMY<`8-=R`z_n&sWmI4 zf5sL~=eW#0J(aS4>NJXTq0_kHM!n{oo?*^^TKPYmA5u&xAFOX9Bf3#aZ6Se + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj.user b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj.user new file mode 100644 index 0000000..c27d4ac --- /dev/null +++ b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/obj/Debug/InteropDebug.Form1.resources b/Source/VisualStudio2002/Chapter11/Vb7UsingVb6Component/obj/Debug/InteropDebug.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..0c0f38286f0b1dc1743c3aa8711631e7f1e604a0 GIT binary patch literal 643 zcmb_Yy-EW?5S|Djf)*BnSb2zza4dJ6F{Zd8B-m&q$g3#$2zItU zfQ3)sGw2(rvv_J@VROTN?99%$GxN>!)7xVU0PYC8$wC_xY>HZ1m81UgrkEC}d{5|H zs*-2=FVj|r3;h0?p!sF{-YF{0Wfg}kU{MqVEbzUdEsa$eS7?n&OW&K=tmOF-E@tuy zt2pcR(r(_}5Bt#`1_ymNQ+tHb#-58W?JpS%cd5z6j0e znhZvCUf*wTqK$`p5(t}w7m~Za0|qXEg9ZjCkb(eodDza$Enr5WCJKWwNQya}6A%== vb{wyLD3u6X;8yoR=5A-JZjZ-JifFsiTmS6MaXQy&X>mS>Wj6z?0jzui`5C`t literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter12/SqlDebug/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter12/SqlDebug/AssemblyInfo.vb new file mode 100644 index 0000000..d837e52 --- /dev/null +++ b/Source/VisualStudio2002/Chapter12/SqlDebug/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.resx b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.resx new file mode 100644 index 0000000..7923464 --- /dev/null +++ b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.resx @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + SqlDebug + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.sln b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.sln new file mode 100644 index 0000000..22ed41b --- /dev/null +++ b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SqlDebug", "SqlDebug.vbproj", "{25E00B17-05B1-4234-AC07-5C21C167C48C}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Debug.ActiveCfg = Debug|.NET + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Debug.Build.0 = Debug|.NET + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Release.ActiveCfg = Release|.NET + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.suo b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.suo new file mode 100644 index 0000000000000000000000000000000000000000..9bd0b95091f8677218f7d03ad8607116ab8cf42c GIT binary patch literal 7680 zcmeHLO>h)N6n>io`4NJsAfn=kAc$lkBq2zYs$`M~nB^w{Ls?s8ZL-6%VY9RDY=|k* z(kf4!JXv@W4^~-LdGO{%w8|<=z2MD@SbFk^M=uh;uX{Q>nVn50OTf~ix86?Ao9=$E zU%&p|>;CEbhTlH^V$1ImDu<<6Zq2Ti`vUv~>LgVj5NSe%@3&@WXEjp<)qCYXWP!h- zYm2{zTp)y<(!KKku)wgm_*KM`0V(2HmKm&a{IUriV=OU; z4RyL-z46U=H`aceXy*4;-RQJr#FGm$BzZh5at8knv@m?H&RB-MU78Xb@IwEj9)`cz zlRnOJ6q0Cxf{fw+4H;3=FG8Df)D|xmW#B0`x<6IN7w>cl~|J^>%?0?E225{-t``>7L)9+!_ zH-a{S9sz9znQxDw{y69f&{oisAPe*qXdCEh5ZmtXpF900c`VQ2eGjM&)CJPq=>G%w z-VHK+qg&nM(gJ_lMES-GePg{{p7AP~f;H@v+;T;2*_QrHCBtFYoJ|c`Bje|tN%gv} zKc6YMIcp%BuefD4SUu{DS%YqQQuSM7yOSli=oIxZ>qhg%tUK*h8?+obof=}lR=bcd zjk%d})*8+ib7ZZ2$tgPJOo8>7B@we-y=LtH0?3v_lEzMUWeWS2*pUYBJkYHKR3oCb z%YN13bzn_DIAds;14rjkv?Irg(#P<*M`^MYcV1berfUs@_)jd<(&Ncz zzD2BL3CkzyJJ8_*Y~W%w7?T%@fxCSC=a_Nl&m8X^f<8)EKCMr`px5T1L2*IpBG35p zmok6GUK4-A@(0zNv+#)OPEv~2`Gfqqd^PU;iFhCQ8!aq9g}F~E-+J z$TxG3E1$W-X@5A{TjN6!t6mV!zo2|i=K~X{kE4aH)`BhPd&D8wpYt&~L~A*p`ygKF zFDy}bqrWWepZmWE(m1Gf&%u{7u%;E5RT}8U+={u52RetjS-=2he^bf=mcptj;1vDO zlB670$d*Q{am4ks>RnOD`QBZUNK7bTCg&hK4NZyg>A822e^(E!9V1C&#fO4qBtvMryea9M;>U6JI;<--du{gU_#BsO`sB8*~618{ZG&|1G%$mz^KhlX4M(x1`*B z0^i3~dO(M-rUwi%;q<^$<7BbTO?nXK=#ejBOwNG1wJXiKQES6{x8k;e+YWFi@1WAM z12xXI7i7!x>O0>1q0%^%n)Hz+hjk6PAwHB>o^!CooAA!1ami@i{j${7PNiU-(V-O z&=bH!Vr4yykCv>tTN{}Fc61#ugLc9f=)r?9L>X=%(!Rf=Q+rBo7X=7HIA=g zzfhKz(1lYP_AAeiDOkFo?941R12rn(l>97p0xe!t=Tng$3?a(#muu@L0UgsS;#B3H zP}xsVDl@!j-E?$j+f~SgmRGkPIlRmxCS@4=ocRTBT^uaCiLOb+wm!Ab2upovLrAUK zooAfogv?|h^Ngzt;a`xxps4H>hg{& zUpIZU@vkZHr2NCN-e<2&y!`3USKl4J_2p+O%rJ8bLp|h6F&88wB>nc z;X?V``OGQe#$V#}F@M-IIJNMuAp=k3-H6f0_^{us?qgd6@i#bsbI)z=zej*u48**H zU{+G^+-Vfz{fDuA-1+Z9XOsWEk^KPAm LPv+Bi3*r6&Zw5Ni literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vb b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vb new file mode 100644 index 0000000..a145ff1 --- /dev/null +++ b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vb @@ -0,0 +1,147 @@ +Option Strict On +Imports System.Data.SqlClient + +Public Class SqlDebug + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents ConnectionQuery As System.Windows.Forms.Button + Friend WithEvents ConnectionDestroy As System.Windows.Forms.Button + Friend WithEvents ConnectionCreate As System.Windows.Forms.Button + Friend WithEvents ValueToInsert As System.Windows.Forms.TextBox + Private Sub InitializeComponent() + Me.ConnectionQuery = New System.Windows.Forms.Button() + Me.ConnectionDestroy = New System.Windows.Forms.Button() + Me.ConnectionCreate = New System.Windows.Forms.Button() + Me.ValueToInsert = New System.Windows.Forms.TextBox() + Me.SuspendLayout() + ' + 'ConnectionQuery + ' + Me.ConnectionQuery.Location = New System.Drawing.Point(16, 96) + Me.ConnectionQuery.Name = "ConnectionQuery" + Me.ConnectionQuery.Size = New System.Drawing.Size(152, 40) + Me.ConnectionQuery.TabIndex = 0 + Me.ConnectionQuery.Text = "Insert new row" + ' + 'ConnectionDestroy + ' + Me.ConnectionDestroy.Location = New System.Drawing.Point(16, 168) + Me.ConnectionDestroy.Name = "ConnectionDestroy" + Me.ConnectionDestroy.Size = New System.Drawing.Size(152, 40) + Me.ConnectionDestroy.TabIndex = 1 + Me.ConnectionDestroy.Text = "Destroy connection" + ' + 'ConnectionCreate + ' + Me.ConnectionCreate.Location = New System.Drawing.Point(16, 24) + Me.ConnectionCreate.Name = "ConnectionCreate" + Me.ConnectionCreate.Size = New System.Drawing.Size(152, 40) + Me.ConnectionCreate.TabIndex = 2 + Me.ConnectionCreate.Text = "Create connection" + ' + 'ValueToInsert + ' + Me.ValueToInsert.Location = New System.Drawing.Point(184, 104) + Me.ValueToInsert.Name = "ValueToInsert" + Me.ValueToInsert.Size = New System.Drawing.Size(80, 22) + Me.ValueToInsert.TabIndex = 3 + Me.ValueToInsert.Text = "" + ' + 'SqlDebug + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(292, 272) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.ValueToInsert, Me.ConnectionCreate, Me.ConnectionDestroy, Me.ConnectionQuery}) + Me.Name = "SqlDebug" + Me.Text = "SQL Debugging" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private m_DatabaseConnection As SqlConnection + + Private Sub ConnectionCreation(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectionCreate.Click + Dim ConnectionString As String, ConnectStatus As String + + 'Setup database connection + ConnectionString = "Initial Catalog = pubs;" + ConnectionString += "Data Source = CHEETAH;" + ConnectionString += "Integrated Security = SSPI;" + ConnectionString += "Pooling = 'false'" + + 'Attempt database connection + Try + m_DatabaseConnection = New SqlConnection(ConnectionString) + ConnectStatus = "Connected" + Catch objException As Exception + ConnectStatus = "Not connected: " & objException.ToString + m_DatabaseConnection.Close() + m_DatabaseConnection.Dispose() + Finally + Me.Text = ConnectStatus + End Try + + End Sub + + Private Sub ConnectionTest(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectionQuery.Click + Dim QuerySql As String, QueryResult As New DataSet() + Dim QueryTest As New SqlDataAdapter() + + 'Check that we have a valid number + If Len(Trim$(Me.ValueToInsert.Text)) = 0 Then + MsgBox("You should enter a number before adding new row", MsgBoxStyle.Information Or MsgBoxStyle.OKOnly, "Ooops") + Me.ValueToInsert.Focus() + Exit Sub + End If + + 'Setup and perform database query + QuerySql = "EXEC sp_DebugExample " & Me.ValueToInsert.Text + Try + QueryTest.SelectCommand = New SqlCommand(QuerySql, m_DatabaseConnection) + QueryTest.Fill(QueryResult) + Catch objException As Exception + MsgBox(objException.ToString) + Finally + QueryTest.Dispose() + End Try + End Sub + + Private Sub ConnectionDestruction(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectionDestroy.Click + + m_DatabaseConnection.Close() + m_DatabaseConnection.Dispose() + Me.Text = "Not connected" + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vbproj b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vbproj new file mode 100644 index 0000000..1e9482f --- /dev/null +++ b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vbproj @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vbproj.user b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vbproj.user new file mode 100644 index 0000000..7ef2f9d --- /dev/null +++ b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.zip b/Source/VisualStudio2002/Chapter12/SqlDebug/SqlDebug.zip new file mode 100644 index 0000000000000000000000000000000000000000..32072d05a8aebf5d8dfdd07e2a7cac874f9d45a9 GIT binary patch literal 8273 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 0 +BEGIN + INSERT DebugError + (RowsInserted, ErrorNumber, ProblemValue) + VALUES (@rowcount, @error, @Keycolumn) +END +GO + diff --git a/Source/VisualStudio2002/Chapter12/SqlScripts/Original sp_DebugExample.sql b/Source/VisualStudio2002/Chapter12/SqlScripts/Original sp_DebugExample.sql new file mode 100644 index 0000000..1470a43 --- /dev/null +++ b/Source/VisualStudio2002/Chapter12/SqlScripts/Original sp_DebugExample.sql @@ -0,0 +1,17 @@ +USE PUBS +GO + +/* Create original example stored procedure */ +CREATE PROCEDURE sp_DebugExample + @KeyColumn int +AS + +INSERT DebugTest VALUES(@KeyColumn) + +IF @@error <> 0 +BEGIN + INSERT DebugError + (RowsInserted, ErrorNumber, ProblemValue) + VALUES (@@rowcount, @@error, @Keycolumn) +END +GO diff --git a/Source/VisualStudio2002/Chapter12/SqlScripts/tb_DebugTest.sql b/Source/VisualStudio2002/Chapter12/SqlScripts/tb_DebugTest.sql new file mode 100644 index 0000000..940a9c3 --- /dev/null +++ b/Source/VisualStudio2002/Chapter12/SqlScripts/tb_DebugTest.sql @@ -0,0 +1,20 @@ +USE pubs +GO + +/* Build the first table */ +CREATE TABLE DebugTest +( +Id int NOT NULL IDENTITY (1,1), +KeyPrimary int NOT NULL PRIMARY KEY CHECK (KeyPrimary > 0) +) +GO + +/* Build the second table */ +CREATE TABLE DebugError +( +Id int NOT NULL IDENTITY (1,1), +RowsInserted int NOT NULL, +ErrorNumber int NOT NULL, +ProblemValue int NOT NULL +) +GO diff --git a/Source/VisualStudio2002/Chapter13/CustomException/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter13/CustomException/AssemblyInfo.vb new file mode 100644 index 0000000..04c890e --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/CustomException/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter13/CustomException/CustomException.sln b/Source/VisualStudio2002/Chapter13/CustomException/CustomException.sln new file mode 100644 index 0000000..8af6a60 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/CustomException/CustomException.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomException", "CustomException.vbproj", "{97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Debug.ActiveCfg = Debug|.NET + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Debug.Build.0 = Debug|.NET + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Release.ActiveCfg = Release|.NET + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter13/CustomException/CustomException.suo b/Source/VisualStudio2002/Chapter13/CustomException/CustomException.suo new file mode 100644 index 0000000000000000000000000000000000000000..176f867e1ab9a892a1b219539680d7744b7cd1ef GIT binary patch literal 7680 zcmeHMO>7%Q6n;)pnuH{!EiI+cvV@eTp$YjzlmsF<>y#GaHspsy$QQ?U9H+L|*v=nq z5l9>mCr&7wN)Jegp942Qq8vEzBcb+!xF7^4j)fCkNcg_l-S{`o+O?>tGSSY5+BX8bNo1nnB!a(oVTEEHEwx{?ek!h{W+u$|`o*c{vD=u`NL# zDOp+?Iuk8lyK2Go8XXH|Qv8yV3ob+Ci2?Tc=avxzTC9GAfK9&rsNV}Z z06GY|4|Ed5c@E?K0O&!`5ztZ4Lm&Bg{N41H-d?=`VK z)Cg-M!AROjlA&QbG^?F9k})-|Q8!`6O8TR$J1j1Td|R<`Jmu*!AU>RALl$vvi5)(iY+~9X5H5BYmoEQ6ZrrF<|nFnu{D98ApF^xmEo$_~U^NDM$%J3bk>D zgv1}>h3$R0+7B|xwd{2e~Cxs$R}PBt61{o6Lmw- z;R1HWfHfEsOU0me$mbrEBcJhNg~CztLt7xcTzEuzn1dXC5+b>0$_@VDWMi@)^4rmz>IHte&){qrJ`3 z7gy($>yIkmGvo0B>H%=*>hzH_*CPfj`%^ZHHEqe)Ui8ujSv;6G0RN9!GiR@P41GM2 z_Sr9HgKo%g!aT%br}FoK_ZtTNtU?>cK_-rwYY$@={LoC3j8%NdRhSzwS4n~9pq-Y3 zbXpG9X^7V6fMb&i4+HWf-W;7)NcP5mB$1dB#Y*NN+Xuag(7w%Yk=v_>sa-y@XKl_l z)x51#+_%!Ujkv0I6AM*2B;VJCYT?Ek8|^jX8hzV7A@b$#?=OFg@0ohDZOC;|o`NF{ zBV6imOQ{4FO#&PPzmm59Zs%-?Ey{PpexU%*H`gD*R<4&P=SuWvOD&Tg>5&~30 zIs5{+11iwd^)rE<;VM6j^HB3b!!RBy62{rffENXaABjOBk16>QWL|{kI#$#J{dKII zYvY@(ooMaBy4iM0t*H++CKzszj#aat-~Fgxwrt&A_o`{@Qus4vspx@%X;87!1^i(K zsld-6{v858F^h#6QxvAMG0w!>wuic<}Lu! zh;>_Ge7?-=@1qsOzeg~^m=*tYte!XEl)}&uB3*e};QlL&C%lU}#sBR5YZu1fy!Od2 zB*qZC{P0o#KDIHrVZ7cCvhVkHA9*R;i=B$9ePWjDhb5WoCafFn0yv&gFK)%M9GztqaWZnxtBg8ZDkFYz-OT7t-g*GF0`|jsqx|pU`JQfCf9db|JP6 zqt(ovhrtufvHR0i*Cdmimy^Q0rRChj&)04? zdEYv=_EpW51Ai}aVDh`?+$Yu+p8w#d_g)`g|Lj9`OX)y|dACLTf@T(MyhJ3K+|wmghGyS>83+q+zm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/CustomException/CustomException.vbproj.user b/Source/VisualStudio2002/Chapter13/CustomException/CustomException.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/CustomException/CustomException.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/CustomException/Test.vb b/Source/VisualStudio2002/Chapter13/CustomException/Test.vb new file mode 100644 index 0000000..4f60c1d --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/CustomException/Test.vb @@ -0,0 +1,40 @@ +Option Strict On + +Module Test + + Sub Main() + + Try + UserDetailsLoad("MarkPearce") + Catch Exc As UserLoadException + Console.WriteLine(Exc.Message) + Finally + Console.ReadLine() + End Try + + End Sub + + Function UserDetailsLoad(ByVal UserId As String) As Collection + Dim HelpfulMessage As String + Dim FileStream As System.IO.StreamReader + + 'First try to open the specified file + Try + FileStream = New System.IO.StreamReader(UserId & ".data") + + Catch Exc As System.IO.FileNotFoundException + 'The specified file didn't exist, but this exception won't mean + 'much to a caller who doesn't know how this method is implemented + UserDetailsLoad = Nothing + HelpfulMessage = "User details for '" & UserId & "' cannot be located" + Throw New UserLoadException(HelpfulMessage, Exc, UserId) + + Finally + + End Try + + 'Code goes here to load and return user details + + End Function + +End Module diff --git a/Source/VisualStudio2002/Chapter13/CustomException/UserLoadException.vb b/Source/VisualStudio2002/Chapter13/CustomException/UserLoadException.vb new file mode 100644 index 0000000..c7ab814 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/CustomException/UserLoadException.vb @@ -0,0 +1,56 @@ +Option Strict On +Imports System.Runtime.Serialization + + _ +Public Class UserLoadException : Inherits System.ApplicationException + + Private m_UserId As String = "" + + Public Sub New() + MyBase.New() + End Sub + + Public Sub New(ByVal message As String) + MyBase.New(message) + End Sub + + Public Sub New(ByVal message As String, ByVal UserId As String) + MyBase.New(message) + m_UserId = UserId + End Sub + + Public Sub New(ByVal message As String, ByVal innerException As Exception) + MyBase.New(message, innerException) + End Sub + + Public Sub New(ByVal message As String, ByVal innerException As Exception, ByVal UserId As String) + MyBase.New(message, innerException) + m_UserId = UserId + End Sub + + 'To re-materialize exception and custom property at the receiving end + Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext) + MyBase.New(info, context) + m_UserId = info.GetString("UserId") + End Sub + + 'To de-materialize custom property at the sending end + Public Overrides Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As StreamingContext) + MyBase.GetObjectData(info, context) + info.AddValue("UserId", m_UserId) + End Sub + + 'To add custom property to standard exception message + Public Overrides ReadOnly Property Message() As String + Get + Return MyBase.Message & Environment.NewLine & "User id: " & m_UserId & Environment.NewLine + End Get + End Property + + ReadOnly Property UserId() As String + Get + UserId = m_UserId + End Get + End Property + +End Class diff --git a/Source/VisualStudio2002/Chapter13/HidingDetail/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter13/HidingDetail/AssemblyInfo.vb new file mode 100644 index 0000000..1a0cfa0 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/HidingDetail/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.sln b/Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.sln new file mode 100644 index 0000000..1179386 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HidingDetail", "HidingDetail.vbproj", "{FA9CA985-D2C2-466D-8503-B447C738F116}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {FA9CA985-D2C2-466D-8503-B447C738F116}.Debug.ActiveCfg = Debug|.NET + {FA9CA985-D2C2-466D-8503-B447C738F116}.Debug.Build.0 = Debug|.NET + {FA9CA985-D2C2-466D-8503-B447C738F116}.Release.ActiveCfg = Release|.NET + {FA9CA985-D2C2-466D-8503-B447C738F116}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.suo b/Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.suo new file mode 100644 index 0000000000000000000000000000000000000000..56bc9b30516ddf89d905046033ea95754e691425 GIT binary patch literal 7168 zcmeHMPfQ$T6n_iU7A(|OTWhs-#Gpf z?|t9#_)SV29@?1Sd&C+buyrzdUrxJtbStV+wRn-+Tlz#WzQBofvS^3@qRv67qv3EF*}h@83UPYnnPQkHM3?u zVX+;OA|d61#Q6L;I4WH-ij!>1G|nxtV-zQwm^KZBvv8+~Rth7wv`91lS|AaX3Ea)$ z9x?Bz9K+a2$WSgTX`q6MdkOR`+$l%5Yrls-)K!3{G&Iwia7ak}AztXnEN5fs7|*gE zqt-F3Od5aGIt*`%SicEnjg|_&5`T$D#4y?rEa}}LUJ|QFrTU4wCTuv5U9r_J6tOD7 z)Cm3DgSGh28cT&fuBH0>kb@XKj0wg{c17*PN+Zk6v+`ui>ABXQ#@SAnWuxpDg%!1|VN$6+pVqOZXpY_6!I~~{CIel5|x+V1A zQnBac<4LrWkcg_ipd_m#&zi1v_|IB_F-VGG-X!9G%AMKo^I6>EiCifXn%(^;4u|!B z7i0%ZfP-t81v@zA_@2ftBw(50Ta{7NDy)rIs}#WFu+CV9bjC8QGo(pQqqZDUc$kz9 zT={fS;n}NqNFy=Df+yq9Jqo*t(4$Lzk$=|?$GYmEsxnUW#X;Dox-M zI3PNKr*N#j1Wx$iOO7-1CCqtIS=|g<+LUe0u$4B_mm|u?7(AdSofx4fEFF5lQFu-t z*l$JqGFI_u%dytBcCx#ut6x^aAN?*CgNt;c95n%d^ml@=__G%i>HNcr$-;tajB{{y z97~v1%S_Eq9xSI_1o*Gszo?s3UTXR11L(fw9*{HG;z?i{u`USXmp{F{cVHd*AH@_; zxcD1|_k05`C=4}`>DFci-hb6M8@`K$_1|BAZNV43o7X=2iC)$7$EEK+Xx*j9^;o$p zb6FfaWvP8)m77rLK8=H;GpNWjDo2ZSBUA-Jzj4R62}f;KWgJiM8C5;`wKC(Ex6R4! zl-;J@J2%p{ZaKc;-VOjlSf4OvOaO?^u1&~oy%=?B=U&L9pxaybr#IXZuW}1-1*?=E z04dM(4D64>YQDK~^_dC0IlIvdL#$isP7nTg?dJCQ>kac?RJ^nM&uKoG|K_=#L-Ui* zzxTttuM8}F@_vN#9|k+;i!jc0>_M#L&|*#FVNELl7~i%H{KO$hQ*~iDjPNGnJ0EI9 z=2SH$FJlhRdJI$5t;IY?oF_9&B_E5)IesGvdh^4Hx$)WWBd^te+V^4C_sRJ`F6_TT z_z3TfbL#NOEu_z=W0(bJ`ToPVKb~YJtd)u1--tV0g|PV32-%`L?KxDP)S5uNnqX~@ zb1uC)JIIRqb=2Q}{2PL1|M$m1By_F;&k?iIY8DWG>9?jJJN@I_H=Y0d + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.vbproj.user b/Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/HidingDetail/HidingDetail.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/HidingDetail/Test.vb b/Source/VisualStudio2002/Chapter13/HidingDetail/Test.vb new file mode 100644 index 0000000..f1c2274 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/HidingDetail/Test.vb @@ -0,0 +1,40 @@ +Option Strict On + +Module Test + + Sub Main() + + Try + UserDetailsLoad("MarkPearce") + Catch Exc As Exception + Console.WriteLine(Exc.Message) + Finally + Console.ReadLine() + End Try + + End Sub + + Function UserDetailsLoad(ByVal UserId As String) As Collection + Dim HelpfulMessage As String + Dim FileStream As System.IO.StreamReader + + 'First try to open the specified file + Try + FileStream = New System.IO.StreamReader(UserId & ".data") + + Catch Exc As System.IO.FileNotFoundException + 'The specified file didn't exist, but this exception won't mean + 'much to a caller who doesn't know how this method is implemented + UserDetailsLoad = Nothing + HelpfulMessage = "User details for '" & UserId & "' cannot be located" + Throw New System.ArgumentException(HelpfulMessage, Exc) + + Finally + + End Try + + 'Code goes here to load and return user details + + End Function + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter13/MoveFileWrapper/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter13/MoveFileWrapper/AssemblyInfo.vb new file mode 100644 index 0000000..95fb311 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/MoveFileWrapper/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter13/MoveFileWrapper/ExceptionWrapper.vb b/Source/VisualStudio2002/Chapter13/MoveFileWrapper/ExceptionWrapper.vb new file mode 100644 index 0000000..3b8ddbb --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/MoveFileWrapper/ExceptionWrapper.vb @@ -0,0 +1,89 @@ +Option Strict On +Imports System.IO + +Module ExceptionWrapper + + Sub Main() + Dim WrapperNo As Boolean = False, WrapperYes As Boolean = True + + 'MOVE commands producing good exception information + TestMove("C:\Demo\Source.txt", "C:\Demo\Destination.txt", WrapperNo, "Destination is read-only") + TestMove("C:\Demo\Source.txt", "", WrapperNo, "Destination is empty") + TestMove("C:\Demo\Source.txt", Nothing, WrapperNo, "Destination is nothing") + TestMove("C:\Demo\Source.txt", "C:\Dem\Destination.txt", WrapperNo, "Wrong destination folder") + TestMove("C:\Demo\SourceX.txt", "C:\Demo\Destination.txt", WrapperNo, "Source doesn't exist") + + 'MOVE commands producing bad exception information + TestMove("C:\Demo\Source.txt", "C:\Demo\*.txt", WrapperNo, "Wildcard in destination") + TestMove("C:\Demo\Sou7%Q6n^=mX-U%`XeouZOKG94sFj33o3>O+)(I5iwj?QuP%e(Wb)4E>W4ld5 z+XE5@#EBCMC+MLP;^)8(Dp8QQ01|31hzmk+;#fGrg_!S~-SKW5d$W!r5GWHp&+N?G zd2eRk``(+)o!eV}zW&M1U!lonYiua|p#{Y_|-RM{-jj0T?<%H^`tDT3x&`48>D zU(mJHJ;OHCJnwa&^`Lgp22cm+UJ%cjv{wE2 z&^FL^&;uYn$4;~#0zC}c1=1q33v5(q{^?<{aX^iGE zM$GG$C(#!J$0a-ufj5JC93$j$kYUnQ#F^EoCZzV8iF~n>h{zUOs5i(PV z1JouQ5)yxi7uqsi^#UvUvSy&vDeO!Nf0R0owU(g$w9-a%)vt-a#3N!Db*RtjjSw%1 zRV>x=iMkeaxPbk(u^WtuK{4n6w_7&omb(omlC_AI7t= z>u0Rg@sB#N5dU)^$Bvy?lv0+LgIuAXKMV4+XvUNiuavHhCnDU2& z96`;uOQ=O&|A!>frZSR+wh72BLOyH#{BP^wXs10JTLNF8&xhH0a?|#!OW3|@`{POH zfKz@XtDf8c4Ew9tepvgX?Y&K>L8+D>gY9QwSIk4lU0rNp7F4@D0r|9D<|Sd}GhZBY zr=!0)=$pfiXMC3K_<+VzQ~4q}7bC(k_#bnlM*N?-A~A?1ig^>jzpOj6f6ZqxMnn!m zf-cBsUe<{Gt>7=Z`(MjWs8=JU)*NB`h=r=`kZ)V97Nis9@_}Y)8h%UfkbM5@joGj9 zJkjp-ooKoO80o`bKY*oMo~#=U%k0VW+!$NWAC~cI-A} z5O;5V{1fx`h;tI^_qz{!x3VAF>lDU7%S&PmXHRI$F>FOfSt+xeIHo3BzLJfIJfnP6 zf}L7WwQtPukPQC$bS&;z3c+i894V0ESM3u9>&*}?DXzlf&54DYKM!z zCRWe0EUFxeFwvM6`2K+}Fe1E*a}OM?f`9$__ex3oy0dT&>222`MtcY9whiSX@agX`ApI?HtoGlL!A z{g=0YMsnu6!G+&ni97Uyu=sNTysx^`p2L1pDtFTYX?^q_1WV_)!^ZC)e*Dwlnf3SQ qQAAJf0lz^oD%HDpXuXKPT(>T|Kd7c#>-ZPM7j{g`W*zn&&G$Dwrb6Zb literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj b/Source/VisualStudio2002/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj new file mode 100644 index 0000000..cc71257 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj.user b/Source/VisualStudio2002/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj.user new file mode 100644 index 0000000..c168d10 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/AssemblyInfo.vb new file mode 100644 index 0000000..257341e --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln b/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln new file mode 100644 index 0000000..1d226b2 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RealisticUnhandledExcFilter", "RealisticUnhandledExcFilter.vbproj", "{BB7379C0-225C-4404-8EF1-70A4A099FE5D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.ActiveCfg = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.Build.0 = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.ActiveCfg = Release|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.suo b/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.suo new file mode 100644 index 0000000000000000000000000000000000000000..3599c12483f75039b8eb61be9088656c15c8a01d GIT binary patch literal 7168 zcmeHLO>9(E6h2dmv=xdVAfnGXA&GMzV>d8IVK z!o-y;f{DS6KMND0ap8uz5f`{nqk*__V~nm`n1~A(ZfyO&d*AJwzRpZ%N{P{MCTHGz z_nmvsx%Zy)opaxYk)M*1X!t1HLxZ^H`HUesb0|F=p*2vDSamb+3> zFz|xDO*$+mWIz%U$IpiDjHIy+v|vE}pG8Xwca>--^fP9RM^ut4Z7;>k!|AS=W8 zKUbqxe>4mFse6rQga4-T9WnbI?=@{9j&n~;d~-e#FxQAU5C${;xn--st>D#Qt~>jz z^{%{MkNXYahrk=b4}*7u`R-9%9|La&KMuCQPk^_8p9F6OQ*Jx1Pl0!VcYvP;v%MUn z`5xWD3j7h{4lkY<^Q&WpsiK?ATK#t3DYzd)lTY+CVxowEzcEbnWiP>phx#Mu80a7^~g5Te(S319~iV+hDXOq&40W%0(v-3VG7 z>5wRX9gv90X}rzj9TBHp_MojF_w1qZkmz$9h(x&@`e*TW1Xz6z?Y)qpe#UOEvcZvY z{2WMHKvecfEB$HovM}-lT3qxRSI->9$G>B+z=18a#6=e9QO}be9%J~jMEoOu7#A!n z6li1|n}Fzia>N6jZ;wTro(#?wOB&oO|13Xix3w84y9?aF#*ohJ~~&slT*&tN4S ztQ6O)njLMJKlh-X`LoWtR6)PqSzGx8eI-{_yU2DA|B2PL&Y$(&pPqhtD*bQ1u5Z75 zH~xLJv|v$PEl(!`t)l#B-?Bhn2Wd1P4nXHu;yeL9P0L)^a{ zSjUm}#WeOJi5`~nbb5Xf@sU9Pl=96Y`j5gIYfhwDb7IXxCOd+78C3C@lD)XHw~K3O zPm0HiHHf)Spnk z`aFs-Lyepf?=jO`~rPzLqWVH0=>%uqOqHn2JS8&P9a% zh(Fdw^~C>!kf+Tg#zYGEM?~hxrE@-pcdSUuMW^m9$RiCQ#$Y}AiG6Q*>rX$_-pP1a z91;J6bSG`WvF_$Gu~^YY`KHlc2G^XKX={*B-zBp{^7*eHPJV^wQ%$<<)zEn)#~wh* z9`HW6MieD-2Y%1sJ}jO1MZsa|0`T-At%o5O1qgP6qv){@t%o2Tmy2?t&V--!+%+O+ zkvQ`T2*)r=N);f4M85!G8V!~gI=z*a7c2_qmKU}vFGk^dMjJuP#aIN+324>YFF@~k z%$qCFu4d19hVi^twT98!j#;v;3%?jvEQ}|vMHEl_qL&L@Fusm;R(`CEr^JE>&8>}C{g+y0!9IGGK2=+@ z$xve|r7NX2f31<9n2$P + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.vbproj.user b/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.vbproj.user new file mode 100644 index 0000000..447fdc6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/Startup.vb b/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/Startup.vb new file mode 100644 index 0000000..990f64b --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/RealisticUnhandledExcFilter/Startup.vb @@ -0,0 +1,70 @@ +Option Strict On +Imports System +Imports Microsoft.Win32 + +Module Startup + + Sub Main() + + 'Before running this program within the IDE, please use the Debug...Exceptions menu + 'item to ensure that the program continues in the face of an unhandled exception. + + 'Register the unhandled exception filter with the AppDomain. + 'This means that UnhandledExceptionFilter will be called whenever + 'a managed unhandled exception occurs. + AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionFilter + + 'Here's where the normal application code should appear. + 'In this case, deliberately create an exception so that + 'we can test the unhandled exception filter. + Dim objTest As Object + objTest.ToString() + + End Sub + + Private Sub UnhandledExceptionFilter(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) + 'This method will be called by any unhandled managed exception + Dim MessageFriendly As String, MessageDetail As String + + 'Log detailed exception message if no debugger is attached to this process + If Debugger.IsAttached = False Then + MessageDetail = "An unhandled exception occurred!" + Environment.NewLine + MessageDetail += e.ExceptionObject.ToString + Environment.NewLine + MessageDetail += "Application user was '" + Environment.UserName + "'." + Environment.NewLine + If e.IsTerminating = True Then + MessageDetail += "CLR will terminate this process (exception was on main thread)." + Else + MessageDetail += "CLR won't terminate this process (exception wasn't on main thread)." + End If + 'Write message to the Windows event Application log + Dim LogWriter As New EventLog("Application", ".", System.AppDomain.CurrentDomain.FriendlyName) + LogWriter.WriteEntry(MessageDetail, EventLogEntryType.Warning) + LogWriter.Close() + LogWriter.Dispose() + End If + +#If Debug = True Then + 'Launch the debugger if DEBUG build, no debugger already attached + 'and this is an interactive process (user is present) + If (Environment.UserInteractive = True) And (Debugger.IsAttached = False) Then + Debugger.Launch() + End If +#Else + 'If RELEASE build and this is an interactive process (user is present), + 'then show user either a warning or a critical message + If Environment.UserInteractive = True Then + MessageFriendly = "Unfortunately, this application hit an problem." + Environment.NewLine + If e.IsTerminating = True Then + MessageFriendly += "It will close now, but you can restart it." + Environment.NewLine + MessageFriendly += "Please contact application support and ask them to look in the event log." + MsgBox(MessageFriendly, MsgBoxStyle.Critical Or MsgBoxStyle.OKOnly, "Sorry for the inconvenience") + Else + MessageFriendly += "Please save your work asap before restarting the application." + MsgBox(MessageFriendly, MsgBoxStyle.Exclamation Or MsgBoxStyle.OKOnly, "Sorry for the inconvenience") + End If + End If +#End If + + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/AssemblyInfo.vb new file mode 100644 index 0000000..257341e --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/Startup.vb b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/Startup.vb new file mode 100644 index 0000000..491f61e --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/Startup.vb @@ -0,0 +1,86 @@ +Option Strict On +Imports System +Imports Microsoft.Win32 + +Module Startup + + Sub Main() + + 'Before running this program within the IDE, please use the Debug...Exceptions menu + 'item to ensure that the program continues in the face of an unhandled exception. + + 'Register the unhandled exception filter with the AppDomain. + 'This means that UnhandledExceptionFilter will be called whenever + 'a managed unhandled exception occurs. + AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionFilter + + 'Here's where the normal application code should appear. + 'In this case, deliberately create an exception so that + 'we can test the unhandled exception filter. + Dim objTest As Object + objTest.ToString() + + End Sub + + Sub UnhandledExceptionFilter(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) + 'This method will be called by any unhandled managed exception + 'Using DEBUG or RELEASE config + Dim JitDebugSetting As Object, RegKey As RegistryKey = Registry.LocalMachine + RegKey = RegKey.OpenSubKey("Software\Microsoft\.NetFramework") + JitDebugSetting = RegKey.GetValue("DbgJitDebugLaunchSetting") + RegKey.Close() + +#If Debug Then + Console.WriteLine("DEBUG configuration") + +#Else + Console.WriteLine("RELEASE configuration") +#End If + 'Who is user? + Console.WriteLine("User: " + Environment.UserName) + 'Is debugger attached? + Console.WriteLine("Debugger attached? " + Debugger.IsAttached.ToString) + 'Is there an end-user to show a message to? + Console.WriteLine("End-user present? " + Environment.UserInteractive.ToString) + 'Is this a CLS-compliant exception? + Console.WriteLine("CLS-compliant exception? " + ((TypeOf e.ExceptionObject Is Exception).ToString)) + 'What's the CLR going to do with the process? + If e.IsTerminating = True Then + Console.WriteLine("CLR will terminate this process") + Else + Console.WriteLine("CLR won't terminate this process") + End If + 'What's the CLR going to do about debugging? + If Debugger.IsAttached = True Then + Console.WriteLine("CLR didn't talk to user or spawn a debugger") + Else + 'If process is terminating, debugger checks registry for action. + 'Otherwise, CLR will deal with only the offending thread. + If e.IsTerminating = True Then + If JitDebugSetting Is Nothing Then + Console.WriteLine("No JIT debug setting in registry") + Else + Console.WriteLine("JIT debug setting: " + JitDebugSetting.ToString) + Select Case JitDebugSetting + Case 0 + Console.WriteLine("CLR asked user whether to spawn a debugger") + Case 1 + Console.WriteLine("CLR didn't talk to user or spawn a debugger") + Case 2 + Console.WriteLine("CLR spawned debugger and asked user about debugging") + Case Else + Console.WriteLine("JIT debug setting is invalid!") + End Select + End If + Else + Console.WriteLine("CLR didn't talk to user or spawn a debugger") + End If + End If + 'Write exception to console + Console.WriteLine(Environment.NewLine + "Exception text:") + Console.WriteLine(e.ExceptionObject.ToString) + Console.ReadLine() + + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln new file mode 100644 index 0000000..eb2eb9a --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "UnhandledExcFilter", "UnhandledExcFilter.vbproj", "{BB7379C0-225C-4404-8EF1-70A4A099FE5D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.ActiveCfg = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.Build.0 = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.ActiveCfg = Release|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.suo b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.suo new file mode 100644 index 0000000000000000000000000000000000000000..c2349dafc725f5c12f401558eae40f23f16f79b1 GIT binary patch literal 7168 zcmeHMO>7%Q6n@T6n}jB%g_cmDETt{!k1gkq<_9Vgr=cxLTavWNAwqKOjpNkuTDH?P zv_(a5;)FP$a^dHIgg_j6L0l+@asUKs#Q`n|!HEMB<;aDE@0;0;H;(PBLjZv?tLNF7 zeLL^X%zNK^v%Y<6+mG*D-}RH^m7`KA3yZa~$<^<}JxP_jMJjN^_QK-gqV5#I?MC?z zt-v49waVVZYSi5C&7fLP4X6&Z1#}mP`%Ky>|DP2Y5(`&W3^^uA)M=T=PJ1sqrFzNd zX)C45?d#9`QVlnKm0-F`gF+dRuw>-C3`iVxR?gzrgceSJMza->q?Z`ean7vebg#PM&=hxc3~;(#B-?II4;gBn1T$8{&)cDv^N z4&3hq-3Mv}-48kp;4%mI{cN3Z$WgS-F zw-9%D?S($SHI$yuWWxz#$V^%3ta90^zHm0oVe7^Q2aMs!lsTiC^?mVh!ipKkqVcSi zCPVG0Ibrl$=^6E2UC5eASxGaghp8WpC!^L}CdW{9d}MHd?=^%H@zjJBPDhQQcrwPW z%}<+2GaXLw-ed83d@V@ZnyakYRW zBvW{r!ZRXHv$Ue`EbxcDNpL679|baB#EAWPH(_&*+v*r9|Dx~qD;+GE!DZoH1Bl8o zVoH7t;}|l8dt!VXJZy8^9R8hw1{QRoCRs#*Ue%tn@z@r)q9XngKO9qB!BC)se(ZD; zbtj-#3>PJjLhCGMJB8M2*v~PDf5fA5`UMI{$(OJ9+Eg|{TS=CbF0vo;DVtc$S`E6&5A(ZkZ5~=G?Qf;5uReRT@0(!D zQ?H%-wegppj}8%)Pr{BPSfRLjM_W+g5g04-N8mmU!?GCXP1vBj(1w#B?MK=cV~`XE zpJCfREn*z8nh}|{ngLB>EMu9c8OwalkbsnM^|V zIP@k$j4!qSO+E7Mk0?XraU&TPsc3=yE!n;3@tNd-?9kGX_ziISM!qyTlOVc(u4Sgcu2q|AA=W;~og8wl$qHGp>*pk&f zcuJjF`Y>(;_(w$M$nH6xQ8pe&?@I5~Zwul`g^#|brF)Z4?0d;xf7+q8PA8@~BYUrj z|M}&w^yQEBceaVesx-=%Rc0kjb8)e$LVN?SIy)qv{QU0R=V*`B=)U8=O9+m=fRa{F zCrl%V6uAXgJMR6`hARm2O9z0bA7R}OzM%A=uLpG}u6{ge$L3#=%LvO1I0WvG5>W{VAu*SLFpTD>7fb<`rx&J5FD4;5mtIhlu!6~1$k4JbL&_!0 zlJjj=bLFi3Xdh9%e)KkDPVDQz6~g-X(c;X5XmzURY`5Y53RbWHQA$2p7lL2v3_s04sNJVBI$KfA#1oWB`o64*Zn z<226F7@4^;{yR?!N$1&8=Rf7he*i;0X9Lt}IMFmLh`B~Fj4v!%_wHUp{M(0DZ`y-~ zFnfLh$*3I0ge{e)1;2mL2g;ehJO3^ZtO5$Gcq*aJCIG?7t^&wydev?bbb2wXD74D? z-4kf7uixb|2k%-i^XO6WJP!CYvDTB=dF_47iV4NJ*>#tI?SP%R(2N>R4S#>*&X&Pf z_Fen5;;kLOtI(SM;$+W(YtzrX_ubns4lR8AzWVCb1ny$so}Y*N2nWTO-G@PZoawN2 zFF%YtYw-M9D0uM8mvee$I9PdlU3+-R{f{tqi+ds%U;8>UKW4`BV!(oy=SIx_-C7yY zk6)W8t@wgqf)VRhocbYzl6PB=YJ3{JMoX-UoyxIxaLHpwE8OJ-U&xi N;hOS!c3vy~{|R||D~tdD literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj new file mode 100644 index 0000000..b1f3e03 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj.user b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj.user new file mode 100644 index 0000000..447fdc6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/AssemblyInfo.vb new file mode 100644 index 0000000..a28d0fc --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/TestForm.resx b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/TestForm.resx new file mode 100644 index 0000000..aa5dcd4 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/TestForm.resx @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + TestForm + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/TestForm.vb b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/TestForm.vb new file mode 100644 index 0000000..7440978 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/TestForm.vb @@ -0,0 +1,63 @@ +Public Class TestForm + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents FireException As System.Windows.Forms.Button + Private Sub InitializeComponent() + Me.FireException = New System.Windows.Forms.Button() + Me.SuspendLayout() + ' + 'FireException + ' + Me.FireException.Location = New System.Drawing.Point(48, 136) + Me.FireException.Name = "FireException" + Me.FireException.Size = New System.Drawing.Size(184, 56) + Me.FireException.TabIndex = 0 + Me.FireException.Text = "&Fire exception" + ' + 'TestForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(292, 272) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.FireException}) + Me.Name = "TestForm" + Me.Text = "WinForms exception demo" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub FireException_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FireException.Click + Dim objTest As Object + objTest.GetType() + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptions.vb b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptions.vb new file mode 100644 index 0000000..2deab31 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptions.vb @@ -0,0 +1,41 @@ +Option Strict On +Imports System +Imports System.Windows.Forms + +Module UnhandledExceptions + + _ + Sub Main() + + 'First register the unhandled exception filter with the AppDomain. + 'This is useful to handle certain situations: + '1: An exception is thrown on a non-window thread or before first window launched. + '2: If a debugger is attached, unhandled exception will still reach here. + '3: If app config file specifies JIT debugging, unhandled exception still reaches here. + '4: Exceptions that are not CLS-compliant will still only be caught here. + AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionFilter + + 'In a Windows Form app, if a managed exception occurs and a debugger + 'isn't attached, the CLR will display an exception warning dialog. + 'If we want to override this dialog, we need to register a delegate + 'so that our method will be called instead. + AddHandler Application.ThreadException, AddressOf OverrideClrDialog + + 'Normal application code goes here + 'In this case, click on the form button to trigger an unhandled exception + Application.Run(New TestForm()) + + End Sub + + Private Sub UnhandledExceptionFilter(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) + 'This method deals with anything not handled by OverrideClrDialog + MsgBox(e.ExceptionObject.ToString, MsgBoxStyle.OKOnly, "UnhandledExceptionFilter: " + e.IsTerminating.ToString) + End Sub + + Private Sub OverrideClrDialog(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs) + 'This method will be called by any unhandled managed exception + 'assuming that a debugger isn't attached + MsgBox(e.Exception.ToString, MsgBoxStyle.OKOnly, "OverrideClrDialog") + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln new file mode 100644 index 0000000..f6e2f33 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "UnhandledExceptionsWinForms", "UnhandledExceptionsWinForms.vbproj", "{F2494349-133A-4CA8-A2E6-0F4422E9219F}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Debug.ActiveCfg = Debug|.NET + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Debug.Build.0 = Debug|.NET + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Release.ActiveCfg = Release|.NET + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.suo b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.suo new file mode 100644 index 0000000000000000000000000000000000000000..d10a84d01082f7c44862caab9d4d7bea0f5f4e62 GIT binary patch literal 9216 zcmeHMU2GIp6uw)ElnO;au%h6I{FI;8wiKjAkapWD*aEhdR7=J@UVti4fPnu{%pY%oQ_uZMtkbMW~C6g zy+t!<2L6Vw#nu|mM#=S_1D*>m0hfa3fo})T2V>bq8F&Gh>rTE!Gj|3$gn?g5D56E^ zC=+4`E9;+@irHzOzjKOiPoFyu`) zNw2F!QD70?(q_2|lQ#6cply?OiT$Eew2Nl^RLG8rKFk9(=#Pk5E#Qa1Tfy~UTQ`9WPm;Z&HzmiDx_DV>o+>VSNl-y92TMxW9WjirnP8_exidzDrrF(CVu z291HZp{u$%%>3?{9yJD&PJ`mdy4u^=uPms=;=M*V5mh>3dLOIiJgVwyBCPQ~V~!rM6B5pil@ z#UUV|E^BqP)=(b>G9Qy8vK{;Dq8p_yT5(VL^xamegCPd+V+#d{8b;YC<@aG6MReev z7#~9$K66|L|Mo!x1G-R?6rw*v$7{g~I;9na5=`$G{c`E61b`?>#7kc&KN6FpL zI)$%2gr}*npJNdJ7Ng`G_?6Fm$BtEA`TS}XIvmDK7;=_VS@o!}@Rzbl7^dr+2`yeTdb_%RJCVe3Z|7gcO zbuciFAr4|JWt^ue<9tnlls&NYF6oaE#D$RTokA(Z^EXK%ZCb;Z9E9u;^d>@t($D{< z9$x$7OcQzBNQOz8lwf~3`#)pGE0+Cv<+n@AFfcsF-%Rw?VQZSp(o7rdhdvRs2to^Drz)?GHVu$ZTc>Q2HEh;mG2T*VQZvSl0RM={ z9N$EC^PBhK9WzoJ^&P2ZUtX*8z#n4Y7nTCFL(@9x5BU-EM=wpM&O6qPd?pr4Di;;S z&&+~pj*V3mi9p+FdxgaNKfONqDV}>u%(?@C<1mw2q?`4kZZ?qX+U2*tx0yLB>8lHM zi|o39W$We}^J>4REw*F*HMz>n62h>3<_d9PTc8lzB|b7kW{&F;kBot8RLb086Y#VW z&q0)1an}eXTaXP`!b)0EUx#Pb)Z?F+(cLYTyZ!NPY~4)nVA~SG z2vJDgwuv1D95rZlR=(HrX2aK!Gk+diK0+~1 zDBM3q)7Fut<` z%Vmr>u#!GB0GS+>v!mfT4E)Hvca!4eS&BD5?gAQRN1=)SKkWc8oacg80f2h(@l3?~ z0i>Chun-GG;|a;-p%Ivi#;pUT594{@Lfu_W5%s(1WdL9zxIdo|TzlObGsKLSkuv`R|EM{1zg{UYYSH;1V&J zTQGA>Ah^YV)66)y4{#IvT^wE1pnW*H@SP@cZq@GPSNYyOHv#d<$Rn42Uh>qQvsD*L zMtc`O0cNIt<4+^n@(ij_M7cH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj.user b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj.user new file mode 100644 index 0000000..5c92159 --- /dev/null +++ b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/obj/Debug/UnhandledExceptionsWinForms.TestForm.resources b/Source/VisualStudio2002/Chapter13/UnhandledExceptionWinForms/obj/Debug/UnhandledExceptionsWinForms.TestForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..f15a35395cb5a8db59a723a7926cb8149cba3103 GIT binary patch literal 658 zcmb_Yy-EW?5S|EPPzwtiE3dE-j^)A`V~Q(6Vj7KvB-lx~pNTHs-pc+2)A<;p;G_5e z7CwTtmA-*Gt5FLJn;Ulcc6Pt{`R4KA^}YfCcjVi{nKmfc0JXF#Mg4OdV4R`yJ)u*n za-QhFOj{T(@H=&g=9lez$EY-yMO0$}3&S8_f$z0#ZmhznKx9xcG literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter14/ThreadDeadlock/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/AssemblyInfo.vb new file mode 100644 index 0000000..41e5ba2 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadDeadlock/DeadlockTest.vb b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/DeadlockTest.vb new file mode 100644 index 0000000..86abc9c --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/DeadlockTest.vb @@ -0,0 +1,130 @@ +Option Strict On +Imports System.Threading + +Module DeadlockTest + + Sub Main() + Dim TransferTest As New Bank(2, 10000) + 'Console.ReadLine() + End Sub + +End Module + +Class Bank + + Private m_AccountOne As New Account(1000000) + Private m_AccountTwo As New Account(1000000) + + Public Sub New(ByVal NumberOfCashiers As Integer, ByVal NumberOfTransfers As Integer) + Dim EachWorker As Integer, NewThread As Thread, Worker As Cashier + + 'Show starting conditions + Console.WriteLine("{0} cashiers are performing {1} transfers each.", _ + NumberOfCashiers.ToString, NumberOfTransfers.ToString) + + 'Start specified number of worker threads + For EachWorker = 1 To NumberOfCashiers + Worker = New Cashier(Me, NumberOfTransfers) + NewThread = New Thread(AddressOf Worker.TransferMoney) + NewThread.Name = "Cashier" & EachWorker.ToString + NewThread.Start() + Next EachWorker + + End Sub + + Public ReadOnly Property AccountOne() As Account + Get + AccountOne = m_AccountOne + End Get + End Property + + Public ReadOnly Property AccountTwo() As Account + Get + AccountTwo = m_AccountTwo + End Get + End Property + +End Class + +Class Cashier + Private m_Bank As Bank, m_WorkerId As Integer + Private m_NumberOfTransfers As Integer + + Public Sub New(ByVal AnyBank As Bank, ByVal NumberOfTransfers As Integer) + m_Bank = AnyBank + m_NumberOfTransfers = NumberOfTransfers + End Sub + + Public Sub TransferMoney() + Dim CurrentTransfer As Integer + + With m_Bank + + For CurrentTransfer = 1 To m_NumberOfTransfers + + If TrueOrFalse() = True Then + SyncLock (.AccountOne) + 'Thread.Sleep(0) + SyncLock (.AccountTwo) + .AccountOne.CreditBalance(100) + .AccountTwo.DebitBalance(100) + Console.WriteLine("{0}: Transfer {1}", _ + Thread.CurrentThread.Name, CurrentTransfer.ToString) + End SyncLock + End SyncLock + Else + SyncLock (.AccountTwo) + 'Thread.Sleep(0) + SyncLock (.AccountOne) + .AccountOne.DebitBalance(100) + .AccountTwo.CreditBalance(100) + Console.WriteLine("{0}: Transfer {1}", _ + Thread.CurrentThread.Name, CurrentTransfer.ToString) + End SyncLock + End SyncLock + End If + Next CurrentTransfer + + End With + + End Sub + + Private Function TrueOrFalse() As Boolean + Randomize() + Dim Test As Single = (Int((2 * Rnd()) + 1)) + Return CBool(Test = 1) + End Function + +End Class + +Class Account + + Private m_AccountBalance As Decimal = 0 + + Public Sub New(ByVal StartingBalance As Decimal) + m_AccountBalance = StartingBalance + End Sub + + Public ReadOnly Property AccountBalance() As Decimal + Get + AccountBalance = m_AccountBalance + End Get + End Property + + Public ReadOnly Property HasSufficientBalance(ByVal AmountToTransfer As Decimal) As Boolean + Get + HasSufficientBalance = CBool(m_AccountBalance >= AmountToTransfer) + End Get + End Property + + Public Function DebitBalance(ByVal AmountToDebit As Decimal) As Decimal + m_AccountBalance -= AmountToDebit + Return m_AccountBalance + End Function + + Public Function CreditBalance(ByVal AmountToCredit As Decimal) As Decimal + m_AccountBalance += AmountToCredit + Return m_AccountBalance + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.sln b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.sln new file mode 100644 index 0000000..d4d2893 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThreadDeadlock", "ThreadDeadlock.vbproj", "{7864B20A-722A-41F1-BE06-6DCD4C444FED}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {7864B20A-722A-41F1-BE06-6DCD4C444FED}.Debug.ActiveCfg = Debug|.NET + {7864B20A-722A-41F1-BE06-6DCD4C444FED}.Debug.Build.0 = Debug|.NET + {7864B20A-722A-41F1-BE06-6DCD4C444FED}.Release.ActiveCfg = Release|.NET + {7864B20A-722A-41F1-BE06-6DCD4C444FED}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.suo b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.suo new file mode 100644 index 0000000000000000000000000000000000000000..e07041d3367875e8974a8c94e7906a228630766f GIT binary patch literal 7680 zcmeHMO>h)N6n>ioNg@PMiHL$Df&!8)5<)-_G?`5_nhlr)60N;#vYS74ch=n{Aq5<~ zSspBoa1yGt%JS!66$hnCJXmF^7r0m+{3$)@!7B8m7m453Grc=mva_>cwMrMA` z_w;++{oeOp_uja^{-?_yZTeY?(h;eZTk{Qam#aR2GD)R-L~2mr`>px;dAm{s#g(*- zR^V^QTIcNHD&*Yn)u4J%185DX5p*|*`@Gi4m(dhgMDW8_QlXHJfukkU(hKh6D0RzeyTRwP87SnQp3lz&@TJm_ zL?tUHrB9}i=j1q^amb|WvtV(|U? z%fB7|0n1!b`rV|LSbCyvtur%o*<3VX48+q`CZ|lUE)>m0Ic(!dxX&0In~W#b>)Oy% zG+|8`-La{hm0^d5;rOW0V`Y-+yGGMWrma*wWe>A#Bh)Jh_ zPzki;P>P|(k~Z0cUmJRuGKtnS+K5@L(vG?z)MfAV4 zKjYSm&JdjSC{}g?KhAm>>z2ceC-GJe`#A*oSL}c2FYYhFpQz8hJBeMju=e!HUUKZf z{5fx(oMAmP#&|PM53Rq{D-t50AqQAuLl9?T@6Rx|=% zM~$M_&w|Fm$5^20#sXb8Bq;re3Wm_j*89DX>I6pEkDTM=lvcm_pYx`kBrv;iND;wY zXtk02yU71VB3n*v`BW_sdyL2Y@+VdfEk2y8b^D!i*2oVy|KfBfb;Vu)@rB8o(XZB0HkJQ_BmjY)1J_n=&?zT&TQm3?_rVT%q+Tn*=tA0P0Z~qkTv^3)5tn5QBn@!D%I-EVhF%0JJn41Bw!d z>C$*paA|~a1_DX-ZXa<7$~mQCfGgU&9X+H_op51;KAG9Rz{Ce+r5WnQISBpZnSi>- zr0c!%`_QOYH&iqgx6U6!8zT}gB-#W1JdfDi{qd*meV4cYg-hw?ug`)ZwP4XjrxXN# z#;}#}e;EBW{t@RA*h)P|d!5HI>j~7_TV><$qU;6spXcp&{WoK%SG3X0L1%8)rwH_} z5PVXr3gM@b*T+JbkaGo{F(?Ujt`Kw<*HDc(qOIL$VFPDiJ0@(URrVp@k5Y@uS=)lz zR@e&b4&Z0XUX&ODcY;iLO11O79p!VFTx;9j_I(|`WLPBuxq0owAD1cvu{4aGN~j%V zlpe*dak0|*XiDU;ijPDNK}5l1s|O!JEcC33mmuRFpvEai0&v3e}0Qj5u(c&np{uhe3oPDF{4?`Z?a)xEm?0+sL5VH?ICM^7__K zx<5Gh&De!MPj6PDc=3P9;Q7~fYdjAWPQPvda>GyI^h>ddPru$ktb72~}&OMQ8 zyHzaPzYnXo&qht9qQ_B$7t=s6p4CeEc&`Ds!2fZRd8YL1f1W_!x1B*vSSoEftImLN zU|D5S;Qmz@Pw)=XFMs#_gN||-2c;nk?ZCeMAd=Hjc_-fgk}qQlzx;QhufF9z4)Y>c z+EE;&<+7LD?k6c=dbU%_5JrCY>I2ZI}k=CrOq8%F0Mc4t&^_z%6Fqt$3I^E R{I+S{%>8~-&3?<7|36&qW7hxx literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj new file mode 100644 index 0000000..5ef8458 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj.user b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadGui/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter14/ThreadGui/AssemblyInfo.vb new file mode 100644 index 0000000..55bb850 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadGui/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadGui/Calc.vb b/Source/VisualStudio2002/Chapter14/ThreadGui/Calc.vb new file mode 100644 index 0000000..d3f2f26 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadGui/Calc.vb @@ -0,0 +1,46 @@ +Option Strict On + +Public Class Calc + + Private m_NumberToAccumulate As Int32 = 0 + Private m_NumberReached As Int32 = 0 + Private m_RunningTotal As Decimal = 0 + + Public Sub New(ByVal NumberToAccumulate As Int32) + m_NumberToAccumulate = NumberToAccumulate + End Sub + + Public Property NumberToAccumulate() As Int32 + Get + Return m_NumberToAccumulate + End Get + Set(ByVal NewValue As Int32) + m_NumberToAccumulate = NewValue + m_NumberReached = 0 + m_RunningTotal = 0 + End Set + End Property + + Public ReadOnly Property NumberReached() As Int32 + Get + Return m_NumberReached + End Get + End Property + + Public Function Accumulate(ByVal ShowProgressInterval As Int32) As Decimal + Dim LoopCounter As Int32 + + For LoopCounter = m_NumberReached To (m_NumberReached + ShowProgressInterval - 1) + If m_NumberReached <= m_NumberToAccumulate Then + m_RunningTotal += LoopCounter + m_NumberReached += 1 + Else + Exit For + End If + Next LoopCounter + + Return m_RunningTotal + + End Function + +End Class diff --git a/Source/VisualStudio2002/Chapter14/ThreadGui/MainForm.resx b/Source/VisualStudio2002/Chapter14/ThreadGui/MainForm.resx new file mode 100644 index 0000000..f073f91 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadGui/MainForm.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Assembly + + + Assembly + + + Assembly + + + False + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + Assembly + + + False + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + True + + + Assembly + + + MainForm + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter14/ThreadGui/MainForm.vb b/Source/VisualStudio2002/Chapter14/ThreadGui/MainForm.vb new file mode 100644 index 0000000..c566e05 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadGui/MainForm.vb @@ -0,0 +1,220 @@ +Option Strict On +Imports System.Threading +Imports System.Runtime.Remoting.Messaging + +Public Class MainForm : Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents cmdCalc As System.Windows.Forms.Button + Friend WithEvents lblResult As System.Windows.Forms.Label + Friend WithEvents txtNumber As System.Windows.Forms.TextBox + Friend WithEvents cmdCancel As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents txtInterval As System.Windows.Forms.TextBox + Private Sub InitializeComponent() + Me.cmdCalc = New System.Windows.Forms.Button + Me.txtNumber = New System.Windows.Forms.TextBox + Me.lblResult = New System.Windows.Forms.Label + Me.cmdCancel = New System.Windows.Forms.Button + Me.Label1 = New System.Windows.Forms.Label + Me.Label2 = New System.Windows.Forms.Label + Me.txtInterval = New System.Windows.Forms.TextBox + Me.SuspendLayout() + ' + 'cmdCalc + ' + Me.cmdCalc.Location = New System.Drawing.Point(160, 8) + Me.cmdCalc.Name = "cmdCalc" + Me.cmdCalc.Size = New System.Drawing.Size(144, 40) + Me.cmdCalc.TabIndex = 0 + Me.cmdCalc.Text = "Accumulate" + ' + 'txtNumber + ' + Me.txtNumber.Location = New System.Drawing.Point(24, 24) + Me.txtNumber.Name = "txtNumber" + Me.txtNumber.Size = New System.Drawing.Size(112, 22) + Me.txtNumber.TabIndex = 1 + Me.txtNumber.Text = "10000" + ' + 'lblResult + ' + Me.lblResult.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.lblResult.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.lblResult.Location = New System.Drawing.Point(16, 128) + Me.lblResult.Name = "lblResult" + Me.lblResult.Size = New System.Drawing.Size(288, 40) + Me.lblResult.TabIndex = 2 + Me.lblResult.Text = "Result is shown here" + ' + 'cmdCancel + ' + Me.cmdCancel.Enabled = False + Me.cmdCancel.Location = New System.Drawing.Point(160, 64) + Me.cmdCancel.Name = "cmdCancel" + Me.cmdCancel.Size = New System.Drawing.Size(144, 40) + Me.cmdCancel.TabIndex = 3 + Me.cmdCancel.Text = "Cancel" + ' + 'Label1 + ' + Me.Label1.Location = New System.Drawing.Point(24, 8) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(88, 16) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "Number" + ' + 'Label2 + ' + Me.Label2.Location = New System.Drawing.Point(24, 64) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(120, 16) + Me.Label2.TabIndex = 6 + Me.Label2.Text = "Display interval" + ' + 'txtInterval + ' + Me.txtInterval.Location = New System.Drawing.Point(24, 80) + Me.txtInterval.Name = "txtInterval" + Me.txtInterval.Size = New System.Drawing.Size(112, 22) + Me.txtInterval.TabIndex = 5 + Me.txtInterval.Text = "100" + ' + 'MainForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(320, 212) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.txtInterval) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.cmdCancel) + Me.Controls.Add(Me.lblResult) + Me.Controls.Add(Me.txtNumber) + Me.Controls.Add(Me.cmdCalc) + Me.Name = "MainForm" + Me.Text = "GUI multithreading" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Delegate Sub CalcDelegate(ByVal AnyNumber As Int32) + Private Delegate Sub ProgressDelegate(ByVal CurrentTotal As Decimal, ByVal NumberReached As Int32, ByRef CancelRequest As Boolean) + Private m_CancelRequested As Boolean = False + + Private Sub ButtonCalc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCalc.Click + + 'Init calculation + Me.cmdCalc.Enabled = False + Me.cmdCancel.Enabled = True + m_CancelRequested = False + + 'Use asynch delegate to launch new thread from the thread pool + Dim CalcAccumulation As CalcDelegate = New CalcDelegate(AddressOf CalculateAccumulation) + CalcAccumulation.BeginInvoke(Convert.ToInt32(Me.txtNumber.Text), AddressOf CalcComplete, Nothing) + + End Sub + + Private Sub ButtonCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancel.Click + + 'Request has been cancelled + m_CancelRequested = True + + End Sub + + Private Sub CalculateAccumulation(ByVal NumberToAccumulate As Int32) + Dim CalcObject As New Calc(NumberToAccumulate), CurrentTotal As Decimal = 0 + Dim CancelRequested As Boolean = False + + With CalcObject + + Do While .NumberReached <= NumberToAccumulate + CurrentTotal = .Accumulate(Convert.ToInt32(Me.txtInterval.Text)) + ShowProgress(CurrentTotal, .NumberReached, CancelRequested) + 'Throw New ApplicationException("Test exception") + If CancelRequested = True Then + Exit Do + End If + Loop + + End With + + End Sub + + Private Sub ShowProgress(ByVal CurrentAccumulation As Decimal, ByVal NumberReached As Int32, ByRef CancelRequest As Boolean) + + If Me.InvokeRequired = True Then + + 'Transfer to GUI thread to show progress + Dim CancelRequested As Object = False + Dim SP As ProgressDelegate = New ProgressDelegate(AddressOf ShowProgress) + Dim Arguments() As Object = New Object() {CurrentAccumulation, NumberReached, CancelRequested} + Me.Invoke(SP, Arguments) + CancelRequest = DirectCast(CancelRequested, Boolean) + + Else + + 'We're on the GUI thread, so just show progress + With Me.lblResult + .Text = "Number reached: " & NumberReached.ToString + .Text += Environment.NewLine + .Text += "Accumulated total: " & CurrentAccumulation.ToString + End With + + 'Pause for a short time to allow user to read display + Thread.CurrentThread.Sleep(100) + + 'Return any cancellation request + CancelRequest = m_CancelRequested + + End If + + End Sub + + Private Sub CalcComplete(ByVal CalcResult As System.IAsyncResult) + Dim Result As AsyncResult = CType(CalcResult, AsyncResult) + Dim OriginalDelegate As CalcDelegate = CType(Result.AsyncDelegate, CalcDelegate) + + 'Called when asynch thread completes + Me.cmdCalc.Enabled = True + Me.cmdCancel.Enabled = False + + Try + 'Find out if anything dodgy happened in the async thread + OriginalDelegate.EndInvoke(CalcResult) + Catch Exc As ApplicationException + MsgBox(Exc.Message, MsgBoxStyle.OKOnly, "Async thread exception") + End Try + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.sln b/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.sln new file mode 100644 index 0000000..8360707 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThreadGui", "ThreadGui.vbproj", "{DFCF340A-17A9-4859-8638-D4BDED3F4BD0}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DFCF340A-17A9-4859-8638-D4BDED3F4BD0}.Debug.ActiveCfg = Debug|.NET + {DFCF340A-17A9-4859-8638-D4BDED3F4BD0}.Debug.Build.0 = Debug|.NET + {DFCF340A-17A9-4859-8638-D4BDED3F4BD0}.Release.ActiveCfg = Release|.NET + {DFCF340A-17A9-4859-8638-D4BDED3F4BD0}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.suo b/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.suo new file mode 100644 index 0000000000000000000000000000000000000000..817dcee7b0b863de8d2cc1f8875f040088bd7654 GIT binary patch literal 8704 zcmeHMTWnNC7@jRf3PKSSL@B#7cHnRD zTI-(SOr$*TS-?8rY~by{Il#HVdBA!g&wIX`-b72i#cGKi=n*!4j<7_BNFmLL37o8d zSS)5v={#km5?Bjob!Y284$NRD3J_o)DB5CF>;d&5{BC_I;=n@H}j@XZH96agztm;J4yJD5nt?D1^AL+#^z;VzD=4<-}oK|7L(Sv`r=Fso+m zj;G?8NRs)Im24=4Kw+`!630Ia3_?l=UgvU zhtUl;Z$wxJ$-T|KGwVbhqMW5 z*2-VTcv8lZl6US0(uY|sCYI*F`f!~(=(*EA25bDgHjiMdA zrm+$m<06vh{op%^GG#Chq*tdDQBo2e zfVEKT2d2u`izBc66`xck>7%b!`bRtNSN<6LoB|TO^m)=LNQ`L-RnO92(4VqBe(96f zcPaRQ^7JQg7PLuPQ&fNNm+PkoWbEXZ{sQzZr~hH8eKw?F0=7u)g)JBbmWIt(KXr%k zm|yw}(YMc?&eVp|5~*sn4{?W0YeM_ug@04$o$FebY0D)n5nt2}&46g-a%*cupzCEy zgoF=&etrBil>6&c-O0c)h+QX4T_?iUR=DzZgxJk6NbLw$8&K1RFqXMCgtA-kZ9xB4 zTnIuiWFgdax}_#@LL4vQ@EgSuh;CXM$x-x(%HSdfVUEJpjX}heTd_oh`mUmf6l`tM zu(bMS7RMk5%+hMJXQ4;h2Knc^0A-KhuDN1D+1I;6uVFG}%KSdGF(T1Eqm&Lbfj)hg zqVA9WBJ^M79$Y2*`Yss4&N#qQ&HSHGwh3@-zUs%ZIF- z)pW#K9+g0mhGT@PTrNXZ9YXLiAcK;U<>QdzV{qU>XiGD+BM5D2f?hCXE%m1vy1}|O z{DRPu29&56=jXN>y1TBj?jHB*?o3$UD;M7WL8Ey}U!7}R$a)zd zqTxBCQMb_-gt7Fb+=c?40)1_CU}XN%GYv4l&TtVI$(OT~gZ^`|m=Z7-;AB{gG+s zBp-SB=Yo+-yR^p%s9GF?Jp^@CyHA6bpL07(eqb*g#V90@v35BdUum8dR}p`$$Al-` zNrTvFo<&y1@NvjubzI>6Ex`LsHTKWEe`+sBKbQtDG&<_`OHHJ|s|@=6uNwLrF{Qo% zd2dRZA8jNnQ|H@R_3^K{e#VaV-M!ykxH32V(wfsB)x5gsFBuwVK7XQp!|Bl{-}v^m z=X)mKe=|Ubu?%RwFNCpQDVS|X?wb%3bnRvb^#B2rb?N*c{V%TkpyRD=-$YOUd33p? zfzD4^eE(1Z3h#6I*ALT`n2sd>`awp*s@C`S2F89kx|n|F*6-iF*i-5N-#{3Zl#02`wNd~0-b?AA4w!A_@|)3MzJF)o zTc~riXc_rdU}|EySyVmg(}(g-fDmL~=tv<2cDL*?5a->ho{6DpSGEM zFkPT&`(1wl-TzYT7lk?}A$Zp&=EI)_Ed{aO`pU813*K1oM&8q?t1wajw>Vv$8PBZ@ zTwbXfa+6GX6XXAwF|iks5hGUhnyTM3Ro}v|_kELBAg@<0eic)5%thiIUwEI*;?N@Q o;nB(!Ub5Q3X}L>QSYEQc_fuY*D!q1k7!2ZX^B*V!rl0e=PLO8@`> literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.vbproj b/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.vbproj new file mode 100644 index 0000000..d324292 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.vbproj.user b/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.vbproj.user new file mode 100644 index 0000000..eabb41d --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadGui/ThreadGui.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadGui/obj/Debug/ThreadGui.MainForm.resources b/Source/VisualStudio2002/Chapter14/ThreadGui/obj/Debug/ThreadGui.MainForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..90a56a39c32f5b25f31cad16e5b614c7a6a4c6ae GIT binary patch literal 7011 zcmeHLYiJx*6h7N*_LVe!2}ji?2CeRSJTBLO|z*;t**1XcQ-@l5oTu7 zrcxAZef$x{`f9a^h!jz%6-#PC!Cz9OSfs%}{b4H-5G;byVzK(&*_rI@Bc!AO6>`bV z%stQVoclVn=g(dJ(nUna(eF)+>IRcT158)*TAJyTZv#xoFs(f(>uFV!#FSnsnO6)^ zX0~dA8Aa*#;3G`aMOE3_5ekPQk#IN^ZVyKDl9AWgR)ysaO_17y{rQw6rXOabgX&(U zY)x(0Aatd>?(5hT>15%Jn>fnl=pJ<0@*h<*ET+n#UM8oQw#_g!F_kx%-X1In%#P5}s>B3kwgVF_^D#}>Cn~v6LOj6i074dVhJl15*{M}y=O<3@T(f!X^ixe|PrfsD<@YYv#P@pl zFPry#^~XIE>a}F%2DQGQaQ}SmFV82Jc6smId8*+^>(Q30=U3k~aqw^?dph5F;>_jy zFTU9JV9hG;_Uq%JCl9%o>#x-i{f5=PZXVGX-nU>2{DAQVjMrhz+gbDu^tZvggg)*j z%HsJco^ka3=tsbR2|5Aj=y)GM-;MWX$OXaw2)u>pgXm+RT>-DvPt?AW3>qR4N+F67 zqbv!OCkfPEQYiyY7M+o1nk8CRs-Qu9A9aH*Lijy+EfKI839t{q%6Pdz5A+qv!KHxz zj1B_Z3a5)6ph$x$nHB^};f+z7muP9F*j}(Q^ca|pPG%qUWw2faBj{u#;9HalX6K?EnzC~b!Y5g><dk~maLZMkZdU|K+;VoM+eaZ3P9xhHiXvtSNtiy~ z>rh%&uHSGQ*?r8n2$NHCR7O|2GLH*T&n|s zpj$g?dLTbRF<4E}3FNs30I4Qa3FHfiZZv2=mTVkr(Eu2YM$Czs9?b3qL@TFKb^`hn zf~%(ztOONai0l-^`;Zyg+!@*}Ow)Hz3|3Qgf*D?f>{Jt~1o9z7iE!f3-)Q{FTRo0Q z>M7hiGrW__%9>hkdbxFzO;yiu8SjW7_H6t#=wWL{^xbf)bXVVWjpm_J=8K;yA`IVtMA#NDAtqjhOj z9u_pl%ORh^_8a`gtK?<=tcN)^h&tEgrUi*98A0O-rW)RSE}v@(fJLjVRys-}7_?lq zRps{Od4cy;0=wRP=S77d6#)eTZcdms7E=pV zYh-;-G#>L>Ddls?t@7^XHmk$1L*^27m@&YgVy@=P$$}F>$;D$3N1`XOyE))nOB?@w zScthqF1s}~Kg>&QeQ`RkX-r9v7D{3|nhW+~ zEG^1{lwepqf}v`SPB%8Oxzv?SUTTxejWpPd#HgH7rNx4xi%|=0f#g>NrSR5lBgEPi z710>A$Trqea*GvVxyPoG$Zdf0Eo#AJ14g}~B(cKKvCEc}HnOCh2`viY9)66uLLO8t0Gx=6o92D}LBNB%m1_EgJ`ZjK^4T-&;a8V`tv&Q}Q+{s9(};hrHct~CHJ6_` z$+r;S!MxkeJj|>Cr{j)sE#OEw!^gMk0uFg{G^0ysW>**0xqZEYsPN-$W>;TrzX_d# zci!sL-Ca`iQ&-MqeJ<;>^R+Q|!tkH2Z)Y#g}0 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter14/ThreadMonitor/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter14/ThreadMonitor/AssemblyInfo.vb new file mode 100644 index 0000000..db9fc83 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadMonitor/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadMonitor/FactorialCalc.vb b/Source/VisualStudio2002/Chapter14/ThreadMonitor/FactorialCalc.vb new file mode 100644 index 0000000..0831a03 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadMonitor/FactorialCalc.vb @@ -0,0 +1,18 @@ +Public Class FactorialCalc + + Public Event FactorialComplete(ByVal Factorial As Double, _ + ByVal TotalCalculations As Double) + + Public Shared Sub Factorial() + + Dim Working As Long = 1, FactorialResult As Double = 1 + Dim TotalCalcs As Long = 0 + Threading.Thread.Sleep(5000) + For Working = 1 To 20000000 + FactorialResult *= Working + TotalCalcs += 1 + Next Working + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter14/ThreadMonitor/MainForm.resx b/Source/VisualStudio2002/Chapter14/ThreadMonitor/MainForm.resx new file mode 100644 index 0000000..c898ea7 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadMonitor/MainForm.resx @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + Assembly + + + 17, 17 + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + MainForm + + + True + + + 80 + + + True + + + Assembly + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter14/ThreadMonitor/MainForm.vb b/Source/VisualStudio2002/Chapter14/ThreadMonitor/MainForm.vb new file mode 100644 index 0000000..56ff97b --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadMonitor/MainForm.vb @@ -0,0 +1,328 @@ +Option Strict On +Imports System.Threading +Imports System.Diagnostics + +Public Class MainForm : Inherits System.Windows.Forms.Form + + Private UserThreads As New Collection + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents ProcessList As System.Windows.Forms.ListBox + Friend WithEvents LabelThread As System.Windows.Forms.Label + Friend WithEvents LabelProcess As System.Windows.Forms.Label + Friend WithEvents ThreadList As System.Windows.Forms.ListView + Friend WithEvents LabelThreadName As System.Windows.Forms.Label + Friend WithEvents DisplayTimer As System.Windows.Forms.Timer + Friend WithEvents LaunchThread As System.Windows.Forms.Button + Friend WithEvents Splitter As System.Windows.Forms.Label + Friend WithEvents ManagedThreadList As System.Windows.Forms.ListView + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Me.ProcessList = New System.Windows.Forms.ListBox + Me.LabelThread = New System.Windows.Forms.Label + Me.LabelProcess = New System.Windows.Forms.Label + Me.ThreadList = New System.Windows.Forms.ListView + Me.LabelThreadName = New System.Windows.Forms.Label + Me.DisplayTimer = New System.Windows.Forms.Timer(Me.components) + Me.LaunchThread = New System.Windows.Forms.Button + Me.Splitter = New System.Windows.Forms.Label + Me.ManagedThreadList = New System.Windows.Forms.ListView + Me.SuspendLayout() + ' + 'ProcessList + ' + Me.ProcessList.ItemHeight = 16 + Me.ProcessList.Location = New System.Drawing.Point(16, 40) + Me.ProcessList.Name = "ProcessList" + Me.ProcessList.Size = New System.Drawing.Size(120, 292) + Me.ProcessList.Sorted = True + Me.ProcessList.TabIndex = 0 + ' + 'LabelThread + ' + Me.LabelThread.Location = New System.Drawing.Point(168, 8) + Me.LabelThread.Name = "LabelThread" + Me.LabelThread.Size = New System.Drawing.Size(168, 24) + Me.LabelThread.TabIndex = 2 + Me.LabelThread.Text = "Win32 threads in process:" + ' + 'LabelProcess + ' + Me.LabelProcess.Location = New System.Drawing.Point(16, 8) + Me.LabelProcess.Name = "LabelProcess" + Me.LabelProcess.Size = New System.Drawing.Size(96, 24) + Me.LabelProcess.TabIndex = 3 + Me.LabelProcess.Text = "Processes" + ' + 'ThreadList + ' + Me.ThreadList.Location = New System.Drawing.Point(176, 40) + Me.ThreadList.Name = "ThreadList" + Me.ThreadList.Size = New System.Drawing.Size(600, 296) + Me.ThreadList.TabIndex = 4 + Me.ThreadList.View = System.Windows.Forms.View.Details + ' + 'LabelThreadName + ' + Me.LabelThreadName.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.LabelThreadName.Location = New System.Drawing.Point(336, 8) + Me.LabelThreadName.Name = "LabelThreadName" + Me.LabelThreadName.Size = New System.Drawing.Size(128, 24) + Me.LabelThreadName.TabIndex = 5 + Me.LabelThreadName.Text = "Thread name" + ' + 'DisplayTimer + ' + Me.DisplayTimer.Interval = 1000 + ' + 'LaunchThread + ' + Me.LaunchThread.Location = New System.Drawing.Point(16, 384) + Me.LaunchThread.Name = "LaunchThread" + Me.LaunchThread.Size = New System.Drawing.Size(120, 40) + Me.LaunchThread.TabIndex = 6 + Me.LaunchThread.Text = "Launch thread" + ' + 'Splitter + ' + Me.Splitter.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.Splitter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Splitter.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Splitter.Location = New System.Drawing.Point(16, 360) + Me.Splitter.Name = "Splitter" + Me.Splitter.Size = New System.Drawing.Size(760, 3) + Me.Splitter.TabIndex = 7 + ' + 'ManagedThreadList + ' + Me.ManagedThreadList.Location = New System.Drawing.Point(176, 384) + Me.ManagedThreadList.Name = "ManagedThreadList" + Me.ManagedThreadList.Size = New System.Drawing.Size(600, 296) + Me.ManagedThreadList.TabIndex = 8 + Me.ManagedThreadList.View = System.Windows.Forms.View.Details + ' + 'MainForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(800, 700) + Me.Controls.Add(Me.ManagedThreadList) + Me.Controls.Add(Me.Splitter) + Me.Controls.Add(Me.LaunchThread) + Me.Controls.Add(Me.LabelThreadName) + Me.Controls.Add(Me.ThreadList) + Me.Controls.Add(Me.LabelProcess) + Me.Controls.Add(Me.LabelThread) + Me.Controls.Add(Me.ProcessList) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Thread monitor" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + + 'Setup thread display + With Me.ThreadList + .Columns.Add("Id", 50, HorizontalAlignment.Right) + .Columns.Add("Priority", 100, HorizontalAlignment.Left) + .Columns.Add("State", 80, HorizontalAlignment.Left) + .Columns.Add("Wait reason", 120, HorizontalAlignment.Left) + .Columns.Add("Time in app", 100, HorizontalAlignment.Left) + .Columns.Add("Total time", 100, HorizontalAlignment.Left) + End With + + 'Setup managed thread display + With Me.ManagedThreadList + .Columns.Add("Id", 50, HorizontalAlignment.Right) + .Columns.Add("Name", 150, HorizontalAlignment.Left) + .Columns.Add("Priority", 100, HorizontalAlignment.Left) + .Columns.Add("State", 120, HorizontalAlignment.Left) + .Columns.Add("Background?", 100, HorizontalAlignment.Left) + .Columns.Add("Pooled?", 80, HorizontalAlignment.Left) + End With + + 'Show processes + UpdateProcessDisplay() + 'Show Win32 threads for first process + Me.ProcessList.SetSelected(0, True) + 'Set thread displays to update regularly + Me.DisplayTimer.Interval = 1000 + Me.DisplayTimer.Enabled = True + + End Sub + + Private Sub ProcessList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProcessList.SelectedIndexChanged + + 'Display threads for process chosen by end-user + UpdateWin32ThreadDisplay(DirectCast(ProcessList.SelectedItem, Process).Id) + + End Sub + + Private Sub LaunchThread_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LaunchThread.Click + + Dim TempThread As New Thread(New ThreadStart(AddressOf FactorialCalc.Factorial)) + 'User wants new thread - launch and add to collection + With TempThread + .Name = "User thread " & UserThreads.Count.ToString + .Priority = ThreadPriority.BelowNormal + UserThreads.Add(TempThread, .GetHashCode.ToString) + .Start() + End With + + End Sub + + Private Sub DisplayTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DisplayTimer.Tick + + 'Re-display threads for currently-selected process + UpdateUserThreadDisplay() + UpdateWin32ThreadDisplay(DirectCast(ProcessList.SelectedItem, Process).Id) + + End Sub + + Private Sub UpdateProcessDisplay() + Dim MachineProcesses() As Process + + 'Retrieve, store and display processes on this machine + MachineProcesses = Process.GetProcesses() + With Me.ProcessList + .DataSource = MachineProcesses + .DisplayMember = "ProcessName" + End With + + End Sub + + Private Sub UpdateWin32ThreadDisplay(ByVal SelectedProcessId As Integer) + Dim SelectedProcess As Process + Dim ThisThread As ProcessThread, LV_item As ListViewItem + + 'Get Win32 threads for this process and display them + SelectedProcess = Process.GetProcessById(SelectedProcessId) + LabelThreadName.Text = SelectedProcess.ProcessName + + With Me.ThreadList + .BeginUpdate() + .Items.Clear() + + 'Iterate through every Win32 thread in this process + For Each ThisThread In SelectedProcess.Threads + + Try + 'Add thread id + LV_item = New ListViewItem(ThisThread.Id.ToString) + 'Add thread details + With LV_item.SubItems + 'Thread priority + .Add(ThisThread.PriorityLevel.ToString) + 'Thread state + .Add(ThisThread.ThreadState.ToString) + 'Reason for thread wait + If ThisThread.ThreadState = Diagnostics.ThreadState.Wait Then + .Add(ThisThread.WaitReason.ToString) + Else + .Add(vbNullString) + End If + 'Thread time in app + .Add(ThisThread.UserProcessorTime.TotalMilliseconds.ToString) + 'Thread time in OS + .Add(ThisThread.TotalProcessorTime.TotalMilliseconds.ToString) + End With + 'Display the thread + .Items.Add(LV_item) + + Catch Exc As InvalidOperationException + 'Thread's disappeared - ignore + + End Try + + Next ThisThread + + .EndUpdate() + End With + + End Sub + + Private Sub UpdateUserThreadDisplay() + Dim ThisThread As Threading.Thread, LV_item As ListViewItem + + 'Iterate through managed threads for current process + With Me.ManagedThreadList + .BeginUpdate() + .Items.Clear() + + 'Iterate through every thread in this process + For Each ThisThread In UserThreads + + If ThisThread.IsAlive Then + + Try + 'Add thread id + LV_item = New ListViewItem(ThisThread.GetHashCode.ToString) + 'Add thread details + With LV_item.SubItems + 'Add thread name + .Add(ThisThread.Name) + 'Thread priority + .Add(ThisThread.Priority.ToString) + 'Thread state + .Add(ThisThread.ThreadState.ToString) + 'Thread is alive? + .Add(ThisThread.IsAlive.ToString) + 'Background thread? + .Add(ThisThread.IsBackground.ToString) + 'Threadpool thread? + .Add(ThisThread.IsThreadPoolThread.ToString) + End With + 'Display the thread + .Items.Add(LV_item) + + Catch Exc As Threading.ThreadStateException + 'Thread's disappeared - ignore + UserThreads.Remove(ThisThread.GetHashCode.ToString) + + End Try + + Else + + 'Thread's dead - remove from collection + UserThreads.Remove(ThisThread.GetHashCode.ToString) + + End If + + Next ThisThread + + .EndUpdate() + End With + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.sln b/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.sln new file mode 100644 index 0000000..93c9273 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThreadMonitor", "ThreadMonitor.vbproj", "{D7CF35FF-B087-4604-8B22-67DB44DC7B50}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {D7CF35FF-B087-4604-8B22-67DB44DC7B50}.Debug.ActiveCfg = Debug|.NET + {D7CF35FF-B087-4604-8B22-67DB44DC7B50}.Debug.Build.0 = Debug|.NET + {D7CF35FF-B087-4604-8B22-67DB44DC7B50}.Release.ActiveCfg = Release|.NET + {D7CF35FF-B087-4604-8B22-67DB44DC7B50}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.suo b/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.suo new file mode 100644 index 0000000000000000000000000000000000000000..9cbd22927c1f34d3ef4edaefe015f58b062e1c8f GIT binary patch literal 8704 zcmeHMUu;uV7(d;H41^&lh$whP{=;e+g$)pNYd1w#z-_=Zed*S&E3~~$dtofVgKxw{ zV~7v%g7RQuL?29yQ4;Y%W7KFMCdL;v`lN|Q^hsZ2{(k4&v)g^yy$^YkOm_*@%E!H_v+}s2Ma1GzT;rbSJ0NX(eD`GwOA%bk32;Bd>wzDD+=0wL`MM^hXWyTE+}xo&Y(HF$h30tz{|<#Ct* ze91H*Vxk}piC&Sy+Y7p`NP?y{Mf$^J~c#D38)A|h-{A}6_9 zIE5}LnK64ks`u3AI?>>x{n9qQ@^|7j^CX^$#sQXz0elk!X#dO;3uyo3#p9z4=Y!Zr zy2p{f7x~4Y`#?)T_k$h)Ed{lL*x$hWA<%Nr!=M$Qm7rCi)u1&X_S=H@dOOduANfZ> z0nkQJ8)y?K2-*y42eDrV-djQ2K-=v)RNqbx34D6)u?xQ}e0KL4|M})~zwP)QVyY?q z5u%1%d!la53+2ZPRxEAwC30rok|x&_j#)8IJ9{wFYxEC~CNi=(H=K&4&7{#CPg!Q3 z9cCR!3>iIUJ|oA?4w;#pnN4KXG;N+QDw|~0 z%qJ4rL_U^gzHB8MN)v6FM4cTFqY_2<&clvlA};(QiJXPsxS(yj6UUB%LeSDEkiZm& zF?JX|qd*2?(qYV#MvH}995p8NJ%C>udW0}GhIuXY&%+jisB?0Upm!EyEWGn*Q>i$s z;lQ6T<|v?V5+gWUzkD7+4Odes5r2pkTBR!WbJo)~b$J)oOAnM5LwFwb$W@QVF@e9v zA+Dj=QaQ)C^^D!jT@OLBNqJ6raRBnPu;WqGPlx@S0{kcU?v+2|teqA36ZNS%hj6MU zWKW-5Z5?Z_fj?tB%jQr0qdbV|{m@bRz=X)yt!(-7le6Kk18t9=+W-6FUpwDhA9nTh zi%zUH2M=aqTuiQcAJ&~lnHG=$(W_I7sHxQ8tUW(HihKUr_}dfVwjyNYpzKIR6-mf4 zhBX_-3V3@#a@US(aEw9-d5z+|EVWcP5X#@4L<5Uy?|H!XY6wd#N_7BlgdJ4 zoJgp8mVbhO&GyH;%)3;4q{{rqAxmPC^aiSPnJ4)(?xFs9-TwmgX(KOPCaA;y;RfA~keVNg?OdtOI`q*bE4>qg1v%X_c zn|8oW55nHfc=jNq?m|e=f!bCC0b7s{BG-Z1HvC#q(~dD+s14#BLa7TQ1L6ejT}2OB ztT^pJN_{g+09PywA!@T{sYlvo>mPNGNiVwEoA*S$J9>>__}`2@vs35yqKy%W_8H}D zAYk*SC-KUE5&90>g0IG3-vz^vj0Gx}{NPVK;l0Q!|7GZ_@1N9{H1@CesN_6?T_;gX z|D{{XaTfyiFZq%;Q~6${wGX2BoHmf-RRTu8I06XFVHv!lAICv4NR7LWtN_;-lb~(j zxKyx9;7XztMN1rq%d)y)t1YQ;Gy{+`%FGu9UuTfYphO41#^idGVv>jD2)Hv?oipUs zAqhV&U+NTs<*tc2Uq3XG|?J~-) z=Zt>Q2L)#&$*)EU9J`JV{XqRL)T+Bf7y87p=c3#nt-IWdk%RYD@V4D4@jL|+OF)rF zV5Um?1jOQ;+tIHZO5W*G`+#&eJ<=dfVE2rBT6Xt;ck#-c$O|h^f7I~m!oQ`u=0AU` zbM5JaPrvc)YtQ#xeg93V#QXwOdOv-};Qdzt3*+(P?bitbP5>z0etAoC-+rq>LGj-U zb*Cm=4PK&51UT0UENZrT`eLY4sc@V~c7w2Z4*>ok5QKN7NKWvIJAdWFADHn4&*F^c#FEO0( zdj1>G*ZKXs0N+5F6Or=rTY>W=oZP17$)CtYEB4CYx&Ns%)?TB}-YfswIaD8UUHtW@ z!T(PzhCc<`N@B1z)nl-_-luBCa3{ngGP``?&%u++Kj?mI+c(3f|2n!EHe+5Igy s0(?q|TP_|S!LoUwB*>(YPot!sHzqQtYyWTW1HAu~uHoj(pdx_$3r^kl-2eap literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.vbproj b/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.vbproj new file mode 100644 index 0000000..9867eac --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.vbproj.user b/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.vbproj.user new file mode 100644 index 0000000..c168d10 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadMonitor/ThreadMonitor.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadMonitor/obj/Debug/ThreadMonitor.MainForm.resources b/Source/VisualStudio2002/Chapter14/ThreadMonitor/obj/Debug/ThreadMonitor.MainForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..8ecc9870dca7ad92b5e6b3f106e80fa20080d5f0 GIT binary patch literal 8492 zcmeHMYitx%6h1@S?QUDjt1TKts!~K)HZ8Th3io!xX(i}GV9 zxt+P^e&?L;p8Gm?`_-x6KbDB-HIzHzqo&2x$QEwuX(P$at6y6L?%EUhV(-)HeQ&?8_w(oX|D1gB<=_4~c;Kx$x4yIJmn+9QKREp1=A~;s zdPW*KK0X%v=BMvMKRo`&jThuuOD~*0vVHuC@u$Y$TM+xL@$$J#^WTV9&f9#fe*gRf zbH90Z=Ddq9pP2V&&E2;hKDKy~vVI`^%dS1`U!J>T#ie!CYo5Dl_qvLz(>?cG3~fET zCG^0_ZF?RJ9(whWW5I1tyon`u8LMqqCDD)5i0(rDd(>a8!XG@xQQA;WqJ3|G=$#6p zZhTh(+kx*E$j0zK4g7xKOq4As-@;A+@&UX}w7m{|6TVmAdm412s2{~!$NM~RS75Uj z^;__Msg@|bkSrP^83rR1B~AmxC`}5aJ)~0#EdwZ=4BI8qO}PpN;3KpF%`(8RgHaB^ zZHS|J3|7wM1G=HF(I8wh{N=O@+;8=|=mv`<8Wr0DqXfP3O(}W^jSb$$ zUg)c6dI=59-iA1QGa9BoIB}^S%m?+MbBspmK3I@JatN{c8lXj9OD;(C$FO_S1=>37 zp8<4D6q+U+DYm6P)C3=+gqYU_iIx;scf(`Br117G;NjwM|CnwJfu3NU03n59ASD9M zLAR7C@hj996<5#D%M8oD8c-_^^;7!<3ahdTeTcjPVhlq(@myt?+zX2-dud5^2yii= zpVUgg*A<4l(`;gLXJNz>3UAM{M!Y0PrV}ln$g7|15vbXNo5s{gB7R;^6VvRecLukx zx|iTMpmvW6L;ciln}N-#2ZJeApji2-9CF?Eg0V^%=ucs&wG=~My2+W?B1=*76MqG& zt8$k~>10>W!mKQ&>?L>(z$L|ieo`}LV}8W#4MxWHWFelVY%cFZ?PkB4m&m3$VC;wZ zDeM7og?E0H9+j2`Z2E;&y;ME}Y;j?jpUxG4iEx_G-+07ZJasq*sXLQ+OfuofOQoxX z=><+IQ!IxTnCcx&N%Q`G3JMN{SyU_e_*DvIy<^SEk!@wQ-&Q9{s-5Q3vU}BcEz&8w zcXM(r+ex+PL)D0!vW5afTpk>^cIVuzuV~(kO`ig4zs6KvqxPqm z#kz2jnx*!qO}^FS#-<(IFys^uB{P?vu4tXwFPq|8wMkP(Ym>S<%nUA4@Sw$aTH>Qx zORM5t2Xnj+cPqO!$rP@om>~j872*j>L8%DAtkwBWIC6W?=eTMq*xH*Gm#TYpLuEFh z+Y6$i4!bO_u&+*sc+Dxn{7DokBnBje1dl?-y5Qv34m&aP;+6H+mj z!m22h!e(I_ZkGk379$4wMaF8n+MjX4w85?@;0W|p?v;XYX<=Ic20P;QYLOLdd$dzc? zi9ftZ<9Ovs$w>ELEd|+Pkd?;!k4dg zedPjy!u+n?sos!xs@p%x*fVCQG%8L2@hxVeDA#@XuJ_@c%zQ6LUHn%4Unkh*sF$N& o=(1McVJ7?Erhl`7%TX^!eQJI + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadSynch/CountMonitor.vb b/Source/VisualStudio2002/Chapter14/ThreadSynch/CountMonitor.vb new file mode 100644 index 0000000..1ccdc72 --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadSynch/CountMonitor.vb @@ -0,0 +1,86 @@ +Option Strict On +Imports System.Threading + +Module CountMonitor + + Sub Main() + Dim CountTest As New CountCoordinator(5) + Console.ReadLine() + End Sub + +End Module + +Class CountCoordinator + + Private Const MAX_COUNT As Integer = 99 + Private m_Counter As Integer = 0 + + Public Sub New(ByVal NumberOfCounters As Integer) + Dim EachWorker As Integer, NewThread As Thread, Worker As CountWorker + + 'Show starting conditions + Console.WriteLine("Count started at {0} with max value of {1}.", _ + CStr(Me.CurrentCount), CStr(Me.MaxCount)) + Console.WriteLine("{0} worker threads are doing the counting.", _ + CStr(NumberOfCounters)) + 'Start specified number of worker threads + For EachWorker = 1 To NumberOfCounters + Worker = New CountWorker(Me, EachWorker) + NewThread = New Thread(AddressOf Worker.IncrementCount) + NewThread.Start() + Next EachWorker + + End Sub + + Public Property CurrentCount() As Integer + Get + Return m_Counter + End Get + Set(ByVal Value As Integer) + m_Counter = Value + End Set + End Property + + Public ReadOnly Property MaxCount() As Integer + Get + Return MAX_COUNT + End Get + End Property + +End Class + +Class CountWorker + Private m_Coordinator As CountCoordinator + Private m_WorkerId As Integer + + Public Sub New(ByVal Coordinator As CountCoordinator, ByVal WorkerId As Integer) + m_Coordinator = Coordinator + m_WorkerId = WorkerId + End Sub + + Public Sub IncrementCount() + + 'Increment shared counter until equal to maximum allowed + With m_Coordinator + + Do While .CurrentCount < .MaxCount + 'SyncLock (m_Coordinator) + Select Case .CurrentCount + Case Is < (.MaxCount - 10) + Thread.Sleep(0) + .CurrentCount += 10 + Case Is < .MaxCount + Thread.Sleep(0) + .CurrentCount += 1 + Case Else + End Select + 'End SyncLock + Console.WriteLine("Worker {0} current count {1}", _ + CStr(m_WorkerId), CStr(.CurrentCount)) + Loop + + End With + + End Sub + +End Class diff --git a/Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.sln b/Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.sln new file mode 100644 index 0000000..ad8255b --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThreadSynch", "ThreadSynch.vbproj", "{970BC01E-8AA4-445D-B714-C5C376206C09}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {970BC01E-8AA4-445D-B714-C5C376206C09}.Debug.ActiveCfg = Debug|.NET + {970BC01E-8AA4-445D-B714-C5C376206C09}.Debug.Build.0 = Debug|.NET + {970BC01E-8AA4-445D-B714-C5C376206C09}.Release.ActiveCfg = Release|.NET + {970BC01E-8AA4-445D-B714-C5C376206C09}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.suo b/Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.suo new file mode 100644 index 0000000000000000000000000000000000000000..44e95598d975d840309f13d4993dfe1d85afc71f GIT binary patch literal 7680 zcmeHMO>9(E6h6}yDF{VWDx%;M0RicxE#~%eaMqkx=W-18J2G>EG$@+BFNrO|DhfD z6Kid<&u|I8JnyBTX3#RwouK8Q6`++Mo;B%q`hV;|znJ*t#E>3I;hT|JoU-@SDogS< zPaUb0KK}9LxyhDKe2wVzBozzkI5?UzAxFV|47nbeu^K%7Z3POsPr~Cc0eq=6C}GLU zY3Y@5d~_qCybHO~Mo*oSKa$HLwF`gbZ z!nL_Mjvu)WVc&9U$GDp63HV#H|6!bUuRV1!f9^WZ?lex-#BR_hS6atb;J+IUs;}6J z@zQojt-sVOBkzr4*a7mbrcDkv`VV?;OOGwD9)~PpNn+k3kR$=QIAaL;2wF^(O!$1p z9&SxH3Uu8Nzw{w07(_2i?{{L3lbB%-zMLnAugEKZJ8$Yq0@96P6(f*^Ry&d}|9e(s zty9}Swy9t@i}jE37tx29LY+uKvPx--t$*|aUhR*ukB)ze`BPI;3b`C4tir!$`{P>Q z^I5Z&=Rb?HWK5>KLD?lxe#TR@X|M7#UMpw+A?$q;Tp5QC*?VE3aOoxN0Ds19jK{q4 zXRJ6_dOB5GsL_k{r+6skFHW~o$GN;wF?!$k)0w*v;%CVS-&eqG3Q;kOG8wGHiilv8d)zg?i6DDPG< zwp)$dCv$SPjKlWJ6x1)RfN}!8A}Th%MIZ;r<998HH$G(+Pf7!q|lgfA+^4lS-v2EVPvS;>dn~?{o}iU_CdP7()S)T z>fH?%3FOxK<7i_$_l3ZCkjcNPh5V3|kBT2hm^S zA0xg54phr%?eiFu{qef5#EBfduYyQ%2mnrNpThbBST%2++6`_|l&wtc#Va*>3+A^O%b7KI6`M+0nS z?tD9|{r=~c-wn<9Zw{aA+zR46AONy@6lpuNiY*Gi3l z&fxop72NPX=)8Wo-H_V}Ij + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.vbproj.user b/Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.vbproj.user new file mode 100644 index 0000000..a6e254a --- /dev/null +++ b/Source/VisualStudio2002/Chapter14/ThreadSynch/ThreadSynch.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/Heartbeat/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter15/Heartbeat/AssemblyInfo.vb new file mode 100644 index 0000000..83b7225 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/Heartbeat/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vb b/Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vb new file mode 100644 index 0000000..f4660be --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vb @@ -0,0 +1,20 @@ +Option Strict On + +Imports System +Imports System.Runtime.Remoting.Messaging + +Public Class Heartbeat : Inherits MarshalByRefObject + Public Event HeartbeatLocal(ByVal LocalComponent As String) + Public Event HeartbeatRemote(ByVal LocalMonitor As String, ByVal StatusReport As String) + + _ + Public Sub Heartbeat(ByVal LocalComponent As String) + RaiseEvent HeartbeatLocal(LocalComponent) + End Sub + + _ + Public Sub RemoteHeartbeat(ByVal LocalMonitor As String, ByVal StatusReport As String) + RaiseEvent HeartbeatRemote(LocalMonitor, StatusReport) + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vbproj b/Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vbproj new file mode 100644 index 0000000..fd74a1f --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vbproj.user b/Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vbproj.user new file mode 100644 index 0000000..447fdc6 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/Heartbeat/Heartbeat.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/HeartbeatClient/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter15/HeartbeatClient/AssemblyInfo.vb new file mode 100644 index 0000000..2c8b8da --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/HeartbeatClient/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vb b/Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vb new file mode 100644 index 0000000..435b7d7 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vb @@ -0,0 +1,48 @@ +Option Strict On + +Imports System +Imports System.Runtime.Remoting +Imports Monitoring +Imports System.Threading + +Module Client + Private Const MY_ID As String = "Client" + Private Delegate Sub HeartbeatThread(ByVal HeartbeatInterval As Int32) + Private m_StopHeartbeats As Boolean = False + + Sub Main() + + Console.WriteLine("Starting client") + Dim HT As New HeartbeatThread(AddressOf Heartbeats) + Dim ThreadResult As IAsyncResult = HT.BeginInvoke(2, Nothing, Nothing) + + Console.WriteLine("Press 'Enter' to terminate client...") + Console.ReadLine() + + Console.WriteLine("Terminating client") + m_StopHeartbeats = True + HT.EndInvoke(ThreadResult) + + End Sub + + Private Sub Heartbeats(ByVal HeartbeatInterval As Int32) + + 'Find local monitor + Console.WriteLine("Finding local monitor") + Dim Listener As New Heartbeat + Listener = CType(Activator.GetObject(GetType(Heartbeat), _ + "tcp://localhost:8080/Heartbeat.dll"), Heartbeat) + + 'Send regular heartbeats to local monitor + Do While m_StopHeartbeats = False + Listener.Heartbeat(MY_ID) + Console.WriteLine("Heartbeat sent to local monitor") + Thread.Sleep(HeartbeatInterval * 1000) + Loop + + 'Terminate heartbeat thread + Console.WriteLine("Stopping heartbeats") + + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vbproj b/Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vbproj new file mode 100644 index 0000000..ee60720 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vbproj @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vbproj.user b/Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vbproj.user new file mode 100644 index 0000000..86f0316 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/HeartbeatClient/HeartbeatClient.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/HeartbeatMonitor.sln b/Source/VisualStudio2002/Chapter15/HeartbeatMonitor.sln new file mode 100644 index 0000000..e14cf11 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/HeartbeatMonitor.sln @@ -0,0 +1,39 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LocalMonitor", "LocalMonitor\LocalMonitor.vbproj", "{0C431FCE-CEAA-4DD1-B39C-B7D208FEED47}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Heartbeat", "Heartbeat\Heartbeat.vbproj", "{938247CE-2129-436B-9133-48AF121B1E0A}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HeartbeatClient", "HeartbeatClient\HeartbeatClient.vbproj", "{9CA4D5F1-4EE6-4EFC-AA25-37BDF22F2A06}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RemoteMonitor", "RemoteMonitor\RemoteMonitor.vbproj", "{1F37FA75-2C1B-4BA3-A02D-2B2680C6EBE4}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {0C431FCE-CEAA-4DD1-B39C-B7D208FEED47}.Debug.ActiveCfg = Debug|.NET + {0C431FCE-CEAA-4DD1-B39C-B7D208FEED47}.Debug.Build.0 = Debug|.NET + {0C431FCE-CEAA-4DD1-B39C-B7D208FEED47}.Release.ActiveCfg = Release|.NET + {0C431FCE-CEAA-4DD1-B39C-B7D208FEED47}.Release.Build.0 = Release|.NET + {938247CE-2129-436B-9133-48AF121B1E0A}.Debug.ActiveCfg = Debug|.NET + {938247CE-2129-436B-9133-48AF121B1E0A}.Debug.Build.0 = Debug|.NET + {938247CE-2129-436B-9133-48AF121B1E0A}.Release.ActiveCfg = Release|.NET + {938247CE-2129-436B-9133-48AF121B1E0A}.Release.Build.0 = Release|.NET + {9CA4D5F1-4EE6-4EFC-AA25-37BDF22F2A06}.Debug.ActiveCfg = Debug|.NET + {9CA4D5F1-4EE6-4EFC-AA25-37BDF22F2A06}.Debug.Build.0 = Debug|.NET + {9CA4D5F1-4EE6-4EFC-AA25-37BDF22F2A06}.Release.ActiveCfg = Release|.NET + {9CA4D5F1-4EE6-4EFC-AA25-37BDF22F2A06}.Release.Build.0 = Release|.NET + {1F37FA75-2C1B-4BA3-A02D-2B2680C6EBE4}.Debug.ActiveCfg = Debug|.NET + {1F37FA75-2C1B-4BA3-A02D-2B2680C6EBE4}.Debug.Build.0 = Debug|.NET + {1F37FA75-2C1B-4BA3-A02D-2B2680C6EBE4}.Release.ActiveCfg = Release|.NET + {1F37FA75-2C1B-4BA3-A02D-2B2680C6EBE4}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2002/Chapter15/HeartbeatMonitor.suo b/Source/VisualStudio2002/Chapter15/HeartbeatMonitor.suo new file mode 100644 index 0000000000000000000000000000000000000000..9b03844d41c65524376927aa90e69b233e1c4fe2 GIT binary patch literal 9728 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 + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.config b/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.config new file mode 100644 index 0000000..690767d --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vb b/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vb new file mode 100644 index 0000000..e57688c --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vb @@ -0,0 +1,65 @@ +Option Strict On + +Imports System +Imports System.Runtime.Remoting +Imports System.Threading +Imports Monitoring + +Module Monitor + Private Const MY_ID As String = "LocalMonitor" + Private Delegate Sub HeartbeatThread(ByVal HeartbeatInterval As Int32) + Private m_StopHeartbeats As Boolean = False + Private m_StatusReport As String = "No heartbeats received" + Private WithEvents m_Listener As Heartbeat + + Sub Main() + + Console.WriteLine("Starting local monitor") + RemotingConfiguration.Configure("LocalMonitor.config") + + Console.WriteLine("Creating local listener") + m_Listener = New Heartbeat + RemotingServices.Marshal(m_Listener, "Heartbeat.dll") + + Dim HT As New HeartbeatThread(AddressOf Heartbeats) + Dim ThreadResult As IAsyncResult = HT.BeginInvoke(10, Nothing, Nothing) + + Console.WriteLine("Now listening - press 'Enter' to terminate local monitor...") + Console.ReadLine() + + Console.WriteLine("Local monitor terminating") + m_StopHeartbeats = True + HT.EndInvoke(ThreadResult) + + RemotingServices.Disconnect(m_Listener) + m_Listener = Nothing + + End Sub + + Private Sub Heartbeats(ByVal HeartbeatInterval As Int32) + + 'Find remote monitor + Console.WriteLine("Finding remote monitor") + Dim Listener As New Heartbeat + Listener = CType(Activator.GetObject(GetType(Heartbeat), _ + "tcp://localhost:8081/Heartbeat.dll"), Heartbeat) + + 'Send regular heartbeats to remote monitor + Do While m_StopHeartbeats = False + Listener.RemoteHeartbeat(MY_ID, m_StatusReport) + Console.WriteLine("Heartbeat sent to remote monitor") + Thread.Sleep(HeartbeatInterval * 1000) + Loop + + 'Terminate heartbeat thread + Console.WriteLine("Stopping heartbeats") + + End Sub + + Private Sub m_Listener_HeartbeatLocal(ByVal LocalComponent As String) Handles m_Listener.HeartbeatLocal + 'Listen for regular heartbeats from local component + Console.WriteLine("Heartbeat received from " & LocalComponent) + m_StatusReport = "Last heartbeat received from " & LocalComponent & " at " & Format$(Now, "hh:mm:ss") + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vbproj b/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vbproj new file mode 100644 index 0000000..c3504c3 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vbproj @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vbproj.user b/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vbproj.user new file mode 100644 index 0000000..6435010 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/LocalMonitor/LocalMonitor.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/LocalMonitor/bin/LocalMonitor.config b/Source/VisualStudio2002/Chapter15/LocalMonitor/bin/LocalMonitor.config new file mode 100644 index 0000000..690767d --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/LocalMonitor/bin/LocalMonitor.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/RemoteMonitor/AssemblyInfo.vb b/Source/VisualStudio2002/Chapter15/RemoteMonitor/AssemblyInfo.vb new file mode 100644 index 0000000..a1564e1 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/RemoteMonitor/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.config b/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.config new file mode 100644 index 0000000..b242261 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vb b/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vb new file mode 100644 index 0000000..3669571 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vb @@ -0,0 +1,34 @@ +Option Strict On + +Imports System +Imports System.Runtime.Remoting +Imports Monitoring + +Module RemoteMonitor + Private WithEvents m_Listener As Heartbeat + + Sub Main() + + Console.WriteLine("Starting remote monitor") + RemotingConfiguration.Configure("RemoteMonitor.config") + + Console.WriteLine("Creating remote listener") + m_Listener = New Heartbeat + RemotingServices.Marshal(m_Listener, "Heartbeat.dll") + + Console.WriteLine("Now listening - press 'Enter' to terminate remote monitor...") + Console.ReadLine() + + Console.WriteLine("Remote monitor terminating") + RemotingServices.Disconnect(m_Listener) + m_Listener = Nothing + + End Sub + + Private Sub m_Listener_HeartbeatRemote(ByVal LocalMonitor As String, ByVal StatusReport As String) Handles m_Listener.HeartbeatRemote + 'Listen for regular heartbeats from local monitor + Console.WriteLine("Status report received from " & LocalMonitor) + Console.WriteLine(StatusReport) + End Sub + +End Module diff --git a/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vbproj b/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vbproj new file mode 100644 index 0000000..b11a815 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vbproj @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vbproj.user b/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vbproj.user new file mode 100644 index 0000000..81551f1 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/RemoteMonitor/RemoteMonitor.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2002/Chapter15/RemoteMonitor/bin/RemoteMonitor.config b/Source/VisualStudio2002/Chapter15/RemoteMonitor/bin/RemoteMonitor.config new file mode 100644 index 0000000..b242261 --- /dev/null +++ b/Source/VisualStudio2002/Chapter15/RemoteMonitor/bin/RemoteMonitor.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter02/Listing2-1/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-1/AssemblyInfo.vb new file mode 100644 index 0000000..a30ae2c --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-1/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.sln b/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.sln new file mode 100644 index 0000000..bfcaa61 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-1", "Listing2-1.vbproj", "{31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Debug.ActiveCfg = Debug|.NET + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Debug.Build.0 = Debug|.NET + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Release.ActiveCfg = Release|.NET + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.sln.old new file mode 100644 index 0000000..050d62b --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-1", "Listing2-1.vbproj", "{31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Debug.ActiveCfg = Debug|.NET + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Debug.Build.0 = Debug|.NET + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Release.ActiveCfg = Release|.NET + {31835C14-E9E6-4D1D-BCF5-6DACB521A7BF}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.suo b/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.suo new file mode 100644 index 0000000000000000000000000000000000000000..9a4ca4e3e5bb4bf5672a56a96574e71766f28b0e GIT binary patch literal 7680 zcmeHLO>7%Q6n^=ECZS1NAfXf}O9fSmXq1$;KuZgWokAc^OOld+eDTl5ak}wZwv$jn zC6G9A;)KcxdO$)&LU2P!zyS#XmvZ9*5}e?G1QHi6#C+fEj@Nd)n{^UEg*^Il;{BY&NeLqSaot8FPEqBU|RsAifvnbjv(uxY(tL1Xp=@dbAo30}Z{0Ujx z-96-9-+UVwB z=!4m-zgs<@x3po>%XBKxv?Qb`7i3(rc$VZm{!K`s`-{#r-~W51wS_oDf2AD06YB=( z9$4|n>S$NfNI#xG+vEdOe}W}Wuqp6J*n4(K}9$jw1zB=IQyp=<7qd z4P`IN?I`<38Efi1fOR#F*}*HOk>7O8fWanqI$iv zrqva(7xQ+`%$3w&_e?gIwpWVY^!6vGW8++`Ct_vuNjp(U8k=BzMn*i$O(xfl5JT++!8zDh-_lo5)jV9NC~wxdTco&gZMp&84;PsXdYw4yg`h_ zD@d3H9%s;VSccH+N1K)3!=ET*C_=sr_)?m1NC^CCAzo-t^pmr?pE0f5yk8T@B@BgD&F-DW+1qOJ)UE?`$|Sc5q+C!#rUi|)$RI-kQBBQnSn2Em_snK?Qv|C=$FK2S}} z|MW=*#~j@=*o6cnGsLq>9A_1tjd)fmqRc@$qXy}W8mu#9KqhduoK|?4l85l*+a-l* zul_?Ei76H|nFH@QdTrEUCm9U=0`Pw%XJiS}%V(|54tMI_H5c^Lo4)cZ$~BuC{Dl;fx!MNkc)9L5nk z0@po;+Htgp(HcSP2u6qDh$9%g#8`|W{wx(`%+d+vol8JqjQ}F2)cIKCBo-H`Vvi+< z(6?dsh>kSSt(Nauh5prCiCDFBv}_JKac&24LG!W&;g7zHMPU=#r4bDPe~29l{6ga2 zEts!&mnS9*_SYEa;OrbQCWBt$j~;2nT?F`F;T;zLn5&+51LQ1D9}DmRVx1qxH|Fg0 z?uY)=hkh8A|9;FJb6y8e3py6@<7v@^FEl3w?!Q7G=3Oi-|LXHsKxn|*Ph-`s_4Y~V z$oxv3O?j!39R`5SBWkyK_8Y;RGn|nM_XFPFH)g+Q4BlT->h{8X?%iJa4Mg8wiqLrN?S(s4e|xdiTeMH@?M3MX>Fez` zdyO{bd9>bss(anP&DxLpKi*LPjcDhmv%eZzfBzZ5BhLNM`F;~Tv+=0TBRmJ^5p_Iy zJGVa~KF_wo&>~ShqLqV&(#|_fU3TKX?@3FhdFTOJ~Tsp8{pp$2Fw?v zFRncH@z1@_O}shqUdNSRPJQq6ZvX#ZEZ}7<=lhFy|G$X)5x + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.vbproj.user new file mode 100644 index 0000000..9715303 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-1/Listing2-1.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-1/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-1/Test.vb new file mode 100644 index 0000000..4482e2a --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-1/Test.vb @@ -0,0 +1,10 @@ +Option Strict On +Module Test + + Sub Main() + Console.WriteLine("CInt(True) = " + CInt(True).ToString) + Console.WriteLine("Convert(True) = " + Convert.ToInt16(True).ToString) + Console.ReadLine() + End Sub + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter02/Listing2-10/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-10/AssemblyInfo.vb new file mode 100644 index 0000000..e112cff --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-10/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.sln b/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.sln new file mode 100644 index 0000000..3847e42 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-10", "Listing2-10.vbproj", "{EF22FDFF-8665-44CF-BADC-362A5663C0C1}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Debug.ActiveCfg = Debug|.NET + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Debug.Build.0 = Debug|.NET + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Release.ActiveCfg = Release|.NET + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.sln.old new file mode 100644 index 0000000..001af0f --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-10", "Listing2-10.vbproj", "{EF22FDFF-8665-44CF-BADC-362A5663C0C1}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Debug.ActiveCfg = Debug|.NET + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Debug.Build.0 = Debug|.NET + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Release.ActiveCfg = Release|.NET + {EF22FDFF-8665-44CF-BADC-362A5663C0C1}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.suo b/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.suo new file mode 100644 index 0000000000000000000000000000000000000000..58b9f6a68b044d19ab0b07fdc4facca6da0437ea GIT binary patch literal 7680 zcmeHLO>9(E6h6~dXe$&@S`h`GSPTj_wH2xSDV=E*?G!AD5(JEnkG{(dj8V7HC-Fl9!V*AZa`cavc9Qv@rE~x0~;OJ5UHvr2Lh7_;##l zppTOdLlP~Jk#YQ=kz-2w475q0v^ZH(7oyw^=o(Z$G4mrm^7=4a~ZB{bbpTj0~@~mAa)_;P)_hch9k7liChaNpx;B!IXPlJPmrNI&96PL!I^*e#ZH?IDR=<;* zQp20d-kQVC)U=bevjx?-b|jrmI;Zo+?hVfjM+Z1rOE{CB9(Uroq&1YzrdYN5X*+A@ z;u)3~QfOgSO*I^!1czm>#1P4joI>0ZJ7S1zV%jMnTm~%#l#-}%q)R&S>qd{TOrmuf zZN$7zw8Z9-FbzCTq2>{J6fH3yt!`HTBK}06Lmv92AeY(%Lqg&Y@q+k45A;#9teSCb zDkyavmPz49sUxsQ0rs0z+L&JcPvY;LXeNdQmCro2QBPSZpQvj?hm+V92i9OtR8FV+ zS3Y(?{yJ1rHmS1R>z!w;Y28pMzYjTx-b0_DuVkxA7kN7vdt&|_d+NZE?o+aa zgE(6bD?Cid9y~d^pb+i#e@P-SC4-erKz0mz6QN`C?;`)L9@pqKsKOuDtUU5ZEAq z$N`n#MD}4?5iJ^%^<(NKi$-351<{cNx|Pd4qR_uoDiN!^kI~IVC-!YbE~s6%YWQRB zViDMccJZPPjlVnx2E`xdYlDA0F=b$XgK;j-P5@(4s3rcG7BA@{!2b|Wu)LcDmCs!D zq7INFIDMRe2N3K0Fy33TTf21$`DZJJ?$r4&jMei7oL3lX!xw7P0{7n#V}R2IU4QBM z%O@<9Z|;+Wn00x*eF%Au`IT$7<>mS8&;e}jRlCizUoZL)5{hxRf7vxDo;-qUK|DHy z+(Dn5f&O7=%}WNOkGoKub01r5TY+TG7#~I!C!zHQM`nHGA*$ULfr~ z=G{blj|H{&x88Hm-fw{ylF1`H2TvpFc=C2{e?)wqcdHZehq%KtWl;Qi0DW_M+T*Y@ zrP66^u+hiOYksHxqE6eEfWM{qXTCF<_@D#R2E2nZD=nr0zdv%_hKic`m$swH+`r6v z55o=G1R1*%o%rpJ#Q5p;jGv`Nhnlp8zxnv7VN7Y)E3;2t{-t$n z@O;MyjkCWV_`bAlrM$QWiW$rO{!+aEpT+%%-^6`Boaw1?|F7BqcVR5gV9P}&_JaEV Ma>+IG+{*I*2K1*JfdBvi literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.vbproj new file mode 100644 index 0000000..eb74a90 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-10/Listing2-10.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-10/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-10/Test.vb new file mode 100644 index 0000000..f8167fa --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-10/Test.vb @@ -0,0 +1,75 @@ +Option Strict On + +Module CatTester + + Sub Main() + + 'NormalCat + Dim objNormalCat As New Cat() + With objNormalCat + Console.WriteLine("NormalCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'LameCat + Dim objLameCat As New LameCat() + With objLameCat + Console.WriteLine("LameCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine("Equal of a cat? " + .Equals(New Cat()).ToString) + Console.WriteLine() + End With + + 'UglyCat + Dim objUglyCat As New Cat() + objUglyCat = New LameCat() + With objUglyCat + Console.WriteLine("UglyCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine("Equal of a cat? " + .Equals(New Cat()).ToString) + Console.WriteLine() + End With + + Console.ReadLine() + End Sub + +End Module + +Class Cat + + Overridable Function Feet() As Int16 + Return 4 + End Function + + Overridable Function Legs() As Int16 + Return Me.Feet + End Function + +End Class + +Class LameCat : Inherits Cat + + Overrides Function Feet() As Int16 + Return 3 + End Function + + Overrides Function Legs() As Int16 + Return Me.Feet + End Function + + 'This overload doesn't work for a subtle reason + ' Overloads Function Equals(ByVal AnyCat As Cat) As Boolean + ' Return True + ' End Function + + 'This overload works + Overloads Overrides Function Equals(ByVal Obj As Object) As Boolean + If Object.ReferenceEquals(Obj.GetType, New Cat().GetType) Then + Return True + Else + Return MyBase.Equals(Obj) + End If + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter02/Listing2-11/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-11/AssemblyInfo.vb new file mode 100644 index 0000000..6b2d11e --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-11/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.sln b/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.sln new file mode 100644 index 0000000..2180440 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-11", "Listing2-11.vbproj", "{0A591B27-8004-4912-A3B5-30B98AB99CBD}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Debug.ActiveCfg = Debug|.NET + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Debug.Build.0 = Debug|.NET + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Release.ActiveCfg = Release|.NET + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.sln.old new file mode 100644 index 0000000..8172cdc --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-11", "Listing2-11.vbproj", "{0A591B27-8004-4912-A3B5-30B98AB99CBD}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Debug.ActiveCfg = Debug|.NET + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Debug.Build.0 = Debug|.NET + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Release.ActiveCfg = Release|.NET + {0A591B27-8004-4912-A3B5-30B98AB99CBD}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.suo b/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.suo new file mode 100644 index 0000000000000000000000000000000000000000..8ff43c763834e837cf6ed15d1838b668527cd025 GIT binary patch literal 7680 zcmeHLO>7%g5FRIiCZ$PRXhSKqETKgOwNcZwYTC3#v7ORDoR%ad3G&6UH;z-s8`Fu_`bLMy#84`>okBO@~rW` zeSb4=-pn`i_V%sKKV1J{`;SsqPDrCHEVjtqMePC9NvdoTX+VYV3yX`3cB2TYYh@K_ z;4jG9v;UTy1TiZTl?Hh(TAJ!J`tBoSc(EN#U87v-me5g>KK)S`dA^q#-~YqP@Y`NyGtN=epYei3Rk3?w9=t0fljT z{8qHJgYE}y13duR4tfyu5NHR8V;{!T06hZg06hv~`)=pSx>wPBy!zJK>es+;A)fH^ z3*C5Q*u0R6n?}gWt?aCt-cs_mK4i_#Ss62vSDme6sZ7GUm~)3Wof?e{a~djtXGymWm8=(oSy)NTgQ`bf8jc)7)SE$2_vH6g<} zoQef)FecWDL3^-&o(u|8K2IwH6M(XI{uaK z|D@V;qQsJGEvETXpMLq1_ZyDkmh+Eb@3Yu9^N=w|7E2ffy~|!_|BOq1`7>6JI?GYt zw)bU}pK||cWqWo!okR3XA>@{$3J>FQ7*Ed5D@1$cU*bqiNn-zIYAqBQW+LeK7+6ODiv9l#VIu zJP!oc2q1D?<;NnuSXjhitytUvYxw?4@Qwt~t(5O+h5p4{iCCp$v}`syacnbULH)AT z!XJGX3qvQ=i&yCc{t!D9`1!=Y`!HVPA2X&j^sh0_#@Q)gOcJfcAKl}{T?F`F;O!Ux z7^|Ll9ON{zj~Q41v921%dvms1cVhqC5ADz||D70n%87p=?4CE^oWf8OwosoGxc>@m zn0GP1{EPFiDsG`{vsX@F)s?mOVZ=GcSMJ%A7Yos$6WAP7r_J0ih%tl&*YA$4xFl}o z;a>{gg!>RXXpo4=30+VN5Udq=;D&;N00hf1=&c@mOu zROrv=0?!%@K5=z>V?N{F-uMkj-`;XK@ygp9Ew%jimR7T9ALX|<$KfGtv2w<5(WX$S z?_Tc>Qr{EaUDWr4Uwwb;y$1FDI%rvi`U`sMZ`sYC*a{`~rrH-FwbF?6-_ zM)UPwj(_j={6A_skKjFM4yenUmwo$Z#OHmdcH#F|#vR@%{Kg;JYt~uzEc}FAi3=u3 z%VXy?x!TOp+u`shZGR + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-11/Listing2-11.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-11/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-11/Test.vb new file mode 100644 index 0000000..59ebfd6 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-11/Test.vb @@ -0,0 +1,46 @@ +Option Strict On + +Class Animal + + Public Shared Sub Main() + + Dim objMan As New Man() + Dim objFeline As New Feline(), objCat As New Cat() + + Console.WriteLine(objMan.ClassName("This Man")) + Console.WriteLine(objFeline.ClassName("This Feline")) + Console.WriteLine(objCat.ClassName("This Cat")) + + Console.ReadLine() + + End Sub + + Protected Overridable Function ClassName(ByVal CallingType As String) As String + Return CallingType + " appears to be an Animal" + End Function + +End Class + +Class Man : Inherits Animal + + Protected Overrides Function ClassName(ByVal CallingType As String) As String + Return CallingType + " appears to be a Man" + End Function + +End Class + +Class Feline : Inherits Animal + + Protected Overridable Shadows Function ClassName(ByVal CallingType As String) As String + Return CallingType + " appears to be a Feline" + End Function + +End Class + +Class Cat : Inherits Feline + + Protected Overrides Function ClassName(ByVal CallingType As String) As String + Return CallingType + " appears to be a Cat" + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-12/AssemblyInfo.vb new file mode 100644 index 0000000..0b31830 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.sln b/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.sln new file mode 100644 index 0000000..1e00981 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-12", "Listing2-12.vbproj", "{F7816CB3-4B61-46D1-9241-1846A926DF73}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Debug.ActiveCfg = Debug|.NET + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Debug.Build.0 = Debug|.NET + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Release.ActiveCfg = Release|.NET + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.sln.old new file mode 100644 index 0000000..0e6cd83 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-12", "Listing2-12.vbproj", "{F7816CB3-4B61-46D1-9241-1846A926DF73}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Debug.ActiveCfg = Debug|.NET + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Debug.Build.0 = Debug|.NET + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Release.ActiveCfg = Release|.NET + {F7816CB3-4B61-46D1-9241-1846A926DF73}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.suo b/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.suo new file mode 100644 index 0000000000000000000000000000000000000000..40922708f51fc87080df0f0286e32ae8d46181cb GIT binary patch literal 7680 zcmeHLUu;uV82`FW*(Mu9*i;0(A{aEVY(QZAHCsD$N&&}ko2d_7dshl=@6wikQ4>jg zFuw6(#*^%U#HcahO-a-k5)<_SUW_r3M4t4)M19g1slVU3_q4t3ZFf7S2D7jEde1%Q zJLmh(cfNn;-n_B$$GNL(Zc7CmkY>44Xp{TP`U7Ya6?BO-p~3e%g+jsZ6hU(d?ja5Q z1zB61Gvry{2W$l{1GWK|1KWWQ0C~w#tvy+MNlj7d~-a!L+K63@IG$G-_Fbbrn!tNFiCngWbNv{%Ye zldxidHcl7;Cu$%iQ}{n8#}xN7kS2!K{9u58C&*R+{qkqb{K#2)L|y{Vu!Q6&c5TUw z;-AMU45|0Cjy@dns>joa!t`JIs$c%)@tSSwk7vR*k#Rt`xvutqo-h5M`{g)NK#@+< zccZTd_z>`6;3L2_z(;{=f$M;zeGE?n_&9I_@ChLMH#twXy+HHv8e8gXTm!!adBO_^ zy77vTc_tY%ji8muXRVZS*_Kc=ALX*`6X8R~vDgVStzJ7q$!N+-7{l>o-pZ1oD{M_A zQ>HO)P8kQSY+6lkbG@|(t@MnQF*A8J*fE~W#I3Wr5_!vWW8p(wtTUKO&P-X+Y}^=4 zW)kdL_No_v1FU{ z;kO+WK{1FU6k_WXM6j1o%=Ke~}RJC%|~2 zEzes@cQ1Wd_mJxpG?T!OT*sl0JoI-$Nu#N1KM{Y6yeUI%%F+nqw)#Ypj_X{D+Z)Xg#zE+DfJ_cabN-pS+pR_;i-7`(Uor`LA;S z2i2bAE=#VrnC4G?`sGjF?>L5A$v=#}r?GF=A>)oLmM{x?!xm@%%u9axGgpr}%TeF9 z_hpoya{no1dv-oPiFOPWL3I|SbX&w8hd+4}yrp#auEZ;CkPyPUG1!0FS-E`AM=?f^ ztY-;*4u9rozx*ErEp4D2nEx|CJC50VPv8`ykj#*hRwAfXSR1ic$pNP!o#BdfhAY+? z(kq8iTaKxC7?WLia&{h1kvIP(j*KZO>|`3eBaoXBI#PW9ujR0%qdpb}tlui(Zu%G|4&=;46=-$*W5tw${&kGA ze|i1I>e9n4lx^;n16Xx&t$h@Ej`@{)Hs!TqcIZWH9#W^x+HVLn3<)K_+qdYFlqwJZ zQZUO7B6rXx&p`elq)sR~Ta^Wr*4zu<_M<=gPUqocKYaG<^6=Z6WecYU+|Ai29yf1btt`I<gm)**>uh&tdm2v#NYNx=MTbGHBe z@MoQ-@85dABhbS%IP)ADfu05M-vS1#7YL<{Wq*Gu-T%+ye#CF$H9nl#)A{|O;r(yL UT-IQV1&!)|vH0qB?q&Xe0}byZXaE2J literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.vbproj new file mode 100644 index 0000000..12432a8 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12/Listing2-12.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-12/Test.vb new file mode 100644 index 0000000..900e2ae --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12/Test.vb @@ -0,0 +1,32 @@ +Option Strict On + +Class Test + + Shared Sub Main() + Dim objDerived As New Derived() + Console.WriteLine(objDerived.ClassName()) + Console.WriteLine(objDerived.BaseName()) + Console.ReadLine() + End Sub + +End Class + +Class Base + + Public Overridable Function ClassName() As String + Return MyClass.ToString + End Function + +End Class + +Class Derived : Inherits Base + + Public Overrides Function ClassName() As String + Return MyClass.ToString + End Function + + Public Function BaseName() As String + Return MyBase.ClassName() + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/AssemblyInfo.vb new file mode 100644 index 0000000..0dcf904 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln new file mode 100644 index 0000000..b500c2a --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-12Stackframe", "Listing2-12Stackframe.vbproj", "{1CFE5D0F-986E-4E1C-A72A-A210B05D289F}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Debug.ActiveCfg = Debug|.NET + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Debug.Build.0 = Debug|.NET + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Release.ActiveCfg = Release|.NET + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln.old new file mode 100644 index 0000000..1b14374 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-12Stackframe", "Listing2-12Stackframe.vbproj", "{1CFE5D0F-986E-4E1C-A72A-A210B05D289F}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Debug.ActiveCfg = Debug|.NET + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Debug.Build.0 = Debug|.NET + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Release.ActiveCfg = Release|.NET + {1CFE5D0F-986E-4E1C-A72A-A210B05D289F}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.suo b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.suo new file mode 100644 index 0000000000000000000000000000000000000000..bab59dcd7224627d433b7999ce7a0c88ad9f90b3 GIT binary patch literal 7680 zcmeHLO>9(E6h6~dDF_8reni1176e0UDJoEYOqpr5$^f>77Sqji=5;#l>%3-Wpe5?U z#2DkwjVUYXf@sv37&n4Z7bYgS0TYce(L`3dFi}_PLhAS3_wM|@d3{ss4@vLKc|Z4_ zd(XM|p7Wi1-nFZ1zn^_?({(8;hoxR_%q^E&i|RvoC#kYVqz*6qzA-m9=TwT|b*bD$ zEAS_DZE*LHdwmP25wr}n9JCU&0(2XQ`@G71-b7PeQq^Y#dd0?-6GOTrjb}#AVTXg4 z^{^N{JZ;3UTzF$c^F-69p?WgWuu%FXCRrJmqmsfiCns??p@pu`I&4+%%~BU44$)qz zM^(nM2HH4F4`V*E*w$cQ|@}W>=lm(fx`4(`f5=5#dytkt{?Y=?MEA`49r~ zeRSV-s9O)(0NMz;3$zJzH|QSFW)OMr#nS-Y2igj{AJhzD+jcx3aNqe|UbHN)wsPL3 zZ~qneCCnXOc%jd)j+kdtanlIf>0HLPl*=|mV!0THT`?FvYV^fN%?b6nDw2v>cGBod zq;htK3~QqHaLO``0dv^swlfo|`|^^n6=8c~(oUP{oN8P(kV+@)sceD0;fem}Q4ZD= zwo;SBb}W-HdQ<5ntCl@(rp-*u;(KKYRaVth!~WBtuyn`}JlU2r@LOWX5Imchb_NJ% zp(Tg61Zr$)mo{8`z!8>Fv`(UpnAe7up*#|%fX7MHw8(DU**}JH$7KYZF_};jiq2y- zX+N`78oO=@=Wi+7bK>zB-s9j1tGys+sYP_S@+q6e zTg%egwfLkBvP3X$9QIFt=E%i!K7lrRq@N|UK|bR$V{}mYw}Y29P+S=Q(;x@OoVh2l z3q%^DXjO)AR^i!*XO%2y1lk!TNN1E_oq?0YF`O;?6&}WAFP`k3!_)DCe?uZM#llQR zAbSXU6QPIl-~Y89j&@v+g%zIP%FExWD}KlY^mW5f;PJt@=k0I=c}l_sc$c6voyf597}E7U_h^wd2mWcGR`u zVBIEpTMl)(9YSNS%*G4q#vrS2RR$m<5Z5%Fn|)5#AYAw`8Yw3+B)H&<=yj z-vVA8|H7C(GvKVkP!qOLn-<7_g*MDwEU5hA^H&wOP_}tM4rA2Cwf0`bImTDc*_7w< z(V-RCd_?Uw&wfY1Lr5t2-N8lIq;T>Gt_7oPCt?R}@+|ZZLu)1(^gdcZVax;Y?I7z% z-)TD5_wC0&uZ+I3ZRV4@*Vp~7jz*a)Pj>E{8GGu@uP?mNd*g$*LX^$STK_32vuYpXT3qwx=KiEO&=-LwZySDJCFRAwLGjj2!qaNr#F z&hPSMtde_9;#9sk1ruZ%m)DT2nIZQy;$9rh&boKorfCP?e!oNKcF!qK|b zl~36$^L7A3as1Q&nKdL4hPVd&2fSzRI+C4x5cxa6r1Nh*-yW>P2qbeKYANd% zAio6ycwS&BL@ek3OCkS1hx~~D#H;)`bGq~YL(TJl2z_}5TdY#+`Y)DTJ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Listing2-12Stackframe.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Test.vb new file mode 100644 index 0000000..3bc515a --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-12Stackframe/Test.vb @@ -0,0 +1,37 @@ +Class Test + + Public Shared Sub Main() + Dim objDerived As New Derived(), objBase As New Base() + Console.WriteLine(objDerived.ClassName()) + Console.WriteLine(objDerived.BaseName()) + Console.ReadLine() + End Sub + + Public Shared Function ImmediateClassName() As String + Dim objStackFrame As New Diagnostics.StackFrame(1) + Return objStackFrame.GetMethod.DeclaringType.FullName + End Function + +End Class + +Class Base + + Public Overridable Function ClassName() As String + 'Return MyClass.ToString + Return Test.ImmediateClassName + End Function + +End Class + +Class Derived : Inherits Base + + Public Overrides Function ClassName() As String + 'Return MyClass.ToString + Return Test.ImmediateClassName + End Function + + Public Function BaseName() As String + Return MyBase.ClassName() + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter02/Listing2-18/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-18/AssemblyInfo.vb new file mode 100644 index 0000000..7a043b5 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-18/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.sln b/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.sln new file mode 100644 index 0000000..955a3c3 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-18", "Listing2-18.vbproj", "{4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Debug.ActiveCfg = Debug|.NET + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Debug.Build.0 = Debug|.NET + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Release.ActiveCfg = Release|.NET + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.sln.old new file mode 100644 index 0000000..8a6e7be --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-18", "Listing2-18.vbproj", "{4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Debug.ActiveCfg = Debug|.NET + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Debug.Build.0 = Debug|.NET + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Release.ActiveCfg = Release|.NET + {4EC7FFD5-79F6-41A4-88B1-D34DDDB520D5}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.suo b/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.suo new file mode 100644 index 0000000000000000000000000000000000000000..6efa9a4675e1dcde0e961dd9a43b3991ead9aede GIT binary patch literal 7680 zcmeHLO>7%Q6n^=ECZS0iXhJDawiQ1C(I|yLOG68Zoj_=umLw$s`Qq3c$LZQ@*-kNWh^I0xspo1tj1C2P8OhA?EvLcf9t-cGgJ%74lZIGdufs z-p{=G-pqb;t^0?yj}HAPJ~|^UvR-VL8_W8e&}LDzU!)lgKCc&xMW<5)&0V^VJn$!U zZFT36bA1C!8_FJ(c9fe?I#4=M_M&jES$65a;ejc!aTUanQOTgr$tBEkaOy?GXiqR! z>d_lN9kJ3~SDRYE^dy4{G$S#|%SD-x6zYOpz}@8* z7$=QG5bw35C8ZQ^KcP6p(6fo&g3Q2E5n58a{1f4J-$st16=T)$kaLFJd@HQV$b=R~h<;(%^*Tuv3|mg}E5KzsQfDWJrs`FqgU zi*hT-TQrqyF-I2E((q%oRE73>@t_DAgblw}&T=Daax=hEu) z_KK&Dke$xj88cH*FFR*bnS{NX_t;yXo{3Cwu&$7m%Ff%dT*8=2Ws>aL^OTt}b1{qU zjl{LM9pd*1l#rZ~C|0s9%UHL>jwn_(F>M(LXW>l&tps{(c}NCuJq(VJEaGhz?}&K= zcoQulVG4MhM9(ofE+^4nowlpLhd*KHkcWOr$fY*HkP!IOM7+=uSzXJ@Uao81L#gxd zOcEER&cYuB_-|2Zqq%C=z~7Q=>QI~0dqccD;6D206Ln4Ka1pa&!yC+r^>R=j?B^Ub zVn6p-*&6akk%JgLj0wg{rml36dm*2)na^0e!`7{sD|PU2I_%tWFQQ_A@U9mCsx~;|@oEJF73F)+z0`RO~tVcnR$| zI6`VJ$XOW?r(F4zO{%VCWp6hg8H1!S#*HKX)9%RSHlN2kuE=_kFaY_?%goV1<=+fm z#y~kS|7TDf9CK_>Visc1%n;8jQS4Q?H{xC;kFo&mj0&VPDzMIwewoDHaz^1{Tuz|o z*9C=Wul++3i76H=S%B;)^d>?_OV1+zt{#qdwGh61ma4b8fAiCJ`ut=4ozKKVP(s}g z%Ga%C3qrYA>}!^miSE+hhfjaLvic>S=i1oUEC-ril0k%3NPRzsW%LLV#}Xod zSXT?a$E@g*)VDpHYZSMU>z(Yvz*4^Vfu8Ftv2(AUQ>@ac%V{!%h zhoChN8C-pg0B_78tnDEFV;FW#PJj2=Z+j!J-*fr%=68DjP+OziSI-RJe|hQbd*8nM z>eTwj@2g!VPt^KPN#*%KhW%sjuiC z|LH|p1^p}iH+PLb<$l!fKh?eIjiWZ~syDr1Y5z!7`?qGDH*&C+wm%s6My@Z`p7`XK zp64gu?*E`|?bp-aZ{(=oqw@&&!C9<2?!2AT9}%DX-TK7;Z^Rw$DTCsV0bX_VM|}Zt zLa8xCp^2jPaq?QNT|Yi_>8LB8vPrtXUR{oV`ah#yRnv%R`haIpW~I$EApSa%oqIjG z`rT19^!ZEMI}SfAKr-i{5$fH7{QDq)`GVvjmUI60&VQG%KjuHt8b3~)&w2iA*#16z a%N)E@)TsY=O0FK~|1MwqVYj~iJn$EVh5IM~ literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.vbproj new file mode 100644 index 0000000..90e16b6 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-18/Listing2-18.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-18/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-18/Test.vb new file mode 100644 index 0000000..b50b6ca --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-18/Test.vb @@ -0,0 +1,32 @@ +Option Strict Off + +Module Test + + Sub Main() + + Console.WriteLine("Developer sees: " & WhatDeveloperSees.ToString) + Console.WriteLine("Compiler says: " & WhatCompilerSees.ToString) + Console.ReadLine() + + End Sub + + Function WhatDeveloperWrites() As Integer + Dim A As Integer = 0, B As Integer = 1, C As Integer = 2 + A = B = C + Return A + End Function + + Function WhatDeveloperSees() As Integer + Dim A As Integer = 0, B As Integer = 1, C As Integer = 2 + B = C + A = B + Return A + End Function + + Function WhatCompilerSees() As Integer + Dim A As Integer = 0, B As Integer = 1, C As Integer = 2 + A = CInt(CBool(B = C)) + Return A + End Function + +End Module diff --git a/Source/VisualStudio2003/Chapter02/Listing2-2/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-2/AssemblyInfo.vb new file mode 100644 index 0000000..ed6a10b --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-2/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.sln b/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.sln new file mode 100644 index 0000000..a70f9d4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-2", "Listing2-2.vbproj", "{19A44278-676F-492D-8EB2-7C47C9EEDDDE}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Debug.ActiveCfg = Debug|.NET + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Debug.Build.0 = Debug|.NET + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Release.ActiveCfg = Release|.NET + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.sln.old new file mode 100644 index 0000000..d8a367b --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-2", "Listing2-2.vbproj", "{19A44278-676F-492D-8EB2-7C47C9EEDDDE}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Debug.ActiveCfg = Debug|.NET + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Debug.Build.0 = Debug|.NET + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Release.ActiveCfg = Release|.NET + {19A44278-676F-492D-8EB2-7C47C9EEDDDE}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.suo b/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.suo new file mode 100644 index 0000000000000000000000000000000000000000..d8e403bc13ef5758454422bc26aa2337849d22a6 GIT binary patch literal 7680 zcmeHLO>7%Q6n;(uO+u5lKtd_BEEPWiktl?yr421j>=XiVT9T9mlmq_RI8HZS%XShf z;DE%5D-tRv$N{MW35gp*f*z0%a49z~Ai)U^NO0sr%=gXi#Otls**F1I$g{>XJ2N}) z&71eW_h!GncHqagj}QGMJ~}PUvR-bJn?3yzv{@AG7imI+&+FxK+36HPbC+%)4g3jN zTii3`S>J@xin0f#4doV;c9ag3y(m0umReFRDJF!oQrnu6we`@MM0HgTM1qJ5hqPE^xyBxSh;erZHnCjk9)PNxj}y z_0%4I`W#-I6!eaY+ zqAzZT_BsLe%!tYYM)MdW=JjJ_ zZUYIkz~c;hdR1?bjN6sJf7di&|u`k7pl&`btD za-D%bO3>eel19%8u8F_5VVD>emOtav?e3C({zP39GF-%|*w6-JqB1&nzQ5`L|9$8r zZ<2q!)-!XgoIBv>KZ+Pc>!D51R&sT@i#*`QAI7t={F&S7_~++;R_!@mWy!9nH7m`Z z`V7mTyx(>W*UvwWy)R+k%tK~eS!`hxtWA$#|BPLXOJVu*yr$jdsBg#na>`G+e@oe( z6OR|sPGLq=odsuBTg1r*;xBUroh!w#ZVL9lWd#gr3`Y{BVwPQw$tZd>+gIf7J}01|Db%+Vm8B+ z%jKRXX&yhk@%7=epWk2o3eU5x>_f^Qc|{(T6EdvcAAngsjzD<~^)VQ0uMA>r07-Q( z`bUvUGmIXGaSy8h6X+YoD1P+CIQ-92UdAY$P}aE&1l9;3a!TdLB12d}#AS{4AQovil>R!gG7hMNAhwNh!7C@{E!uaa9 ztDlZE!2bxA7;~42V)wiO7Zrw@u!XHjf%|WSKEQAqcK_b|E5I$3Z4Sw4th%$-K8ZNT z_{u$-^6Ex(=mR#7sMBWdH-b5Ygo@uivE!0dGLP_5Fv<=icF-nQAb%86^O8aD<0(|u z9D;9$(I3sQb7JcI&wtw+fAjv!SDW7L`h#aFg|D9(e(3Vzvsb=*@Ab*`PdcbB~YJ0aHu{M|&+@;GrV zDC>7$Ms>6S{Pp6W{?4eqY6><@9qkmdf2URJPrH>r$6~c literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.vbproj new file mode 100644 index 0000000..1c3fe7e --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.vbproj.user new file mode 100644 index 0000000..9715303 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-2/Listing2-2.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-2/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-2/Test.vb new file mode 100644 index 0000000..642f4fb --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-2/Test.vb @@ -0,0 +1,35 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + Dim objMyTest As New Derived() + With objMyTest + .WriteLine(10) + .WriteLine(10.5) + .WriteLine("11") + End With + Console.ReadLine() + End Sub + +End Class + +Class Base + + Public Sub WriteLine(ByVal AnyString As String) + Console.WriteLine(AnyString + " called Base:String") + End Sub + + Public Sub WriteLine(ByVal AnyInteger As Integer) + Console.WriteLine(AnyInteger.ToString + " called Base:Integer") + End Sub + +End Class + +Class Derived : Inherits Base + + Public Overloads Sub WriteLine(ByVal AnyDouble As Double) + Console.WriteLine(AnyDouble.ToString + " called Derived:Double") + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter02/Listing2-21/App.ico b/Source/VisualStudio2003/Chapter02/Listing2-21/App.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-21/AssemblyInfo.cs b/Source/VisualStudio2003/Chapter02/Listing2-21/AssemblyInfo.cs new file mode 100644 index 0000000..9f89a32 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-21/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.csproj b/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.csproj new file mode 100644 index 0000000..c32a65b --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.csproj @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.csproj.user b/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.csproj.user new file mode 100644 index 0000000..cddade4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.csproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.sln b/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.sln new file mode 100644 index 0000000..8508a4e --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Listing2-21", "Listing2-21.csproj", "{4A3E4205-AC32-4528-BAA8-9A29F869DB90}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Debug.ActiveCfg = Debug|.NET + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Debug.Build.0 = Debug|.NET + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Release.ActiveCfg = Release|.NET + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.sln.old new file mode 100644 index 0000000..3f6c9f3 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Listing2-21", "Listing2-21.csproj", "{4A3E4205-AC32-4528-BAA8-9A29F869DB90}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Debug.ActiveCfg = Debug|.NET + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Debug.Build.0 = Debug|.NET + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Release.ActiveCfg = Release|.NET + {4A3E4205-AC32-4528-BAA8-9A29F869DB90}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.suo b/Source/VisualStudio2003/Chapter02/Listing2-21/Listing2-21.suo new file mode 100644 index 0000000000000000000000000000000000000000..83095e3d3295b6f92286114384f94bfb6c5829c2 GIT binary patch literal 7680 zcmeHLO-x)>6g~sk0v6h8!P?sTBxtt76yARJSiuQ?A;eqcftE;PaqX-^%=oZqz z-;lM&IYXZH9VoRZyHV;;?nJ3a*@M!6!n0=Cq1!_PV`AZ#6+?z3i8?J8amwDQ85W~8 zK|3i&pYKXsN;ZDstHz+0oxu|ll8l^}5s9JB$~pX-kV3a-$}Nb#2Z2I>B4w|XV}s#q z-L!GiFgQ^IahbvY1sPY|7a>g;PaBgVRX+0FkD*@q6Ei<>mL8Vp!80fUIg4Fel2ZJ$ zIE6v=zU1hmlq8Q}|KzKw)VTcie7xo}ahzwOeVaI-pNRoHD&l~~fJUdEde`H0-GsJg zlzUJPqTGve2<0%!eJDpzIQD+0e!!{OR*dwz#rk&IwyuHS{XF5#6YXMez+8-lO~Y>` zvuP`?T(%|<%7(aX{Zw$o7!S{x3H90#h=t--)EJ7yvR0Y{_64n(Sll!w%^Bmgl}@PX zbp>zrek+l(l4dfiIvXZq$%wU-$qlc0dLlT&#TxzbSZc-!r6a~zEE#3f?x)P8nGVJI zyq@TbTOrPmp!lUvrs2t!EWmGx9nioo+4%s`X%%L}hK4M-6 zdZyQqFa|u1qNNSxINFQTR^`v(PXIDxAYT-GDUCNI1pfGl7qlW;V{s`9Tj|rfg*m{I7_a%oS*ZqyW|p!~PS_%K3Xfi#~c}IZNnp z&fn(ljsIQXOB={1>M)67tVR-^IXJ-|nz4{+9u!}|5pxMx>5+Ae@exliG6O`N}GGF zfAgJK2#ToxgYtEaS&ejab+xrhs!#MV!&LOi&+jZR#(SsqpluMX1L~<4b*J>gn0w@L)B*JM(iem9zqs-;M(L2U&IKT_MgWnM zDnAzK2U8J;HLSWD3vQYQQ9JO5SjIfiEB-NFa}J3aQylu&7-!?`EHEaDR^pHDvB$grf&XjR>y{xM;~A~^}7H3{HqO) zP{b{iZT8D4th&9{K885Q_{u$-^3qy#Xa_bAs?%ofH;6HWgq+`<*mg;BnTK~NcoQB# z?4V69LViD_<|TvP$5Y6y*^d+UqCdvno7exCdadQ-q4)c~2`~S7;YdFZlb2`xQKaxH zAo5+~==k@a{&HZgS~h{d`S_>5Gip~GhfPxlyn`|-Z6pD| zKXTuiv|Q!t7If^Z)<= literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-21/Test.cs b/Source/VisualStudio2003/Chapter02/Listing2-21/Test.cs new file mode 100644 index 0000000..59f688d --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-21/Test.cs @@ -0,0 +1,10 @@ +class Test + { + public static void Main() + { + int A = 0; int B = 1; int C = 2; + A = B = C; + System.Console.WriteLine("Developer and compiler both see: " + A); + System.Console.ReadLine(); + } + } diff --git a/Source/VisualStudio2003/Chapter02/Listing2-21/obj/Debug/Listing2-21.exe.incr b/Source/VisualStudio2003/Chapter02/Listing2-21/obj/Debug/Listing2-21.exe.incr new file mode 100644 index 0000000000000000000000000000000000000000..5e284578c4b07010f7347f54bac8889f7faecad3 GIT binary patch literal 1164 zcmcgqJx?1!5PdcQ1f+-}rC*5x3CRvN0ureFg=ORfDRvYJirm?E_~6cG-7Q}oH8trY z(eMlCk&7h!13Hu@6$MI>B8rqZYa@ab8U*a=-R#cJ?!0|7m3AX?0;jDlU*$JFzp09r zwv-!2sxYn!VbJk>CsL`D(k(AmE>|knVdTWBDS>XZ zfC}F7t8@Ma9vX-cA|_mDq`6ZvdyDj22;g9wdl5Dmzl97Vrif|G(az9U!!A#2#s%~@ z;q#M`kYD!f`xmk}G7B*OMDs_3)g_BE3->=#eFiO;Y8SYrFKNI#m6y4I)0)0^yq2J5`aPHIuz zj;VUYKFHEn<;~Iu9@SlSjR3bxQs5bpK9P!X3|s1|sevLTx^-iWM)H+9 z=X8NS#wv~QJjB|o&99@G^J?NXgb!kly^%*Veb=18?;meI9O`1({2Q6z qbPnteS$@lF0dhLyZLn8B+W6rW?Xq6wRq$LjI4WC`iq4DS&+-Mzol`mh literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-23/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-23/AssemblyInfo.vb new file mode 100644 index 0000000..92cb0fe --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-23/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.sln b/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.sln new file mode 100644 index 0000000..642ce4d --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-23", "Listing2-23.vbproj", "{A32A373F-CB08-48F6-80B2-5C6C0671BB58}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Debug.ActiveCfg = Debug|.NET + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Debug.Build.0 = Debug|.NET + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Release.ActiveCfg = Release|.NET + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.sln.old new file mode 100644 index 0000000..8da8d1a --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-23", "Listing2-23.vbproj", "{A32A373F-CB08-48F6-80B2-5C6C0671BB58}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Debug.ActiveCfg = Debug|.NET + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Debug.Build.0 = Debug|.NET + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Release.ActiveCfg = Release|.NET + {A32A373F-CB08-48F6-80B2-5C6C0671BB58}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.suo b/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.suo new file mode 100644 index 0000000000000000000000000000000000000000..13146f25d6bd022943320687fbdd5815e00c3d6b GIT binary patch literal 7680 zcmeHLO-x)>6g~rJ0Sj%lU|Vf{;!oPf5@>B{psj%!P?Vt+sGwmp%shsn!#pxGKpS<@ z#D#HV+!(40%c6--8J=%(EmH=5|mCYq=#-3Wf)eeW{!hWF?jK${xQ|wtD4+Dh&Mao_& zhws3W4%#@W7o4bpw2a~ZybLPtvydi^+Re$3iV*qkz|f%liJ2cdQ}@bq;2D*OoWZIs znO6Ms*o7|jKIiDePm+UJKly6%8&}+3jMuCa$GIokw}}I~P7L5y5eGB|)I0suyB?>X z4QOjbxff*@%5IcBDEFbH<* zJyv!~eO}{ws|{OI(^kgJbKUJH6gmys|9JWitJ5DLe7(|YAE;7{JRl@Xg#zE+Dc|s?jnym@rUs&D1YX5I{uaN?@?<` zxGdQb)$^hGQ=dWkllPmB;g<4`V(n8{H}jBTM;1#M1-%qxoJ@T+^->LI_lf@ zzKrryu0O48&yL5FsK+rPtoDK<-4@ZlhWN`|LFY;l%o~UOPdPIeulWr6=#i^gLW{Hi zjL|{Ye>cX`28xL~%%IpfX0JVoU5G(4Lke0MMXti!h`CA*WgOBOE~GPDSZ7GH^dq+% zQg|4bHaz)tULo2m{}D%GN*XH}2k%kHO@tm@eiym5a@f-OA$;*JdDn@3rL>;5(z*W4 zcVZzZq5gNtH&tdOOnGT(e}#lj+*rPS`1I#1bC>ZxQq8ss*%^9KIuRBRtMA)T>p`Fl zBWZ4tdj;%&4C||bK@JFA;BG3u- z;ziBCAAL^{6n_}6HU2SUN<;q|<7}KA2gW4PO8n71Ufe~1{|fiWo8&#p-O5|{IwYQM zp=`55PGQ!Kwe|tTImTD6*_4--qeC;Wxl8RfbH6T(AtV(1?!<;mQph}lOTj4HiP%A# zoQ3>hNXke;c3w^ZecpZYB@U`ckC$DA0=b zOZEMO-+%Vo*63@G%zs|-PQzdPK(b#y-FaYs@|kzPyL@qA@#FVGG;zOaj-c;t@6J|i zK6vot;cpww&RU-}2;OmZ`e8m$IQ{SrMW23h(Adh;4|lrs^pjR!QNN|9AGJmZ=BANr z+!K)%+9+G8yUW&J9}%DV?&?JR zA?`4z42nMwVyrs)<9QbQOs+9lk%^+^vE!Ow)?bjRX$|;WjDPx`QM=k8Y?3+Wy_2dub&#?K$t<*pvV%hgEh4cRfoR4@X?sIYG2#xc9+4g@B-!cc= SDAK+c)c!Y$ub$_2=Kl}eV;X$` literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.vbproj new file mode 100644 index 0000000..10f8d03 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-23/Listing2-23.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-23/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-23/Test.vb new file mode 100644 index 0000000..cb46568 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-23/Test.vb @@ -0,0 +1,23 @@ +Option Strict On + +Module BoxingTest + + Sub Main() + Dim MyBoolean As Boolean = False + Dim MyObject As Object = False + + SwitchBoolean(CType(MyBoolean, Boolean)) + Console.WriteLine("MyBoolean = " & MyBoolean.ToString) + + SwitchBoolean(MyObject) + Console.WriteLine("MyObject = " & MyObject.ToString) + + Console.ReadLine() + + End Sub + + Private Sub SwitchBoolean(ByRef TestBoolean As Object) + TestBoolean = True + End Sub + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter02/Listing2-24/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-24/AssemblyInfo.vb new file mode 100644 index 0000000..c10371f --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-24/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.sln b/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.sln new file mode 100644 index 0000000..7a633d7 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-24", "Listing2-24.vbproj", "{9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Debug.ActiveCfg = Debug|.NET + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Debug.Build.0 = Debug|.NET + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Release.ActiveCfg = Release|.NET + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.sln.old new file mode 100644 index 0000000..cfcc213 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-24", "Listing2-24.vbproj", "{9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Debug.ActiveCfg = Debug|.NET + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Debug.Build.0 = Debug|.NET + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Release.ActiveCfg = Release|.NET + {9EB9FD3F-D64A-4AA0-86E3-91D55050FCAB}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.suo b/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.suo new file mode 100644 index 0000000000000000000000000000000000000000..08b20d2d2104d19e7e37256808684a3988852b9c GIT binary patch literal 7680 zcmeHLT}&KR6g~@R0Sj%lV6C=}_>;B~0@hz>YhV|Y%F+r{(Co{yJ1k3=9kRPXiTYqP z(fHVvG`cV{m9!wj7Tw5j1t&di;A z@7#0lx#xc8+_`dj*AGkQ_x>nlbWEycIbSC?7S#t(CM()0QiTHFm-G3&T`7X%7F|ac z_#3*`IBUqYz5!ed-UhA%-vq7)ZwEJkxz^+@`hQqpNGx1AF{D@0cxGe)tLⅇW640 z^rJQD;_+A0jb8++(dlzK6=+1Fl9kgkAW1xPate17TIl+$-OclU4^RkDr2Lh7cy=sn zppTRKA&C}9$vEz3WLQa`gEldgu12+9x?i4w%&>&yBxY^NjFO+j zD)gxLdB+}JnjFIXDOZzMzvB90yk?m=&Nb0{n>e7$!~iZ8aX@20qti~i>wfy#gt}(% zt>8W2+rWFlw}bBh?*p^%op>5fxy5<1-i`FwZf#q28?(S~L9X!niGHyoWX>gHrV+H# zxr~)kTec-Sv)9SS$l#HgVgwY#M=Bx}m>Fm6=wb z*Ok202d(KDD{ZE8szO3sX1(M;SJN~RO6+V+H*HZ#!_ z%d3fdaU;a<TE1z*{w=-n9e4?%i9Zq9aELejvQ8}H{zx;6k z@^_$;vPtFbZtu*oW}Jp{`Mroi^d9;IeI>o7bdmd<_``VSS3Yw)9skPZ_o+F@OFY?8 z)%Bs})1H3iQ}&yVNa>%%8D~xv5|IT(1#lINICZeQC8% zIscUMJv$yxp&Ubxpjr#|EcJ-ab;Muh3OZK`VcZz}f7%(jc+Mx$#vQqqC$u~3&lv4@ z{x_p9eV~|V!!+2&F?;R_tU?r;8B(xH1i1=xBjzeu@C39oN|4Sd!8$|QWDvRKh{D5| zJc1{`&M8EDU zadqD#U)7k^aOHgdK$TP<`Fh1mKmF<4{8_w@)v~Tib_br9$KX~y>iZCaX&(Y*NFGM0 z>_&lTd+|3&PMIMA(B?g@qd#Zrk_rG2z+Haf9yEn-3Cx~+vj`YaZLO=uT4 zY6Jf0{{(*Vhw)nDA2X&D?5{D-#@PvAOaisUAKl_6T?F{AaF4P{?!8KD8LOUiHpmHN zA5-uEVx1SpmwsLPwtpS+_hX2UoMD2PJx{<{g`p;Vp)xIS{ta*sFr50Ge{ufhu`QHu zcF8e}y1CvyggD3e$~l|z!b)^#12*@l)n@M3gFb|W!oEAQ>6#QW5C2*)%621m&?o1h ze-K(Hl%BQf&sky2F6?bT_G8?=a^d%}*IGX5{h;%k*y0~&_H}VFd3e@8MT(CC9jJe! zad7y%&wkw=e*NCXi&gJ5{mBm`bLn{Z!NsYk-u?FMOGC>azo+sduVD`3gY#aE1i81} z8#@4~BA2jk_FSJf2;MPu`e8m$IQ{S+iaz~hVX@VxAFg!y=_jSWqJ7IxKWdJUT}oq@ zxh5j3tWmL17b>=2ox6#6ToZZOz0tPcUrJ}*Xulp;`)!7GR>XJ~bR1zGJcC`w%-cTw z5%HPtu1&-r;tq34zxZ<(`l_Qpo~N+Rlp2K>nP9Dt9oM|F{(?>|>%iY){L}v#^;R2( zPtpcFgEA^zO#}Xare?bJND;4IqKl&+k@!De|IFk zf9$u)?_VxGe&Oe)X9wSEd%t$+m!scTKEl=)*U|!oh-LqODV+Zoa6aNcagQHoj?y^) bSM2|X@GWz&%_6<`{QCc9$<^ar&+`8P+gKqv literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.vbproj new file mode 100644 index 0000000..c4d421a --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-24/Listing2-24.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-24/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-24/Test.vb new file mode 100644 index 0000000..ed87459 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-24/Test.vb @@ -0,0 +1,107 @@ +Option Strict On + +Module Test + + Sub Main() + Dim intTest As Integer, dblTest As Double + Dim intZero As Integer = 0, blnExceptionThrown As Boolean = False + + 'First test + Console.WriteLine("Integer division by zero assigned to integer:") + blnExceptionThrown = False + Try + intTest = 5 \ intZero + Catch objException As Exception + Console.WriteLine(objException.Message) + blnExceptionThrown = True + Finally + If blnExceptionThrown = True Then + Console.WriteLine("Result: not available") + Else + Console.WriteLine("No exception was thrown") + Console.WriteLine("Result: " + intTest.ToString) + End If + Console.WriteLine() + End Try + + 'Second test + Console.WriteLine("Integer division by zero assigned to double:") + blnExceptionThrown = False + Try + dblTest = 5 \ intZero + Catch objException As Exception + Console.WriteLine(objException.Message) + blnExceptionThrown = True + Finally + If blnExceptionThrown = True Then + Console.WriteLine("Result: not available") + Else + Console.WriteLine("No exception was thrown") + Console.WriteLine("Result: " + dblTest.ToString) + End If + Console.WriteLine() + End Try + + 'Third test + Console.WriteLine("Float division by zero assigned to integer:") + blnExceptionThrown = False + Try + intTest = CInt(5 / intZero) + Catch objException As Exception + Console.WriteLine(objException.Message) + blnExceptionThrown = True + Finally + If blnExceptionThrown = True Then + Console.WriteLine("Result: not available") + Else + Console.WriteLine("No exception was thrown") + Console.WriteLine("Result: " + intTest.ToString) + End If + Console.WriteLine() + End Try + + 'Fourth test + Console.WriteLine("Float division by zero assigned to double:") + blnExceptionThrown = False + Try + dblTest = 5 / intZero + Catch objException As Exception + Console.WriteLine(objException.Message) + blnExceptionThrown = True + Finally + If blnExceptionThrown = True Then + Console.WriteLine("Result: not available") + Else + Console.WriteLine("No exception was thrown") + Console.WriteLine("Result: " + dblTest.ToString) + Console.WriteLine("Is infinity: " + CStr(Double.IsInfinity(dblTest))) + Console.WriteLine("Is not a number: " + CStr(Double.IsNaN(dblTest))) + End If + Console.WriteLine() + End Try + + 'Fifth test + Console.WriteLine("Float division of zero by zero assigned to double:") + blnExceptionThrown = False + Try + dblTest = intZero / intZero + Catch objException As Exception + Console.WriteLine(objException.Message) + blnExceptionThrown = True + Finally + If blnExceptionThrown = True Then + Console.WriteLine("Result: not available") + Else + Console.WriteLine("No exception was thrown") + Console.WriteLine("Result: " + dblTest.ToString) + Console.WriteLine("Is infinity: " + CStr(Double.IsInfinity(dblTest))) + Console.WriteLine("Is not a number: " + CStr(Double.IsNaN(dblTest))) + End If + Console.WriteLine() + End Try + + Console.ReadLine() + + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter02/Listing2-25/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-25/AssemblyInfo.vb new file mode 100644 index 0000000..84c17c4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-25/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.sln b/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.sln new file mode 100644 index 0000000..efd663e --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-25", "Listing2-25.vbproj", "{A67EAD24-F695-4109-A756-A2E90EAA7FC8}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Debug.ActiveCfg = Debug|.NET + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Debug.Build.0 = Debug|.NET + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Release.ActiveCfg = Release|.NET + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.sln.old new file mode 100644 index 0000000..82d6b70 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-25", "Listing2-25.vbproj", "{A67EAD24-F695-4109-A756-A2E90EAA7FC8}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Debug.ActiveCfg = Debug|.NET + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Debug.Build.0 = Debug|.NET + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Release.ActiveCfg = Release|.NET + {A67EAD24-F695-4109-A756-A2E90EAA7FC8}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.suo b/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.suo new file mode 100644 index 0000000000000000000000000000000000000000..eb9fac3a4837dbe3db2fc7e4d60b1ee71387fbfb GIT binary patch literal 7680 zcmeHLO-x)>6g~rJ0Shf!uvS~2SPiX~Kr2?Dt$`U(l%WVz(6AY19>dUK9+?@Sjk+*# zVN6V185$RsMUzI2i92ngE=)}7rd?>yX>DD;4#_~ z^rN-tolApnr)s|nl(Q2Z3p64T$;eshmjs?!IfH)_T4;X8?&kS_5GVvFQvOOkJUf;& z(8o!AkVFe4Wdi@_WLQa`hc;2vZcc`j1t_-;UH!@@W`68U-6t`Wph*euMtK?^~ z3*G8{!Lf&zCWor@dB}Nx*m<(ejr9C(ZQHz!Tj2K~cX;DOzt|Nr=Mz!W z2wJIZ+DfXBtq4W35l&k@7VbBOqf_RLdaVg1B1tQ5^u!WbE6onO!`4J1X&R&EgwboI zXVmbjqPOaxH8X3a%v4r2){G`nF>4`{?_TljNVuPq)drJ^*$FF>ju}IVRGh3G&zLDQ z9Z9mjngXj?>*8>H3?(QXGLA^LWDapl>=;L66Vv8^a7naeQHz0N$x&&+?-+UnWeTmc zXd~vepk;go2@}BMI5b~UFNh8FLU%2Txr}Aa zq0|XjCXOGaj=~;U*l$W{qkDNjiNE)tnHc6*KJ(NbXUbCfL|qd)oW-tKum*FYayqAf z>7xnqcY#USq|$b`cb>6korY5RJ;*`y9{L1*CAFq>kw=~U!+hpfKF@YK|CP$`RcnqF zd9tIb>qE<@J^jk3>~|f=7Ls$iF-*=(AD?^G4zSGtSI~YaT=!BXTWIXmR$R zIoj{~??zwxKq1kFDHI#W?6t?S3lV5$NZu;rIIHk%#Is5UWfIyMMM!59VVxn(GJvz? zh{D6D9LJNRvkKAP_?ILSQ<7N8BxH|6ZzA;g%Dc#atB0+f7s40rl6#%lS4x}VmCki5 z--(5wnEKx<-&C08aOGUCsZ7dGG_9OXKL7dB!bQA~RgzaGdjhXWmpm!Q)%Xxn-E4GX-%8|y_3O44{^+|{2sWWz z+^8A&!(HMz&@cWlUu*p1i75&DYmBpTb`ls92bcJxTim3J0RNR-$|kw@D&{g*z3c?Y zX`DW$;Q_=tFN`l9UHo=n1M&}Gif^51f>=Foz!`<1CVXLiTHyX0U<@#w`dxqF`O70L zly7#*Da^XH-adpp$Nb7QoAT;Pc4!7RcdOmz*{>UY2nqSPJF(@Ot<1`0+ocu;X94*X{q0VJy#JTSYqd{QCb^$<_1R&hq~Oxo;Mr literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.vbproj new file mode 100644 index 0000000..2b9ad7e --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-25/Listing2-25.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-25/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-25/Test.vb new file mode 100644 index 0000000..17f8202 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-25/Test.vb @@ -0,0 +1,19 @@ +Option Strict On + +Module Test + + Sub Main() + + Console.WriteLine(Single.NaN = Single.NaN) + Console.WriteLine((Single.NaN - Single.NaN) = 0) + + Console.WriteLine(Single.PositiveInfinity = Single.PositiveInfinity) + Console.WriteLine((Single.PositiveInfinity - Single.PositiveInfinity) = 0) + + Console.WriteLine(1.0 < Single.NaN) + Console.WriteLine(1.0 >= Single.NaN) + Console.ReadLine() + + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter02/Listing2-26/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-26/AssemblyInfo.vb new file mode 100644 index 0000000..001c7ee --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-26/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.sln b/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.sln new file mode 100644 index 0000000..944cb7e --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-26", "Listing2-26.vbproj", "{DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Debug.ActiveCfg = Debug|.NET + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Debug.Build.0 = Debug|.NET + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Release.ActiveCfg = Release|.NET + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.sln.old new file mode 100644 index 0000000..d11ea21 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-26", "Listing2-26.vbproj", "{DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Debug.ActiveCfg = Debug|.NET + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Debug.Build.0 = Debug|.NET + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Release.ActiveCfg = Release|.NET + {DB29A1E1-1989-42D3-AA4E-E93FBB148C5A}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.suo b/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.suo new file mode 100644 index 0000000000000000000000000000000000000000..0a5954f0a45f624e6d45b2fe3fa1999a7dbdf677 GIT binary patch literal 7680 zcmeHLQEwDg6h7NlX^|FCihzP6qCvDxTM9}GnC@%$> z?Fq)wQuNxT!E^bBFC*2g#J~a#N>Yk)T6!gmXGu=t--H#qyl7Vo{NDo<0u-rur5%A4 zJp#r!=@>N8134MR{}~xj+NWVn3U4L+G?;BO_KCysMY^x7s4=yzfO*FUFAV?cu=r{8rw{cJ?p zR`9*xZQ$+T9pL-G_k(wWS@!`v4e*1`_e0K;GC$J&`^nbIR_=j6Vw~ZX6XRlI+?>v) zOe1FHO9d;ZmTXNtSxU0o^}~r?V<2_PoKTuv4K(OZ)IgE z*Rn35)=_vSgCDgH!5<~~@07Ae*9v|TfA4{q7#3DP^VAlnORs*St_d4XV^%D9gE>(J zom1cY*bDs|QAph+uiWpOd#p)E;ML!a9K`5hOfXjROKKN+#K}L*XJPeoZ>RI0SAUNh zbGjmu9aDWDT0i|6RzG#W?F6n@e*$Blz__^&8FFl~gjvv^9>@5ZySO(EtDo~V=yXSa z+p90H)+xuIQ?X~~<8i#FP$Q=1f;B56qGJX5mwN@hSBj(G6ykrv>DfKz6OeI5E)@wa z&ipe+haLajsLL2|6MdKm+c;*AJ%d?D!ZJh3UKzn&g?l6JRf^y-SZ7oqol${xhBQkb z_LhSR4^#34o@`xGi1x<6q>-4C!$`)Udjxh9p+^?KMgChmZ0mv$-aSkH@5DYY-AtLc zuUq*|ECi+1|2Fx$#;istFD&e>lIp|XEJo?4zg(O-kMH4HmQ~4?$jjI=N2N`*Z$*H$ zB2l)=A$bzqB<)C=airKL>B6ra@+R;hl=Prg6gAsXGbRVP786*1Ikn1|rIRW;r+~m3 z0Yr|d{jo?Vnu$27(OnlhTCr-heif@D4Rov2dt9NvTPqQ(vW~XRMkm&-MJ`yrZA;;g zK8wZS6Z*xEnt?z1o**p#Fkfr@?ol_%zgA@_ zbJa`E0y&P|$2cN@SQmuxm8~nkcCA4FE_5;HbQ8nqc>*pf3^fr8%d-OK-w4+L(`nf8 zyZ2uK%RHuru})FC94*WKY&x1_xD2yX?m zY!`9|V{#hy$6$3v*;%V@&dPmuVr_@*PoskDc;jl zPPO9vcu!BtN3fvMsl!(}r=+=M`>)G?plvEiY!4FBf3rbC`tMtRq3ypfXsV0ozo@VO z!g)vM5$=O0vFf<P;s49)Cwv=s&95#zb@|uE7yHgNzgK(VwV9r#{r>>cJs*+) literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.vbproj new file mode 100644 index 0000000..8c0e3b4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-26/Listing2-26.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-26/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-26/Test.vb new file mode 100644 index 0000000..cd14f55 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-26/Test.vb @@ -0,0 +1,33 @@ +Option Strict On + +Module Test + + Sub Main() + + Try + Console.WriteLine(CalcTotalOne(Single.NaN)) + Console.WriteLine(CalcTotalTwo(Single.NaN)) + Catch ex As Exception + Console.WriteLine(ex.Message) + Finally + Console.ReadLine() + End Try + + End Sub + + Function CalcTotalOne(ByVal PurchaseAmount As Single) As Single + If PurchaseAmount < 0.0 Then + Throw New ArgumentException("PurchaseAmount must be >= zero") + End If + Return PurchaseAmount * 1.08F + End Function + + Function CalcTotalTwo(ByVal PurchaseAmount As Single) As Single + If PurchaseAmount >= 0.0 Then + Return PurchaseAmount * 1.08F + Else + Throw New ArgumentException("PurchaseAmount must be >= zero") + End If + End Function + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter02/Listing2-27/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-27/AssemblyInfo.vb new file mode 100644 index 0000000..8f8910b --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-27/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.sln b/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.sln new file mode 100644 index 0000000..85c80fa --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-27", "Listing2-27.vbproj", "{32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Debug.ActiveCfg = Debug|.NET + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Debug.Build.0 = Debug|.NET + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Release.ActiveCfg = Release|.NET + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.sln.old new file mode 100644 index 0000000..6c4f1e3 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-27", "Listing2-27.vbproj", "{32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Debug.ActiveCfg = Debug|.NET + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Debug.Build.0 = Debug|.NET + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Release.ActiveCfg = Release|.NET + {32EAEC9E-0E5B-49F5-BF9E-B9793ED0406D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.suo b/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.suo new file mode 100644 index 0000000000000000000000000000000000000000..0753503cddf2cdebacf6a62543c30988124b290c GIT binary patch literal 7680 zcmeHLO>7%g5FRIirhjP*ZD|WFOKDMnCTg4hK+_fy+krrwmLw$s`Qq3c*RA8VY&U5I z9FRC5Zd_0+klG3%AwWpIK_%dTgj6o=1#tlhPH;d1PH>^-``+%e*Uql9P6MbYV~uzB zz1cVO=FNQb-rl&r?uW})w)`k{bW~d9W_h{X>1q$*o~&rCNDFTGe6w6G+l?Z)U838_ z1AoERHfIgF)^~v0!OOtQ!7ITlz^lNk!CY(d68%3sFd`OyB{3u_Ia~{J4yzoTHX>rQ zCm17*==jQa-pzG<8ES>llMF1-m?Weqr)5YoxR&Gu{!Lh++l#iC@Ba>I2@!`Fue8Hg zu&#qKP8x(JdLS#4_&+P7O8X3~N#bsPGN8W$Vr#%b^%FBcc7`65=bS7N(m0TVj?zVj3!T-)9P_`B$LQmX(O7-l&k^;*2b*KOx85U z%}HaxDom@_m)AV42wT&6D`)0Ps&n;tCYQ2ii&gQqr^jML9IPXp&EzMoL?LC2WO8XX zEqlt$nT14__j4&Ux2dTXzMlez<&eaY$(Ec!-V!_F$ZTTT86aF1Jtf?w&|=A6*^OTh zB*JnMy?OKz^LC>rUO~bP@HmZ@F7QFLd(*AjU&WsYY$(FMH1yJ%U`Po32@x-J^m$uZ z+sZuFEz~**&!q9A)^Yfw1pl2>)@UjJEAY3Xn>P4MR(pt->z&7X{X|_8Hk`()SnvjG zVxt<=iTQI4nwdZMSa~1)QPdzt4`YI{l5414wgYx6T&a zEyoldCKZzL?UF*Y*Zw7q#FQ*%G6l=yu$u@SuRM$Vw|3ap`60Y}mAvn{f2*fkX{#UW zpL`}3f>P>#lYHG~wjz|v<<1sqJ=|H@n|$`ud$X7DJkid!7Fi#92?cboMAiFYc^o0u zg#sFt{n$8n$v(6U;Jyn_15R&0t_Q(AkcvQdANT-sF^2rhsw`ubPN?WS0|eFxAaX?Q zk41X%l8B>P`Y_NfsD=@*AUje(w_3f&6#Bch60vG!v~4yzQMMhmpn2OG;g3FxMc@|V> z3Rc-Z)DFhv4D1iXY92C}eT;zWn7zpDApT?S+_?Jt#OvEXjed0Ko8}I0(;ON>KGpV?(<()#opL?{)?828~#+mRJis`-^1rmJ^TK*mtGyY`N;=rU+y|&V%TD+q-j*JjP+&{=;(sdd^_+NUGBp_aoKQ7r)`? z(^nBIHuv!0)D2}1Xj@m zYkTavR&1;sz1toA)J>ZA1qitDPk(3BsWyt3pbvNkWmTHb0^+Z&+5QireV> zFGs$2_buJe?|~}f+TUNQ=l^p!AMu;G&xbQ-Xq^9>j{jYFmwT|qqGt1NvGnS3ZfE^} E1BW6H#Q*>R literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.vbproj new file mode 100644 index 0000000..b4a3e1a --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-27/Listing2-27.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-27/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-27/Test.vb new file mode 100644 index 0000000..97b4892 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-27/Test.vb @@ -0,0 +1,15 @@ +Option Strict On + +Module Test + + Sub Main() + + Dim X As Double, Y As Double + X = 10 ^ 18 + Y = X + 1 + Console.WriteLine("X = Y? " + (X = Y).ToString) + Console.ReadLine() + + End Sub + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter02/Listing2-28/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-28/AssemblyInfo.vb new file mode 100644 index 0000000..46393c4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-28/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.sln b/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.sln new file mode 100644 index 0000000..81996f8 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-28", "Listing2-28.vbproj", "{B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Debug.ActiveCfg = Debug|.NET + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Debug.Build.0 = Debug|.NET + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Release.ActiveCfg = Release|.NET + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.sln.old new file mode 100644 index 0000000..873642b --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-28", "Listing2-28.vbproj", "{B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Debug.ActiveCfg = Debug|.NET + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Debug.Build.0 = Debug|.NET + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Release.ActiveCfg = Release|.NET + {B3EE10CE-CD50-48E4-AFA3-77D21E7190CC}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.suo b/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.suo new file mode 100644 index 0000000000000000000000000000000000000000..d8f766836df72000e655734568033518d147b728 GIT binary patch literal 7680 zcmeHL&u>&!6h6~dX%Px2R7AliqCvDxOEtw7Fzw8sC{wU4wwk(_&b&?srt_MaX-lIn zNL(2I00VJhS(q3!Chn9(U67dI1{NAOn&?Uw8g->EZ2i9b-tC(=eQ$VEiU!j&x$nol z=iPJex#xW6+_`pj%l8*P+VO)_&|#^Ug~cYhy{tciXEsHfMe6Xt_l3p9MY~f3k85-b zS>SKz+TiRV_xd)pMznQkO=x$Ztw-B{wh@hc&9+AW4+{*4gq+ycKvxx*_b`o*T0 zIg?G9M%2oe3RX^qY(p$rN^;uuBZ*_iU~0mgRIeLj*<{Yj81ZzrWEIG;Ibn@ubEYwD zju}U+!le4V$@8{8YE4dAc{5*9gBypl`Ls1#blDr88A=@EWX;iBc52K@7ShH*HlJbF zx~I*&SxDyiyqqG-yK3s;_i41Kbjv6r*^+6*EwN)1kxfjS2EyeqQo>UjJ(ld3cKkZQ z5tRvyPGO9g*N&0VB_zxOk2C0LMLU3gf4WiqUHpkbha&XLKrXcjhlIeN2=PLDpud*h zUdFQSq0}*0CW9ZP4#OTL*l$8GoSJ9Ok4HFT&eS4<@%4PHK#qE zTx~KfpY{wZpR(U_9Jf+_0&Abdx><(|JGxlHEa*>_QTn8RA-H6txO#Bi1TKv~g%>c#zKUV4Wdt(vRA5 zNa0~hx^U;$C533O|4R~yDLJfU9I{8DHxYVt>0RW%)x*{<2;s|j$^V)4TP58{U*%jk z^PN}-N~`O3`Le;Rhbu2G?yZyhgL{{1lTUwqcXl4{BaQ50L^{^$`u=_0^?C6}^E{#@Q( z=Bk&R06C88;}krASQmux-mkrHyRd$)hkh7V{x0x-Ujb#DhxH@3$7!jTz-0@ zjLOqfPJPAwsXRR?8$msNa_G|LD!hV$`&IS$AM3?;sZTtPD)CqZ^{rY_E z7tT65kFXA&Le#PHwoiXVeAc_wiT}S5cUV(~#h=~aRY!l^Phy`aH3=^;(X>8xUJI)F zU7dD2@+q6-js!oIOPXpqwE!n;XOLa%~;8CBy^m>oN4&#u_ zeW-<6Rv>>L1TbHa^nVLFI_%!?S2upbe^bu+#f7IX{j}}H{_}0`H(vPp(0AoyYtJ{| v0&d2#|9^4M|8qDW@jvl^Kh7N0aQ?5^{~yJ-tie``YK_0ulB?&rmF52fyS^CT literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.vbproj new file mode 100644 index 0000000..d449033 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.vbproj.user new file mode 100644 index 0000000..29c78d4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-28/Listing2-28.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-28/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-28/Test.vb new file mode 100644 index 0000000..fbc67ae --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-28/Test.vb @@ -0,0 +1,12 @@ +Option Strict On + +Module Test + + Sub Main() + Dim X As Double = 2.45, Y As Double = 245 + X *= 100 + Console.WriteLine("X = Y? " + (X = Y).ToString) + Console.ReadLine() + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter02/Listing2-3/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-3/AssemblyInfo.vb new file mode 100644 index 0000000..ecb4d27 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-3/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.sln b/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.sln new file mode 100644 index 0000000..02469e2 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-3", "Listing2-3.vbproj", "{E1D2974A-2952-4B9D-A767-0783A0FE75F8}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Debug.ActiveCfg = Debug|.NET + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Debug.Build.0 = Debug|.NET + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Release.ActiveCfg = Release|.NET + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.sln.old new file mode 100644 index 0000000..3c4cdcd --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-3", "Listing2-3.vbproj", "{E1D2974A-2952-4B9D-A767-0783A0FE75F8}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Debug.ActiveCfg = Debug|.NET + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Debug.Build.0 = Debug|.NET + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Release.ActiveCfg = Release|.NET + {E1D2974A-2952-4B9D-A767-0783A0FE75F8}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.suo b/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.suo new file mode 100644 index 0000000000000000000000000000000000000000..7e9646b97b3fb388b0391f1395a9c77c733ca350 GIT binary patch literal 7680 zcmeHLK};NF6n+b60Sj$auvV!fQA1S-(kd2g6?Q>UmLgC=!)4hWmZi%M*q;6AQnr7&0I!T+?z6yX>Eu;W640 z^rOva^oRG)ry4&ERDE_3&hL z4baC)Ly$xZBxMHwXJuSTUxqeO+?6LossfaI0IYuH6Eoj)rXG?fATul>8O5qCSyb|~ z*oA)eyyDoyOOrdXe#+J4#aGy0h}XO)j&o0RY!e6cJu!e=MI6u=(CCcQ?wU_uo6y&c zb_3c$v>VY5q1}XbGg=E8d2ey9w>nq$l_EWFsj=O@?OWj2Aa}TOqF?L_nahc&X#}lQ zHf<$U$kv1+*$Ahtp9&8fDK|MBv5|N}8HwI#ftd%Ci{;)NZNSel^Ib#f3=>_$A zUC~p0&{|luQf4Zv1{)?5shG8r$+OoyG7%o;WR1aOVsXZbq+`ZdA{A%Xo`=npnT{lR ze>pK0w?lk?1}!K(GL1;KWC?Lg?3hMm6VsM}a7m10aTi06C0){q-%)S`We%f@7$fF& zVq|&)2@}BMIC|O@r|=c#xZ;CaqL0_ni-O}$~0;f)<&#VGHA2V&L~1UqX_E^>5viBmJ*ypD0^ttEyJD-V#pqTnUC|}l? z)o|rpuB}R{hg&wjK791!n=7B=d8(FuDER|V!>R6(kb1vcj!7R9WtSY6dsWIjhVuD1 zit2XscguZf?MScPazB!3AMOV6b~ktj8H-`WUs6RGvvfpx=MoTDBY?;WRUeD=LXe0f zT8Z0+Xeje6q9X=$E0%jop?{%NB33bv*3CvI^4203Y+bj_@JFA;La+(#Qi?i&Kl(d? zU;JUd*7(PYDGB>)jI(ie78nypFY!l@l#(t2{8zX~*`(53#l6f`PdNc{3f0FvJb+l| zh4IC27e5`YK>lG&p-6loX4yXE4*KLW^bbO79x@nx z+=cv{y@+i;_G8|?bm6zD7h69Zc(>=P=<4rhTYAwajU(gVeEiGa@JqL^ep2;%(;wVm zNq_NZ-;ve%$KLw-jpxVKKX^MpFXnMue?G|{8oJOMC_Qu(L$5iI`MAOJOH`d+n9uX4 z7k&fLrO<9k+?WelS{&C(dTIFSLtK3yq zo|}R8d#I%SDzlDz{&LUSe&zVQ#&sTH9lVIBW94n1{)qUjcQ+^E4{?VzrC + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-3/Listing2-3.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-3/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-3/Test.vb new file mode 100644 index 0000000..e27213b --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-3/Test.vb @@ -0,0 +1,35 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + Dim objDerived As New Derived() + Dim objTest As New MyTest() + objDerived.DoSomething(objTest) + Console.ReadLine() + End Sub + +End Class + +Class MyTest +End Class + +Class Base + + Public Overridable Sub DoSomething(ByVal NewValue As MyTest) + Console.WriteLine("Base:DoSomething(MyTest) called") + End Sub + +End Class + +Class Derived : Inherits Base + + Public Overloads Overrides Sub DoSomething(ByVal NewValue As MyTest) + Console.WriteLine("Derived:DoSomething(MyTest) called") + End Sub + + Public Overloads Sub DoSomething(ByVal NewValue As Object) + Console.WriteLine("Derived:DoSomething(Object) called") + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter02/Listing2-4/App.ico b/Source/VisualStudio2003/Chapter02/Listing2-4/App.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-4/AssemblyInfo.cs b/Source/VisualStudio2003/Chapter02/Listing2-4/AssemblyInfo.cs new file mode 100644 index 0000000..9f89a32 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-4/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.csproj b/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.csproj new file mode 100644 index 0000000..fdbb5c5 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.csproj @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.csproj.user b/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.csproj.user new file mode 100644 index 0000000..ab11334 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.csproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.sln b/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.sln new file mode 100644 index 0000000..64dff39 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Listing2-4", "Listing2-4.csproj", "{19931BA2-7550-4959-A597-ECECD054B2C8}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {19931BA2-7550-4959-A597-ECECD054B2C8}.Debug.ActiveCfg = Debug|.NET + {19931BA2-7550-4959-A597-ECECD054B2C8}.Debug.Build.0 = Debug|.NET + {19931BA2-7550-4959-A597-ECECD054B2C8}.Release.ActiveCfg = Release|.NET + {19931BA2-7550-4959-A597-ECECD054B2C8}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.sln.old new file mode 100644 index 0000000..acd5370 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Listing2-4", "Listing2-4.csproj", "{19931BA2-7550-4959-A597-ECECD054B2C8}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {19931BA2-7550-4959-A597-ECECD054B2C8}.Debug.ActiveCfg = Debug|.NET + {19931BA2-7550-4959-A597-ECECD054B2C8}.Debug.Build.0 = Debug|.NET + {19931BA2-7550-4959-A597-ECECD054B2C8}.Release.ActiveCfg = Release|.NET + {19931BA2-7550-4959-A597-ECECD054B2C8}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.suo b/Source/VisualStudio2003/Chapter02/Listing2-4/Listing2-4.suo new file mode 100644 index 0000000000000000000000000000000000000000..c0c038e481ef3c0e9c772be17f7b83ca91269080 GIT binary patch literal 7680 zcmeHLO>7%Q6n^=ErfHM5KuamKEagXS1yR~kg(Phuu~P`dX-QHNkT3q(IBqvy%XXVq zzyXN^;*3ywqCFs0fRMOBB`6XS5?tB~;sO$!;D7{(18``}_s#BjZO7}ZlkiiNx0>DA znb~gD?izBfZ$W88S%kFeWyxf*3L+89Z}x9;+Ojw!vex zCFm>lDEsG)tC`Nvnp!aEQ#uuBLSmAa(=sAyJPUFXcN0?R_PjI9_x^x1HxY;Euav`g zU{wcwoHPthw16dX+|S9l;(iv=Bv4zL4Dj#7uuUjI`4cnWcc&hf=fE=}VL1VdJfUa|1E)~~SV*vGKKT<$xoF2aw zZQD@pMA?pV7s?KlyHV~z*@?oj_u^@|_1*51?X^hHU8`@cZDkhtCBzk8KG82Wh0U|+ zglUBAOd)4mDr8&3u|kZ~wogSyjPb;bIjdef!s(c0r;MRwx?txxU~|Ndr!CW%G~>oG zJ2$I7UtjUo9)rzRpJoUAisrL%E6mP;CA=}d}E>z*_- zW-ey2zL*$`Dt75|%%!&1K&>rZ| zHE2YC?y)jH{D+W(=sola`bwrQcaev{pS+pR_;jbO`(Uor`LA04V@l^_g(ugWO!KEb zgYqZuH(kfA<{yFXv(TISkV#h-TbKoF)5EU*+?xjF&s;s>PDgt?(U(ziO8qV6drm$+ zg?a)bLTW8IveF~^T>j)usx4(@>lVDy2T5Vfn}Gk%x-*ySd;)!p$aU zNp;^YU$&YpaOGlgPqVZf{;lMtAOG<7+(o=kwXv;PHaEQ}`=wWU)%Sxkpb}+|9KzMD zQf4n|y{HYSXAf#aaBh|`MjS#?9mF>w#$p8VXQ?P-mX0a!JOc#Q2q1Dq?Tapm3)sY^e^X1#Ht*lWpmJpW807m8keme{^+w<7&f6@YEc*P zhuEROFChNij`14*xMQ+le~obt&Q1ekQfMXq=$=~KMS%Y$-a+w?x#|TsK#pVgaS9$l ztn^Q12;r(}>KfNXWRX1@ zHEM(Q+u+)d`ae-q|JBe=saE%<^{+dqPN&Wz+y`e7b=-M7r#~V-_q+9p|KEr^+*1a{ zpZhR2>rQ(T>rAdO#Jh>2<#F%=2X}8Otyh&box49*ujhVL_4!NdI}AHagEQBm5!$v4{(HfI`9cvx(+f7n|5Cqk-4C6|=a(M8 z^5fR$M=x}}+ji-vBi~kZuD$%{E#PG==l_d${y&fN5&wz%{5W$p!}-5q|KEpixd&S< PYBc^R*r literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-4/Test.cs b/Source/VisualStudio2003/Chapter02/Listing2-4/Test.cs new file mode 100644 index 0000000..6ed7d5b --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-4/Test.cs @@ -0,0 +1,32 @@ +class Test +{ + public static void Main() + { + Derived objDerived = new Derived(); + MyTest objMyTest = new MyTest(); + objDerived.DoSomething(objMyTest); + System.Console.ReadLine(); + } +} + +class MyTest {} + +class Base +{ + public virtual void DoSomething(MyTest MyParameter) + { + System.Console.WriteLine("Base:DoSomething(MyTest) called"); + } +} + +class Derived : Base +{ + public override void DoSomething(MyTest MyParameter) + { + System.Console.WriteLine("Derived:DoSomething(MyTest) called"); + } + public void DoSomething(object MyParameter) + { + System.Console.WriteLine("Derived:DoSomething(Object) called"); + } +} diff --git a/Source/VisualStudio2003/Chapter02/Listing2-4/obj/Debug/Listing2-4.exe.incr b/Source/VisualStudio2003/Chapter02/Listing2-4/obj/Debug/Listing2-4.exe.incr new file mode 100644 index 0000000000000000000000000000000000000000..d696965fdb83d5469df9b2dbb266fd9a7c7b5469 GIT binary patch literal 1180 zcmchW!EVz)5QhJ>P(-mi#k#QC~uS@uOVjVqVcST-C ze4v!aM$KMxA3whX#dH55>hBMVCde!7S3JhCZqIyq51tSHL%O_Ac$Q##aSs~bmd@8{ zW9P;}gC-dLU+iRbsPDU&((&F8ByRh7_-b~m_U6Sg?Yv9ToKH^D;_W zh21sZ^#UEt5nJSB)4@<9tq`f}0@0jm_wh~k^*CYW519e$53z|*bcTt|Ut<|&e3{XOPC_)@go27dzXfV-Byh843GeXA{Ic zJcOV^z{bML2M}vpA3%TKxn4{JAt708oMq0;nK|?Ko-_OPSzES2K$CPDnUSu5&*o9I zYhL3jYfUwM2x}FIlu>dx<3nNJctddnv}#IQn#HDyrL>NhVJv6xwV{gMqnX#7KB3>x zf>zMf;7Ul!Dr$h=V2Hhpc0EL|AS)u93|2MPH7z0O*AUV))(d=BiRip?8pFCuEU8Ve zpcSk(p{1ZrZKSyF`Mo3$XR@kAs@>8A*?*+gG~WyvJqN#lJ8XKOPr)pFCv?nmn(Mm0 zTMl1@?pfZPd^OkrJ5N&Xkv?|dPdX5D$mrYU+tUH%g7Idh0}#l2c?0^4;U{=kmrMca zil*x8@q3{34jMeH*Mr$OIz&z~Ns1Lc?_3*n_FGbP~*>P6ki%a6hwaz-tAsTkK|!=}y)jo2lGCxGL>bvVlEU}}}a)LdnD)U zi?iyFqQ2K?-2KqIQ89~?4nQ6PNadKgo@lOr+d0&|{_cBwSPD0+$(`zQheDUQz`u4W u$k4^$JMdp1#&`s@PuK4+WAHw_k8k^ + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.sln b/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.sln new file mode 100644 index 0000000..f89e5f1 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-5", "Listing2-5.vbproj", "{8D6E435F-6608-4BEE-90FF-7B7CC145399E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Debug.ActiveCfg = Debug|.NET + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Debug.Build.0 = Debug|.NET + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Release.ActiveCfg = Release|.NET + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.sln.old new file mode 100644 index 0000000..4c8d15d --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-5", "Listing2-5.vbproj", "{8D6E435F-6608-4BEE-90FF-7B7CC145399E}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Debug.ActiveCfg = Debug|.NET + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Debug.Build.0 = Debug|.NET + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Release.ActiveCfg = Release|.NET + {8D6E435F-6608-4BEE-90FF-7B7CC145399E}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.suo b/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.suo new file mode 100644 index 0000000000000000000000000000000000000000..2978f999a347c73efebfbc05255183e1e1eaf295 GIT binary patch literal 7680 zcmeHLO>7%Q6n;(uO+uTdKtd_BEa68@MWWC&E&YYYP9RXHB}qv@zBu;Ab?SI6+f7;l z2LuPijSEV}f#!gO0D-tcC4M9%5L{Xghzm$?f&&t8f(tRhQw)Vxds58%6NCLD!K5 z{)Vm%&Kh#9Z$N28*@V)BauZ53%4U=;C|qln4f=mrU_>ljc`;-_(s*X&0#?~SwZmhy zCFmp7sCDecFViib2kOD}8J!9=CQ-@BSves|Jo9oIcN1FZ_MFXD@qVw=1&BlRSL#ub zv8;nWP8xzFS|BBpxSy9%C4Cm!#PGH<8Ia!swyh|B;Vchei^HN<(J|$-)TRtiH>dJfPUw=Tq@###sJQj{YU{ze44)v zZS5$xp=?LF9c2f~9VmCA>_j2&U3ePKdx!I6yBF!Pz4|uV)@Fg>nvEMH$#jBEn;tdO zW;UAQ`*LC|u7&vhBuY>YNd%E>$vMO=u_J=WCZ?SO!llrY$6FjNmh6=tT)p53${F-# z&_~ScK~H1}36sF%1X{YJ53QAGt@;=7Cj=dG&@TbG)W#nY0)GO;3+;uK^ek;>JnK58 zPQo$?T$DNvd*oriGfErHRrv}0U6M^5DsvWlh?loI)pGenT@yN-#j04a26JMy9JCwr z=Ni;9f9|o;732>f2hn@z6ZDmIRp}!4Lq26QpYiDoTlK+Qsq&+2=uHne^XJ~wuYBg}F=sg1+m61pic`)%rF_rM z$J2O^fg`Baf}C!TIONEuY?8N@?$&Ln(g#T)j2nah&p0EO&iNGj7?IUHp~sQW9PL;B z&ETaEloInlebUA;d+rIWLKK=AQnX40dll}DxL3)cOhG%tg>;4s>kR3ZVeBo(6duOp z0G|9huQ2VU|41S+C54$xL3RXs6QLtZb&+eUhpk;@j4xd$uXpa>%4scajtwPu3RYWu9NyBnWeuEAOHO3+$Gc}8rfDSt$}CdAq3BU^?ff=keW%`Nw&LjO{!L@YOt*3CvI@-`wD)UI1K{LyEz5Ntxb zcu_a-huFb=pkMsC1-u&nxMNDe{u<+KoSg#3B+yFy(LG+$MS%ZGE@hLvx!kSHRnIs9 zauU0bX?Os!t`f$(zjoJlVg8&C{m`%cUEqD+877F?^8}nz7;3^7YSRMeU!f24Eaq2! z>Hez=A>k1g$~Os~24ty}SC*^*SNb!7Y2PPZ~V`#MJ4B`+?%=hyPIY=_dz^EkFHmrOQu0DfJcY z>puOcIYNVSnz+I>5m{!B8jbo*jrM!h+eoxur*{|aN0f9E?e~bM{no=eZdqP6okzG2 z&LHZz^R`caM11ads}ujf5qG$!^ou`tgE!+0dm8IZsZqqciK6wf^IERDaP)RK@+q6N z;s;8$>mw#z{diY}ZJBxEc^dU@%(=Q=Og|Tukho{ cQ5xs}n*DzdzU3Zly{OjsTQ9kKoa + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-5/Listing2-5.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-5/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-5/Test.vb new file mode 100644 index 0000000..c32567b --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-5/Test.vb @@ -0,0 +1,33 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + Dim objDerived As New Derived() + objDerived.DoSomething(CLng(8)) + Console.ReadLine() + End Sub + +End Class + +Class Base + + Public Overridable Sub DoSomething(ByVal NewValue As Long) + Console.WriteLine("Base:DoSomething(Long) called") + End Sub + + Public Sub DoSomething(ByVal NewValue As Double) + Console.WriteLine("Base:DoSomething(Double) called") + End Sub +End Class + +Class Derived : Inherits Base + + Public Overloads Overrides Sub DoSomething(ByVal NewValue As Long) + Console.WriteLine("Derived:DoSomething(Long) called") + End Sub + + Public Overloads Sub DoSomething(ByVal NewValue As Integer) + Console.WriteLine("Derived:DoSomething(Integer) called") + End Sub +End Class diff --git a/Source/VisualStudio2003/Chapter02/Listing2-6/App.ico b/Source/VisualStudio2003/Chapter02/Listing2-6/App.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-6/AssemblyInfo.cs b/Source/VisualStudio2003/Chapter02/Listing2-6/AssemblyInfo.cs new file mode 100644 index 0000000..9f89a32 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-6/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.csproj b/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.csproj new file mode 100644 index 0000000..a1240c2 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.csproj @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.csproj.user b/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.csproj.user new file mode 100644 index 0000000..9b3833b --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.csproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.sln b/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.sln new file mode 100644 index 0000000..2542b54 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Listing2-6", "Listing2-6.csproj", "{3A2336E2-DF01-47F4-97DC-F20E39391250}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Debug.ActiveCfg = Debug|.NET + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Debug.Build.0 = Debug|.NET + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Release.ActiveCfg = Release|.NET + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.sln.old new file mode 100644 index 0000000..41c076e --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Listing2-6", "Listing2-6.csproj", "{3A2336E2-DF01-47F4-97DC-F20E39391250}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Debug.ActiveCfg = Debug|.NET + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Debug.Build.0 = Debug|.NET + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Release.ActiveCfg = Release|.NET + {3A2336E2-DF01-47F4-97DC-F20E39391250}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.suo b/Source/VisualStudio2003/Chapter02/Listing2-6/Listing2-6.suo new file mode 100644 index 0000000000000000000000000000000000000000..1528f3cd25667ddb3644dfeaa0bce24194a704ca GIT binary patch literal 7680 zcmeHLO>7%Q6n;(uO+u5lKuRgJETy2fkSI-PswQoru@eZyX-HBMP%e(Wah*C|%XX4h zzyXN^LgK&$wcxcWke-cGhVMD$29Q zJ3nvdy?OKA_h$Cm)h$0RUflkZl+aPBmFr6la(hvK0Cg5cn?-6+Vf*^h(vsaNg6cZm zLKgTNy4E>+$i2P|r55du^ova) zb3PF@ji8mvWvrwM*}7097vZ#x6X8K)Gx_Y#L9bV%9>oz+U(CSa^_=H3yT4^pq9J#Eg+dD$cGA zPnjt*6G^hZoC3?cs_NnUQz${{mPtgiC3A>dV#g#Ro0v8SgiB&1hgu9hmUKuvex2Y5 z%1Ml-F-FX5$H-(J2@}BMIC@&83%%v&M)fb?PY60>p** zSk`Syoq}cJ_)+RO?2&{0PAY9QSNSLKH!qtyl;Cvfp+bw^V)@YoEosc@7zObg_h4(3>7}*3Yx4U-`_{W6pH6w;g>c6{lQ( zQu&^pk7rPif+MK*f}C!T=yv2&HpyE{ckdQ7>4T&Y=8eMtXPudg*F20dMr0*VXm{i@ zNBfn3CwS=t#l-wipR{qzUV9w75P@cf6s$6dvkK2fJga0;rlFnTLOR2Rb%wOb5YCok z3J;@l5Kq3HQ<(PJza){ElEg};A$t;f6QL*bZIS<04_mwP7+<_kUUi<|O6f-WO6R(n zZDJuPrvA6dl{&K)uDrCgr$%ZIf13aL@Y&B77S5wRQO~{_*&KKY3G|qBsQ0_zU`&)D zIBL7>N9}PqT0j0<NKsUGC;|l$Yr4q5+JX$v!oyc2{Tu{AkmGDR3#X_(N z?czmkz#n1<&w+mN=PvMS{Nsr!3Hxh|vvGDB7!yY?@kft%Nf!bBE4h?S^5$~)GFQFm z1juomK4#zn#JX}A?|$3e+KKgZJ@iAr@^^ywiZe|RtLF_kt1#4rFI1-m?!Q7G=3UIM z{NnRhnXpj4*&|0W>)Lwz2=W~BE7xqw%lYik25jzCyUnv-FL($Eg}6Js=9&~v9{#mp zmOX~tL7$w5{y}KXO9rEl9#ELG2eIwPevF-Km;RV|eb*;_A9jBmJ^SbB9qNMyFVXs= zNZ~3#_z8Fqbz$h8=AqH=KmToG_>G6peo^yo%U|l0mAU-PvAt(!o_+7T^RJFv|M-0s zu-=n&V3Kp*L!B79>^*bFjSK7tp_Iu9Y{VA$$PdrZ)ZcqFMqi;`HSbX{IiJnq= zdrGRexIgaOlQIOgb9-{qLc@3xip7gYzKkMi` z!gFvMQOA?FefuNg^SoP``2CHz!!xB{{MiNGv@`7q>=UI%5bq|6*2m6k*~-E(y33JI z*`yU;07EhU>F)JEY`v;ps+%t|Y1K>W2O+y8##?*@~;f9drOzz)-p%zdbawyr|{ zJ_umGAlcs*3ejQr`v2GQ7Qug`sn8AJi}YdgKT9=z8mBTcD7!?C&py o`~Ml-kN8cz%!e~aG2H*F_WwumF3(_VMb*aNTFKS(+{*I*0o7v`82|tP literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-6/Test.cs b/Source/VisualStudio2003/Chapter02/Listing2-6/Test.cs new file mode 100644 index 0000000..f07f788 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-6/Test.cs @@ -0,0 +1,35 @@ +class Test +{ + public static void Main() + { + Derived objDerived = new Derived(); + objDerived.DoSomething((long) 8); + System.Console.ReadLine(); + } +} + +class Base +{ + public virtual void DoSomething(long NewValue) + { + System.Console.WriteLine("Base:DoSomething(Long) called"); + } + + public void DoSomething(double NewValue) + { + System.Console.WriteLine("Base:DoSomething(Double) called"); + } +} + +class Derived : Base +{ + override public void DoSomething(long NewValue) + { + System.Console.WriteLine("Derived:DoSomething(long) called"); + } + + public void DoSomething(int NewValue) + { + System.Console.WriteLine("Derived:DoSomething(Integer) called"); + } +} diff --git a/Source/VisualStudio2003/Chapter02/Listing2-6/obj/Debug/Listing2-6.exe.incr b/Source/VisualStudio2003/Chapter02/Listing2-6/obj/Debug/Listing2-6.exe.incr new file mode 100644 index 0000000000000000000000000000000000000000..145ffd4a7aa01e606be1707131d09bb79340870d GIT binary patch literal 1172 zcmcgrO-~b16g}lLmYu)gB_zZJGpP`2gjJaqQ-Ye<8eMe3OgjSu^Fd}FqPzYHe?d3= z32R6f3W*6T6L-dqD^~mg&wVWdiEJ?NCTH%O`|f-9ynD~olXm9Eexlt-t?q|WM^#OIJrp&fOTjf5FCv4piX>qW4Yf ztS5{)HN)n6sO#G@tdMoi%rW^z)N-Bt1M;?c*WBcgWYVJUY2~}*9{p07`|sRM=9QWa Ub6s3Y?kpXs&@z{?yt}b~05{Rd$N&HU literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-6/obj/Debug/Listing2-6.projdata b/Source/VisualStudio2003/Chapter02/Listing2-6/obj/Debug/Listing2-6.projdata new file mode 100644 index 0000000000000000000000000000000000000000..70f66d2466ba5f675f54bc85862be872e5652141 GIT binary patch literal 1928 zcmeH|y-r&}5QWbLn>be@qKW`T=*pErGK!3nB8m_=X(ExvASxFQ0pdupjr@Z|cgws& zXz3`T6tq;4BBjl9z%wM@S^qVmh=fVQSZ8N;W_D+0@9y}^!dz}jP)7P1S&)8170VbN ztEyLOsj03G!q`D0Wz~1i+9}MZ1CLeKJ9Y4tj#&8u?`_ui)Yf~nRqg5{_8wlJuym33 z(X>?3Q+{h9ULEUEh}cF~LbnxGbs3xbfTpPDXm{ALgWoE9cZld*=JXnE8_#3-KAL#s zC#4h5X_HJ`e?xmzc%nCCd`Nx6964yMfK!m0k@7=1D=i|I!DpOYOA2zx{vwEhau0^m zJ-`YOUvvq415n~&9oWZo0S2}(x2@j=q#t8j;!a^(zhm^*|6*P% zUY}jY-y_>nPyv1czU_Iq1I2nvFYv3E9*yLJmYGk}1){L4GkTavOTmlb--+bTS>?En zf9M_9cAjq13LUJ$o9?PU=s=G3cT0gD=Ik;mMp1mT*R!$Ltn&{wY)CJWp8!+P!S_Jf sipkNSes`w3slPO?Kl}rQTIqHFr~Z_>6W}adf9+>-<-5t0FFASo1L+otX8-^I literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-7/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-7/AssemblyInfo.vb new file mode 100644 index 0000000..78700b2 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-7/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.sln b/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.sln new file mode 100644 index 0000000..0da20ad --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-7", "Listing2-7.vbproj", "{D582898F-DD17-42D9-A004-E22CF2E2CEB2}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Debug.ActiveCfg = Debug|.NET + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Debug.Build.0 = Debug|.NET + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Release.ActiveCfg = Release|.NET + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.sln.old new file mode 100644 index 0000000..1a557d4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-7", "Listing2-7.vbproj", "{D582898F-DD17-42D9-A004-E22CF2E2CEB2}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Debug.ActiveCfg = Debug|.NET + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Debug.Build.0 = Debug|.NET + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Release.ActiveCfg = Release|.NET + {D582898F-DD17-42D9-A004-E22CF2E2CEB2}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.suo b/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.suo new file mode 100644 index 0000000000000000000000000000000000000000..50be109590f3a0e900d451f71e269d65768b0446 GIT binary patch literal 7680 zcmeHLO-x)>6g~rJ0Sl!nSgWm1{7KsgL0VG^Z53ufQHEBaLJgbwc??5`d6Ss|+NcW? z7wXo;(73QHOpF?TcG|?B#Kc55tqbEu6HQEXVWO^dBlvyyz03SCZ+HV}Q^T3u_wLVm z_ndp~Ip4W=u3p*w!_o(Pf0QCRDb=#PQYSa&_4`m~QPd<-g$motD=RB@rwFRsbRAjX zZ|GX%>>>C129#Qq9Vm4uH=)#{>_llm;a;fy>* zG(aCG4MGwvkdQE*=Veq$pNBRP)Yc~h@*Ban3&pE^V&=Qf)PwRAWCkT5r?F~FQc8Xn zyU?fF3ywV;_BF3VKw-u&W7Vtte7t6z_T!%D*d`9>I_Kq95eGB|aJ?Ky3RvaS{LScV zLAecO56bN*dr|H{xf5j{3VH9s+i>cw&YS(ENY7nrY`brB7Wm!I9o{(6FLnjY`FO-M z{8loXwh}62YXYHch||_j1c!{#$h0}Dnhk+?C}G8n{%AaFrOD6~w8HU(X^fj;W57z! zs?X~RTJ?TwHf1HvWL6C}jK`BvYax?kuX$`NIK;^s{fT%gY=zQMVKE1Qz2-^_Vjq?QKV2QpG9PpHRMM=i?dF zBjE6>y&z|yM|3;#DVtPU%fjB>XwnBs0n8hL|Ia!z=dbxR#u$<1JfXvp&m8Sl{>|W} z59AZ`KYh~1F?;PX>_P~d8IrTgB+e>48}Y1?L79SfMgh_p1z2ZDyA0!OIi~P1qOgo# zXBDQs@E=JerX;YEDQG?ky@}A1t8I~MtB0+fJI3elQ>i-7Z^g8kzT&z5%{H+R6jjeX z@>Pvl4Od=SIZ!3O<3DMXl8=9WW8o6o6SeHCk|y6X2%U$dOMQP#y5OR1=n2S!aIrQy zg2Wk+W2p72WP1d)e)M(1!3XeU-H&Gm{`OS zjVZbyV#A{G{d0(pDA27??kR=-`BI5kg*;j}8=c5oi(F8-ZsqVt-^Bv33GGsf+JQgB z4xR(O;?FJM)%eE~Qv&wa7-!?`6fh=+UgD1)DJ5M5_^;$rHmNjMVJ~yl(@ub#!s%lM z9zd*f!}!9l3tRiKey)dp=vDrH@V@6v!^D008{N)lB z$~SxDBxc=OZy!OPV}9kDO?h@TJG29v`_yjp?AHe#LP9R?j&Hdpxs!)?Etq9{kvr&< z^U&W9t$E2{^w9%ybM_#%z1WYjbM^8c6EC)Y)c;QRH<86Z&+k(QN?xM%pCY-d0O99i zG_f658qNzS$dLAPEva4u=~(a z482Ckba2aF>yrlWKM{5N;dvl;`{92m`u3B7#n#?_xYNbApM?5~_AR{qs5L@^Vw$+Z zJrP-Bj|z?YQib+A>ux`nA=>X1rEC6!_IsqH{kFn7`I1W4bsph4IEAR=$=kmD5%GE6 zEl>Rajkv=zrC0p98@wrJ+B4W^N(~|2O%$zm7t0rXZR7PzkkcK>k4pV7?&f__14+KfhRd z`0_8!XNNDgzg@fZ>xu6xpJDrpYiWU8# + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-7/Listing2-7.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-7/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-7/Test.vb new file mode 100644 index 0000000..b625010 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-7/Test.vb @@ -0,0 +1,14 @@ +Option Strict On + +Class Base + Overridable Sub DoSomething() + 'The method definition goes here + End Sub +End Class + +Class Derived : Inherits Base + Sub DoSomething() + 'This method will actually shadow its base method rather than Override it, + 'because the developer forgot to add the Overrides keyword + End Sub +End Class diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-8/AssemblyInfo.vb new file mode 100644 index 0000000..5b7ce5a --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.sln b/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.sln new file mode 100644 index 0000000..fb22fdd --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-8", "Listing2-8.vbproj", "{56218072-CB2B-49E2-B000-3180711BBC10}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {56218072-CB2B-49E2-B000-3180711BBC10}.Debug.ActiveCfg = Debug|.NET + {56218072-CB2B-49E2-B000-3180711BBC10}.Debug.Build.0 = Debug|.NET + {56218072-CB2B-49E2-B000-3180711BBC10}.Release.ActiveCfg = Release|.NET + {56218072-CB2B-49E2-B000-3180711BBC10}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.sln.old new file mode 100644 index 0000000..95b3330 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-8", "Listing2-8.vbproj", "{56218072-CB2B-49E2-B000-3180711BBC10}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {56218072-CB2B-49E2-B000-3180711BBC10}.Debug.ActiveCfg = Debug|.NET + {56218072-CB2B-49E2-B000-3180711BBC10}.Debug.Build.0 = Debug|.NET + {56218072-CB2B-49E2-B000-3180711BBC10}.Release.ActiveCfg = Release|.NET + {56218072-CB2B-49E2-B000-3180711BBC10}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.suo b/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.suo new file mode 100644 index 0000000000000000000000000000000000000000..b8e113ed708bfa4607922121a8f1c8adc51aeb46 GIT binary patch literal 7680 zcmeHLL2Oi26ur|{DU}vbTM-4n6%C>^rBy)+D4i*aG6maWi|J-M^E*tL&TnR>EksQ; zaiQ+q7zhjL!o;XCF>Vy2E=){d0~^Ce6HQEXVWO^dBlVp3-|L^5{@?y7MT6;`y!rpX z`~JK4-FNS~_x;P4*8ec`@x~veg7!(RT%BDlH<$EBaL=Y_ok$IC_GRW*K8~F|FA%xIQSLCk{-$7nwL}9{@A1y?$Onq`C*YtIymV@Y6paDrpK~Bga$>3U)qxiR>h3PN2!vg=e0EGZW%3rBR z;J^w7eVlXLmct?dz{$u=#Yu^Co=DPHrQIL_rw6kKex+ZK$GUv?q;01Hlwcv z?GCgJXm_G*M7s;^ZnRBk9D5J07TUe~`96Im&yURfe!P{wrCZ?lD0g`2M88-Yv!^mi z+lo55V&2KBkgba)iV05JFcd#z^(T+p$!N{8uUefLe2^ z%#*dMz852(_6#eZvftK@TPZ(|wU1-ntV0I1E{-q@`qRVMdCE29KdQW!`!%4uXm2sO(@Y#u0y66=lrQ3FV!WKwyIa zB70SS6Y0XlB3ks^bW0QsRbEDPq=0Vaat|x?FO^EfDj#EXbJ2-o>yZnp*KHyEF=w$D zY(l&EQJcnJ)`4O1hxyvzA1kIT>~Ap6#o19{Od7q!AH(sJE&}|Iu!7~;B&>Yqsuy&C z97gpq1`iFwc!iZX@T=^gfYN$8g~7q^;bYx zDBtXoeVBE5y}b{4j`@{qw&kU{?9c{m?pC|a+OHd92nk-??OAqByvifI7R<8ykvr&< zQ_w#Ot$D~`^l=xwIlB^t&Ez54d=&AH0)(G4 zO}+i!efis(_?!2i{;KAk=D#>x@)w@j|KRDdXWzSW?$y4lpS~Yqg!xah3!Jn5tPZfw z__I2LSv$eHz#PBWF3z{#a~97}Np*T+J>i|6_zlLKo(iz|{L>RXrSkNYRc~>B%1=+q zMo_cTs6&^ilgJxY+V69JBhh}x{8_YL0E_l}3vCHR`#tGvzi`$ud4zTF1fq_Ww|n{{ z;Z%dzsXUDFz;@|Abz_ex!)GN z=x}?(|C{&;|3>-9Z)To2|4Z|+-ZO0<)X)67_xp10%G33>fS0k{?=Rl@{}j$g{3ago g;Y=%r^MBR;{}A3~4YpilVlS-!FPB_1&y6hqA9&9fKmY&$ literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.vbproj b/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.vbproj new file mode 100644 index 0000000..9ae4887 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.vbproj.user new file mode 100644 index 0000000..9715303 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8/Listing2-8.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-8/Test.vb new file mode 100644 index 0000000..234fa28 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8/Test.vb @@ -0,0 +1,59 @@ +Option Strict On + +Module CatTester + + Sub Main() + + 'NormalCat + Dim objNormalCat As New Cat() + With objNormalCat + Console.WriteLine("NormalCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'LameCat + Dim objLameCat As New LameCat() + With objLameCat + Console.WriteLine("LameCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'UglyCat + Dim objUglyCat As New Cat() + objUglyCat = New LameCat() + With objUglyCat + Console.WriteLine("UglyCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + Console.ReadLine() + End Sub + +End Module + +Class Cat + + Overridable Function Feet() As Int16 + Return 4 + End Function + + Overridable Function Legs() As Int16 + Return Me.Feet + End Function + +End Class + +Class LameCat : Inherits Cat + + Overrides Function Feet() As Int16 + Return 3 + End Function + + Overrides Function Legs() As Int16 + Return Me.Feet + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/AssemblyInfo.vb new file mode 100644 index 0000000..58b4bee --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln new file mode 100644 index 0000000..c740a60 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-8Shadows", "Listing2-8Shadows.vbproj", "{BB663C40-7108-4457-8984-E194358B1817}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB663C40-7108-4457-8984-E194358B1817}.Debug.ActiveCfg = Debug|.NET + {BB663C40-7108-4457-8984-E194358B1817}.Debug.Build.0 = Debug|.NET + {BB663C40-7108-4457-8984-E194358B1817}.Release.ActiveCfg = Release|.NET + {BB663C40-7108-4457-8984-E194358B1817}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln.old new file mode 100644 index 0000000..86cfd7a --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-8Shadows", "Listing2-8Shadows.vbproj", "{BB663C40-7108-4457-8984-E194358B1817}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB663C40-7108-4457-8984-E194358B1817}.Debug.ActiveCfg = Debug|.NET + {BB663C40-7108-4457-8984-E194358B1817}.Debug.Build.0 = Debug|.NET + {BB663C40-7108-4457-8984-E194358B1817}.Release.ActiveCfg = Release|.NET + {BB663C40-7108-4457-8984-E194358B1817}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.suo b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.suo new file mode 100644 index 0000000000000000000000000000000000000000..8a350b84b540438e0928b9cebf8945aa3a2f6767 GIT binary patch literal 7680 zcmeHLO>9(E6h6~dX)7(D77+!X6%8UZlvXGdFm$G9wNtPZ+nU)-XI_UXuk)IjX$$cu zF>#^p+?WyN1l6^2 z8(H9Q=vw2hA=mm2P%UU3s19@&s2;Q))BxgIlh(@r!vg(cx@~ zjJ5=Qq+FQ|-uyn*_+_A)Omr-i0f|aR&PuN&@yyC;+)Zeq+cOSZ$@>ne3J{0ruhgR? zV^IfvoTUenXaP$`a6c!fl=LZR6GLt3VnBW)*fxOt$|q)i;tt&-FFV;4}E`{h+O&2S5*kwt>j|5S|9;VfXzJ_sKr5qR02@TWeds1%3;1g_mFG7aKz6 zR5E57K|7UA+m_n0HKAxW%39N!WTB6%9FRR0|QgrGwP`XwNj+W134;7@>f zp*=89wUSltW!*`sBd|;Y7o`qjo>|!MjM7GPm3{($7i3e1(ww;-;^n>WYq5Nyt_dB^ zVpVKdgE6sO4BCnLa}6q)KXa^?OUUm=45IhYC+I7wveHE!gM7+nJmb?Hw(NtkQpdmI z`5#wvju&`xxxuu2+S9Lm%6`Xn++z7*%zYg5W*#!=>f(64w-&qI`7<~5E1$7?z#WeE zc6MJ1t8NMBZzjF>nOcT9C8QBM!OpDVxPx%fi-8c%=`rgfMOl{y*-HoImH2 z=;Mwo=LvgV`Hazi<=+in`aphR{7-=#9CPNLz$!$cnUQCe2yzwXM$A<*piyXN6d;{Z zfOUqnNFQ>`0fmP#Ie;g>&MFjp{a=zuOtCPNQOJ%!Zz6PL;a%jv)x*&)AJy|$X6ZWf zx8kyrw&JmFG)zq3lJ58qhGO+NeS{pne}57n}*N_GccLW0~S z`_=bBX-Dwf1LtbRvjequTuXf6SOH*k5CugR`T+m;_phKf1?Dx(M)J$)#)- zZ?3{t#;O@)YbL&e#AM(SI*f)7Nny?3$VFMtu}MNF7OZ%a{KP^ zs%w(VJp60HD0>XCgFZP0{e#e&hYapMdO&W>PV8+z_T%2Ue&zR}H<~YZe|+eh*vy~j zwyA`YhiLs%BzF`b{9I`4JN4b?zpf9z_2|qORqr+ZrBbQ%)n|`AJ~Q^*2j9-V)<5^@ zhXLy2JxB)!@$TA(uB+Z%ZRonR1GmLm6(3MU-t`{i0EaKI-}45~Pce0RVm^^OJ@Frm zK0Re%@x`YndP?!>$x>f&eR8L#%%anivKVwp$j~*esmPlZ+V8UW1Zlrv?=ISJ*suL= zc#lE*y$#A0+ON;ke*UbZ;|TNM3G6y%-p=Wdh|heteBu8$;tq34zxdM(-dEjWPh*`Z zm8V-1r1f#)TBf{k^ftTlDVt@<55SO*fBHY8c50rqX#<`?8I_jOfcWc3cJ6-U(+TwX zOV76lb{K_Zu0thd^D^Y`f&j(~mJZCY_}_xw9S%qNyWT(Lxk~qbb@8byKQ|5cU1<5J z_Tn!`ZkFa;>$w#c$VDvY|4Z)te;(%}{u3|p + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Listing2-8Shadows.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Test.vb new file mode 100644 index 0000000..24757cc --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-8Shadows/Test.vb @@ -0,0 +1,59 @@ +Option Strict On + +Module CatTester + + Sub Main() + + 'NormalCat + Dim objNormalCat As New Cat() + With objNormalCat + Console.WriteLine("NormalCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'LameCat + Dim objLameCat As New LameCat() + With objLameCat + Console.WriteLine("LameCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'UglyCat + Dim objUglyCat As New Cat() + objUglyCat = New LameCat() + With objUglyCat + Console.WriteLine("UglyCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + Console.ReadLine() + End Sub + +End Module + +Class Cat + + Overridable Function Feet() As Int16 + Return 4 + End Function + + Overridable Function Legs() As Int16 + Return Me.Feet + End Function + +End Class + +Class LameCat : Inherits Cat + + Shadows Function Feet() As Int16 + Return 3 + End Function + + Overrides Function Legs() As Int16 + Return Me.Feet + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter02/Listing2-9/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter02/Listing2-9/AssemblyInfo.vb new file mode 100644 index 0000000..73c3d1a --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-9/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.sln b/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.sln new file mode 100644 index 0000000..ee52917 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-9", "Listing2-9.vbproj", "{BDC11796-30AC-4600-9B6C-7446DD16279D}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Debug.ActiveCfg = Debug|.NET + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Debug.Build.0 = Debug|.NET + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Release.ActiveCfg = Release|.NET + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.sln.old b/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.sln.old new file mode 100644 index 0000000..35d2b2d --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Listing2-9", "Listing2-9.vbproj", "{BDC11796-30AC-4600-9B6C-7446DD16279D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Debug.ActiveCfg = Debug|.NET + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Debug.Build.0 = Debug|.NET + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Release.ActiveCfg = Release|.NET + {BDC11796-30AC-4600-9B6C-7446DD16279D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.suo b/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.suo new file mode 100644 index 0000000000000000000000000000000000000000..f7c2d268de597c0bc6a564523b16ec504a38f9f8 GIT binary patch literal 7680 zcmeHLO>9(E6h6~dDM(9EK}5l4Ed~`DpvKY`5IR#7WeS#JiEn$g2bpXVJ9T&!o&nOurbC&6J4nZMvV*I$oPHty*qE-^v&?5R1KzQa^Jf@ z=iPJex#xW6-nn{Z^>=d@)_*Tmv`3oddTF`bUeO;yokdZHNE0e-UoVwPcBcrcOLPla z;4kRf;_M;!`ZknSlw~N(QSLxlfwB^%4TXEnvPAz63yg?`Ur`Jhk{sT7IgMQoPHW*Y z+7k4Udi2V*p`UZ@pM{#iw3m(r8kM*djIqiz^=t1L1a?+eu&9+D;p0(1(P%2Zj@?_|UT8T{7 zG{($?vERy1tIwBvS}VfV^o*4=b44}SHkQeytdj+oz2)iA=s`}_9?oWF5>`B)GDb4F zG`p5PW#-I$Jj?og3eE3osE6MtP{PtLF+{Q@vxr+_M+}ioOq&J5Wie7jErlLScE~pT zdcYBuNsP{5jF`6#Be60PW`M_O^lX(r^wy%A)!)UR2y`ewzcl1hn_x%?{0R{+wD;B0 zv$CIYtlN~DfMwG7QR*1%QH1>_l{T8I_8a(HmQ5XMbGjqM%e$RswS1zk2_24OS1eeA zIk8?2+Klyc4;ooN&sez{@`sRv=sola`bw^@bdiT4pR$?H_;#kP`(m!t`LBBY`_-CL z9#5_}nU+s`29;0QZ#j-zEkBC2Ph;IYhm1M8Si&smPg|Vz^K2SaK6CY`Gac=1M_*3G zDc7G>zGvs-Db$nT2&=syr`IF;9r=_^^4HSayBbaUASr@*lkop(XXeT^AI2CXvYsbw zbL2Be2bF&(cA^J zv*oD5!=&`$&993J(_Z_RBob4ySjhxr$DlV6I#zCr{I`18+SSJR%6;;y^ZZs#H`7-= z*FV`N7J^dhxlX=lF`MDarPAgmY2Niy*-JnE;rz*SXpgtDuSq&WFXDh4k+Ax{7b)@y zB+4G7(0y>>t@1e9OtMU#gQ&Bw7rpF{;I|#`9q8#}EJhK3Srui>(sAXTvp`^t03y59 z`B-EC6NosXG0ApLfvFZG8fv_Z=tu$GymAjI^skgk#PafJ-E4FsZ!2;^n-_1o*GyQZ~t-%iGIb z^@0;1hj99sf(H=mYGJ(hYj0~K*3b3O4};3z2;O!l|An!7-hc}VLrwTXV_M+;EA(OB z#e&MOJb%>)3+0;wvIny+uD6dM&oRGp&8ECm&JNwc=0UaFJo^oThmhdL-L6H~#65Wg z*MeDgA94qM@&xn`L+iBCvsHP3JLdpmJBa-lJ6A9LHvW3&#i0-Szf7L_xUm)#w z%zudXI~LS_U;EEN`@M + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.vbproj.user b/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.vbproj.user new file mode 100644 index 0000000..9715303 --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-9/Listing2-9.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter02/Listing2-9/Test.vb b/Source/VisualStudio2003/Chapter02/Listing2-9/Test.vb new file mode 100644 index 0000000..a0489ac --- /dev/null +++ b/Source/VisualStudio2003/Chapter02/Listing2-9/Test.vb @@ -0,0 +1,66 @@ +Option Strict On + +Module CatTester + + Sub Main() + + 'NormalCat + Dim objNormalCat As New Cat() + With objNormalCat + Console.WriteLine("NormalCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine() + End With + + 'LameCat + Dim objLameCat As New LameCat() + With objLameCat + Console.WriteLine("LameCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine("Equal of a cat? " + .Equals(New Cat()).ToString) + Console.WriteLine() + End With + + 'UglyCat + Dim objUglyCat As New Cat() + objUglyCat = New LameCat() + With objUglyCat + Console.WriteLine("UglyCat is a " + .GetType.Name) + Console.WriteLine("It has " + .Legs.ToString + " legs and " + .Feet.ToString + " feet") + Console.WriteLine("Equal of a cat? " + .Equals(New Cat()).ToString) + Console.WriteLine() + End With + + Console.ReadLine() + End Sub + +End Module + +Class Cat + + Overridable Function Feet() As Int16 + Return 4 + End Function + + Overridable Function Legs() As Int16 + Return Me.Feet + End Function + +End Class + +Class LameCat : Inherits Cat + + Overrides Function Feet() As Int16 + Return 3 + End Function + + Overrides Function Legs() As Int16 + Return Me.Feet + End Function + + 'This overload doesn't work for a subtle reason + Overloads Function Equals(ByVal AnyCat As Cat) As Boolean + Return True + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter04/SortingSpeed/AssemblyInfo.vb new file mode 100644 index 0000000..e68a407 --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.sln b/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.sln new file mode 100644 index 0000000..0992622 --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.sln @@ -0,0 +1,35 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoLogic", "SortingDll\DebugDemoLogic.vbproj", "{057FA2D6-5280-4393-BE33-C6631BA07451}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoForm", "DebugDemoForm.vbproj", "{1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}" + ProjectSection(ProjectDependencies) = postProject + {057FA2D6-5280-4393-BE33-C6631BA07451} = {057FA2D6-5280-4393-BE33-C6631BA07451} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + ReleaseCustom = ReleaseCustom + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.ActiveCfg = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.Build.0 = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.ActiveCfg = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.Build.0 = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.ActiveCfg = ReleaseCustom|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.Build.0 = ReleaseCustom|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.ActiveCfg = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.Build.0 = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.Build.0 = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.sln.old b/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.sln.old new file mode 100644 index 0000000..b71c4dc --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.sln.old @@ -0,0 +1,33 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoLogic", "SortingDll\DebugDemoLogic.vbproj", "{057FA2D6-5280-4393-BE33-C6631BA07451}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoForm", "DebugDemoForm.vbproj", "{1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + ConfigName.2 = ReleaseCustom + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.0 = {057FA2D6-5280-4393-BE33-C6631BA07451} + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.ActiveCfg = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.Build.0 = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.ActiveCfg = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.Build.0 = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.ActiveCfg = ReleaseCustom|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.Build.0 = ReleaseCustom|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.ActiveCfg = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.Build.0 = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.Build.0 = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.suo b/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemo.suo new file mode 100644 index 0000000000000000000000000000000000000000..bc0825d7cf705995814b89495dfbef72b3efe4d3 GIT binary patch literal 12800 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 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemoForm.vbproj b/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemoForm.vbproj new file mode 100644 index 0000000..fda6517 --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemoForm.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemoForm.vbproj.user b/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemoForm.vbproj.user new file mode 100644 index 0000000..6f2ca04 --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/DebugDemoForm.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/DemoForm.resx b/Source/VisualStudio2003/Chapter04/SortingSpeed/DemoForm.resx new file mode 100644 index 0000000..363456d --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/DemoForm.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + Assembly + + + True + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + DebugDemo + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/DemoForm.vb b/Source/VisualStudio2003/Chapter04/SortingSpeed/DemoForm.vb new file mode 100644 index 0000000..cf4ee1a --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/DemoForm.vb @@ -0,0 +1,207 @@ +Public Class DebugDemo + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents lblTwo As System.Windows.Forms.Label + Friend WithEvents lblOne As System.Windows.Forms.Label + Friend WithEvents boxSort As System.Windows.Forms.GroupBox + Friend WithEvents Timing As System.Windows.Forms.Label + Friend WithEvents StartSort As System.Windows.Forms.Button + Friend WithEvents MaxValue As System.Windows.Forms.TextBox + Friend WithEvents NumberItems As System.Windows.Forms.TextBox + Friend WithEvents SortCounting As System.Windows.Forms.RadioButton + Friend WithEvents SortQuick As System.Windows.Forms.RadioButton + Friend WithEvents SortSelection As System.Windows.Forms.RadioButton + Friend WithEvents SortBubble As System.Windows.Forms.RadioButton + Private Sub InitializeComponent() + Me.lblTwo = New System.Windows.Forms.Label() + Me.lblOne = New System.Windows.Forms.Label() + Me.StartSort = New System.Windows.Forms.Button() + Me.MaxValue = New System.Windows.Forms.TextBox() + Me.NumberItems = New System.Windows.Forms.TextBox() + Me.boxSort = New System.Windows.Forms.GroupBox() + Me.SortCounting = New System.Windows.Forms.RadioButton() + Me.SortQuick = New System.Windows.Forms.RadioButton() + Me.SortSelection = New System.Windows.Forms.RadioButton() + Me.SortBubble = New System.Windows.Forms.RadioButton() + Me.Timing = New System.Windows.Forms.Label() + Me.boxSort.SuspendLayout() + Me.SuspendLayout() + ' + 'lblTwo + ' + Me.lblTwo.Location = New System.Drawing.Point(32, 96) + Me.lblTwo.Name = "lblTwo" + Me.lblTwo.Size = New System.Drawing.Size(112, 30) + Me.lblTwo.TabIndex = 14 + Me.lblTwo.Text = "Max item value" + ' + 'lblOne + ' + Me.lblOne.Location = New System.Drawing.Point(32, 40) + Me.lblOne.Name = "lblOne" + Me.lblOne.Size = New System.Drawing.Size(112, 30) + Me.lblOne.TabIndex = 12 + Me.lblOne.Text = "Number of items" + ' + 'StartSort + ' + Me.StartSort.Location = New System.Drawing.Point(280, 285) + Me.StartSort.Name = "StartSort" + Me.StartSort.Size = New System.Drawing.Size(92, 39) + Me.StartSort.TabIndex = 10 + Me.StartSort.Text = "Start sort" + ' + 'MaxValue + ' + Me.MaxValue.Location = New System.Drawing.Point(160, 96) + Me.MaxValue.Name = "MaxValue" + Me.MaxValue.Size = New System.Drawing.Size(72, 22) + Me.MaxValue.TabIndex = 13 + Me.MaxValue.Text = "10000" + ' + 'NumberItems + ' + Me.NumberItems.Location = New System.Drawing.Point(160, 40) + Me.NumberItems.Name = "NumberItems" + Me.NumberItems.Size = New System.Drawing.Size(72, 22) + Me.NumberItems.TabIndex = 11 + Me.NumberItems.Text = "1000" + ' + 'boxSort + ' + Me.boxSort.Controls.AddRange(New System.Windows.Forms.Control() {Me.SortCounting, Me.SortQuick, Me.SortSelection, Me.SortBubble}) + Me.boxSort.Location = New System.Drawing.Point(280, 16) + Me.boxSort.Name = "boxSort" + Me.boxSort.Size = New System.Drawing.Size(232, 247) + Me.boxSort.TabIndex = 9 + Me.boxSort.TabStop = False + Me.boxSort.Text = "Sort algorithm" + ' + 'SortCounting + ' + Me.SortCounting.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.SortCounting.Location = New System.Drawing.Point(41, 178) + Me.SortCounting.Name = "SortCounting" + Me.SortCounting.Size = New System.Drawing.Size(164, 29) + Me.SortCounting.TabIndex = 3 + Me.SortCounting.Text = "Counting sort" + ' + 'SortQuick + ' + Me.SortQuick.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.SortQuick.Location = New System.Drawing.Point(41, 128) + Me.SortQuick.Name = "SortQuick" + Me.SortQuick.Size = New System.Drawing.Size(164, 30) + Me.SortQuick.TabIndex = 2 + Me.SortQuick.Text = "Quick sort" + ' + 'SortSelection + ' + Me.SortSelection.Location = New System.Drawing.Point(41, 79) + Me.SortSelection.Name = "SortSelection" + Me.SortSelection.Size = New System.Drawing.Size(164, 30) + Me.SortSelection.TabIndex = 1 + Me.SortSelection.Text = "Selection sort" + ' + 'SortBubble + ' + Me.SortBubble.Checked = True + Me.SortBubble.Location = New System.Drawing.Point(41, 30) + Me.SortBubble.Name = "SortBubble" + Me.SortBubble.Size = New System.Drawing.Size(164, 29) + Me.SortBubble.TabIndex = 0 + Me.SortBubble.TabStop = True + Me.SortBubble.Text = "Bubble sort" + ' + 'Timing + ' + Me.Timing.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.Timing.Location = New System.Drawing.Point(400, 288) + Me.Timing.Name = "Timing" + Me.Timing.Size = New System.Drawing.Size(112, 32) + Me.Timing.TabIndex = 15 + ' + 'DebugDemo + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(544, 348) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Timing, Me.lblTwo, Me.lblOne, Me.StartSort, Me.MaxValue, Me.NumberItems, Me.boxSort}) + Me.Name = "DebugDemo" + Me.Text = "Debug demo" + Me.boxSort.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private m_SortType As DemoSort.SortType = DemoSort.SortType.BubbleSort + + Private Sub StartSort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartSort.Click + Dim SortObject As New DemoSort() + + 'Show that we're busy + Cursor.Current = Cursors.WaitCursor + Me.StartSort.Enabled = False + + 'Build a list to sort + Me.Timing.Text = "Building list to sort..." + Me.Timing.Refresh() + SortObject.ListBuild(Convert.ToInt32(Me.NumberItems.Text), 1, Convert.ToInt32(Me.MaxValue.Text)) + + 'Do the sort and report timing + Me.Timing.Text = "Performing sort..." + Me.Timing.Refresh() + Me.Timing.Text = SortObject.DoSort(m_SortType).ToString & " seconds" + + 'Show that we've finished + Me.StartSort.Enabled = True + Cursor.Current = Cursors.Default + + End Sub + + Private Sub SortBubble_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortBubble.CheckedChanged + m_SortType = DemoSort.SortType.BubbleSort + End Sub + + Private Sub SortSelection_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortSelection.CheckedChanged + m_SortType = DemoSort.SortType.SelectionSort + End Sub + + Private Sub SortQuick_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortQuick.CheckedChanged + m_SortType = DemoSort.SortType.QuickSort + End Sub + + Private Sub SortCounting_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortCounting.CheckedChanged + m_SortType = DemoSort.SortType.CountingSort + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/AssemblyInfo.vb new file mode 100644 index 0000000..240f036 --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/AssemblyInfo.vb @@ -0,0 +1,30 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj b/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj new file mode 100644 index 0000000..b9cbd77 --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj.user b/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj.user new file mode 100644 index 0000000..d7b0259 --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DebugDemoLogic.vbproj.user @@ -0,0 +1,64 @@ + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DemoSort.vb b/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DemoSort.vb new file mode 100644 index 0000000..13cc2f8 --- /dev/null +++ b/Source/VisualStudio2003/Chapter04/SortingSpeed/SortingDll/DemoSort.vb @@ -0,0 +1,265 @@ +Option Strict On + +Public Class DemoSort + + 'These are the sorting lists + Private ListUnsorted() As Int32 + Private ListBeingSorted() As Int32 + 'These are max and minimum sort settings + Private ListLengthMin As Int32 + Private ListLengthMax As Int32 + Private ListValueMin As Int32 + Private ListValueMax As Int32 + + Public Enum SortType As Integer + BubbleSort = 1 + SelectionSort = 2 + QuickSort = 3 + CountingSort = 4 + End Enum + + Public Sub ListBuild(ByVal ListLength As Int32, ByVal ValueMin As Int32, ByVal ValueMax As Int32) + Dim ArrayItem As Int32, objRandom As New System.Random(1) + + 'If parameters haven't changed, just use previous list + 'This enables multiple timing checks on an identical array + If ListLength = ListLengthMax And ValueMin = ListValueMin And ValueMax = ListValueMax Then + Exit Sub + End If + + 'Build a new list with given parameters + ReDim ListUnsorted(ListLength) + For ArrayItem = 1 To ListLength + ListUnsorted(ArrayItem) = objRandom.Next(ValueMin, ValueMax) + Next ArrayItem + + 'Set length of sorted list to match + ReDim ListBeingSorted(ListLength) + + 'Store min and max list items and values + ListLengthMin = 1 + ListLengthMax = ListLength + ListValueMin = ValueMin + ListValueMax = ValueMax + + End Sub + + Public Function DoSort(ByVal Sort As SortType) As Double + Dim TimeStart As Int32, TimeFinish As Int32, ArrayItem As Int32 + + 'Copy to array that will contain newly-sorted list + For ArrayItem = ListLengthMin To ListLengthMax + ListBeingSorted(ArrayItem) = ListUnsorted(ArrayItem) + Next + + 'Start the clock so we can report how long the sorting took + TimeStart = System.Environment.TickCount() + + 'Do the sort + Select Case Sort + Case SortType.BubbleSort + SortBubble(ListLengthMin, ListLengthMax) + Case SortType.QuickSort + SortQuick(ListLengthMin, ListLengthMax) + Case SortType.SelectionSort + SortSelection() + Case SortType.CountingSort + SortCounting() + Case Else + Trace.Fail(CStr(Sort) & " is an invalid sort type") + End Select + + 'Stop the clock and report how long the sorting took + TimeFinish = System.Environment.TickCount() + 'Check sort + SortCheck() + 'Convert elapsed time into seconds + Return (TimeFinish - TimeStart) / 1000 + + End Function + + Private Sub SortBubble(ByVal ItemLow As Int32, ByVal ItemHigh As Int32) + Dim intLastSwap As Int32, intLoop1 As Int32, intLoop2 As Int32 + Dim intDrop As Int32 + + 'Repeat until we are done + Do While ItemLow < ItemHigh + + 'First bubble upwards + intLastSwap = ItemLow - 1 + intLoop1 = ItemLow + 1 + + Do While intLoop1 <= ItemHigh + 'Find a bubble + If ListBeingSorted(intLoop1 - 1) > ListBeingSorted(intLoop1) Then + 'See where to drop the bubble + intDrop = ListBeingSorted(intLoop1 - 1) + intLoop2 = intLoop1 + Do While ListBeingSorted(intLoop2) < intDrop + ListBeingSorted(intLoop2 - 1) = ListBeingSorted(intLoop2) + intLoop2 += 1 + If intLoop2 > ItemHigh Then + Exit Do + End If + Loop + ListBeingSorted(intLoop2 - 1) = intDrop + intLastSwap = intLoop2 - 1 + intLoop1 = intLoop2 + 1 + Else + intLoop1 += 1 + End If + Loop + + 'Update maximum value + ItemHigh = intLastSwap - 1 + + 'Next bubble downwards + intLastSwap = ItemHigh + 1 + intLoop1 = ItemHigh - 1 + + Do While intLoop1 >= ItemLow + 'Find a bubble + If ListBeingSorted(intLoop1 + 1) < ListBeingSorted(intLoop1) Then + 'See where to drop the bubble + intDrop = ListBeingSorted(intLoop1 + 1) + intLoop2 = intLoop1 + Do While ListBeingSorted(intLoop2) > intDrop + ListBeingSorted(intLoop2 + 1) = ListBeingSorted(intLoop2) + intLoop2 -= 1 + If intLoop2 < ItemLow Then + Exit Do + End If + Loop + ListBeingSorted(intLoop2 + 1) = intDrop + intLastSwap = intLoop2 + 1 + intLoop1 = intLoop2 - 1 + Else + intLoop1 -= 1 + End If + Loop + + 'Update minimum value + ItemLow = intLastSwap + 1 + + Loop + + End Sub + + Private Sub SortSelection() + Dim LoopOuter As Int32, LoopInner As Int32, BestValue As Int32, BestInnerIndex As Int32 + + For LoopOuter = ListLengthMin To ListLengthMax - 1 + + 'Init lowest-value search + BestValue = ListBeingSorted(LoopOuter) + BestInnerIndex = LoopOuter + + 'Find lowest value that hasn't already been sorted + For LoopInner = LoopOuter + 1 To ListLengthMax + If ListBeingSorted(LoopInner) < BestValue Then + BestValue = ListBeingSorted(LoopInner) + BestInnerIndex = LoopInner + End If + Next LoopInner + + 'Swap lowest value into proper position + ListBeingSorted(BestInnerIndex) = ListBeingSorted(LoopOuter) + ListBeingSorted(LoopOuter) = BestValue + + Next LoopOuter + + End Sub + + Private Sub SortQuick(ByVal ItemLow As Int32, ByVal ItemHigh As Int32) + Dim IntermediateValue As Int32, Position As Int32 + Dim objRandom As New System.Random() + Dim intLow As Int32, intHigh As Int32 + + 'If the list has only 1 element, it's already sorted + If ItemLow >= ItemHigh Then Exit Sub + + 'Pick a dividing item + Position = objRandom.Next(ItemLow, ItemHigh) + IntermediateValue = ListBeingSorted(Position) + + 'Swap it to the front so we can find it easily + ListBeingSorted(Position) = ListBeingSorted(ItemLow) + + 'Move the items smaller than this into the left + 'half of the list. Move the others into the right. + intLow = ItemLow + intHigh = ItemHigh + Do + 'Look down from low item for a value < IntermediateValue + Do While ListBeingSorted(intHigh) >= IntermediateValue + intHigh -= 1 + If intHigh <= intLow Then Exit Do + Loop + If intHigh <= intLow Then + ListBeingSorted(intLow) = IntermediateValue + Exit Do + End If + + 'Swap the low and high values + ListBeingSorted(intLow) = ListBeingSorted(intHigh) + + 'Look up from ItemLow for a value >= IntermediateValue + intLow += 1 + Do While ListBeingSorted(intLow) < IntermediateValue + intLow += 1 + If intLow >= intHigh Then Exit Do + Loop + If intLow >= intHigh Then + intLow = intHigh + ListBeingSorted(intHigh) = IntermediateValue + Exit Do + End If + + 'Swap the low and high items + ListBeingSorted(intHigh) = ListBeingSorted(intLow) + Loop + + 'Sort the two sublists recursively + SortQuick(ItemLow, intLow - 1) + SortQuick(intHigh + 1, ItemHigh) + + End Sub + + Private Sub SortCounting() + Dim ListCounts(ListValueMax) As Int32 + Dim ArrayItem As Int32, ThisCount As Int32, NextOffset As Int32 + + 'Count the items + For ArrayItem = ListLengthMin To ListLengthMax + ListCounts(ListUnsorted(ArrayItem)) += 1 + Next ArrayItem + + 'Convert the ListCounts into offsets + NextOffset = ListLengthMin + For ArrayItem = ListValueMin To ListValueMax + ThisCount = ListCounts(ArrayItem) + ListCounts(ArrayItem) = NextOffset + NextOffset += ThisCount + Next ArrayItem + + 'Place the items in the sorted array + For ArrayItem = ListLengthMin To ListLengthMax + ListBeingSorted(ListCounts(ListUnsorted(ArrayItem))) = ListUnsorted(ArrayItem) + ListCounts(ListUnsorted(ArrayItem)) += 1 + Next ArrayItem + + End Sub + + Private Function SortCheck() As Boolean + Dim ArrayItem As Int32 + + For ArrayItem = 2 To ListLengthMax + If ListBeingSorted(ArrayItem - 1) > ListBeingSorted(ArrayItem) Then + Trace.Fail("Item " & (ArrayItem - 1).ToString & " is larger than item " & ArrayItem.ToString) + Exit For + End If + Next ArrayItem + + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter04/SortingSpeed/obj/Debug/DebugDemo.DebugDemo.resources b/Source/VisualStudio2003/Chapter04/SortingSpeed/obj/Debug/DebugDemo.DebugDemo.resources new file mode 100644 index 0000000000000000000000000000000000000000..24379ba0a8cb61c130bc0ebc4ac085e9c4f5fe25 GIT binary patch literal 4029 zcmeHKTSyd982&YN4J*26N*5bU(rVdOOijZF-7QF6Q+KrtYTMa8+2qU)%*B*IFnsbk z!jg&}f-I;WQhG`vBB-#UAo8i#$`ap<$ogj5UELiekbP@s_n$N8obP=9?VO*P$rm$^ z(}?IgWVg3Z)tKaHW2&qxL8iu@+E^gO6gwxWL0J(6UbQ0iuqH?>y41_G1+<;(V2Ucp z;o35X(@|dTbUK`N&ZUc*uCUrL(={a^+PM~;7lmLW>+{LoEL_W1RRt=76_sVx<@=fQ zK(%3I0b~{AR78KhEQ>4M>h_%Of8Hl3UItdQl8)vPV+?|I^z?I}4uP*8ntU%yWt z&3dVIA}do!(RQ@=(K?KD;i`n(gZt=lu zX~}qQ#YW}gr>z{V0Bz%um)>RUnFXLI5n$yhvB4J6+%HEFtHizi9MfF2BoHC*3eAD>K*?m+oorxUw%Jj8#d5-qMVdh3&~F9YNanfsU3)VkvdnA_ua%I TnmSjhbG7(WDOD~0k81G;_%8yo literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter05/ErrorHandling/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter05/ErrorHandling/AssemblyInfo.vb new file mode 100644 index 0000000..1ab76fe --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/ErrorHandling/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.sln b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.sln new file mode 100644 index 0000000..4a73ea3 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ErrorHandling", "ErrorHandling.vbproj", "{20437FF3-C011-4EBB-B7E5-3E4313ED2279}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Debug.ActiveCfg = Debug|.NET + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Debug.Build.0 = Debug|.NET + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Release.ActiveCfg = Release|.NET + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.sln.old b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.sln.old new file mode 100644 index 0000000..8c51823 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ErrorHandling", "ErrorHandling.vbproj", "{20437FF3-C011-4EBB-B7E5-3E4313ED2279}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Debug.ActiveCfg = Debug|.NET + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Debug.Build.0 = Debug|.NET + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Release.ActiveCfg = Release|.NET + {20437FF3-C011-4EBB-B7E5-3E4313ED2279}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.suo b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.suo new file mode 100644 index 0000000000000000000000000000000000000000..16143064e942cd533c88c6e0997c5515267b6375 GIT binary patch literal 7680 zcmeHL%}*Uw6hC~}0v6h;V6C=}q*gRSXrUp3t(Nz|qC8rG3Yxchyf?t3!wh+EfD(0K z;==d`7>o<;!o;XCai>kxg^5u&?Z&v##IAH2a5NQeu*pOEM}+JZ-s%yACb9{&b}Q@$Q(^s__`F)MFF&>}$q2 zX+)lp35iG;mk!xUnS&pw!GyZ6peK%6IeG~4xo$ikl;g|q&&SIVSjrhNWCr)k0j1_f z(;&YE&HX4r?I&h`;0{4uh~u0SZ*9{auTBi$R1pWb{)q#W$M@I*vV0zYEBe|{?nF6+ zau>>Bl)F*xK{M`yzLJdVTF5f(lx3(T zTOW?uF%H`_9U0Xo;`92VYBqKIk~?h02Xidjaz6_ypL?aZ|M}$)E1MGqk?g8k z^5My+KZDAr?AP4D^~;aI_C*!_YlsELeF7~;VQG5UwV(S^Q2E>|C*9%bZ)f$Hm~}&F zzoBB!Sq}@S$H5U&b3smKNjYu$A)osqWs}@tD?Se5En|=r#<+3B|Dro`zRef#ju}a% zNa%L$cccfCe;ed72J(sfzlq}Dm}C1K)tka}R z#(-&)3J>GbhbOd;ScSuQPx1({}p& zWBr|NVj(D@?uX>-dc6+mW+u~7D|MsCvVR{w`SI=5FVUWEU|+2quX$c=qrK|;VFYN8 zbRu}WRr zt@2}$0SqAGipDT~5WHp4@`${M)sXEs9v{9_~V_$ z!te?GQi{5OKg2TTfkE-_cJT5W5;G!P!}0%p7`&Ki(UM-+u@GXR$Y^eC}1x zxeMexvX2Es0I{wd#`|UFw~xYp+QT>uD*q^Woq#9a8n7{qi`k-%Sg1}5oPUKe%(GZf z`T6-*nPs73b3o2u)SZp?aoEWHl{V}0LUwoP0yYn-*=FuH2p)PUx9%R@aZPfWM{q58 z5Bh^6LHTpVhwE`iDBErM`Od?1SqIPrdW)TQ7}oeDtnLJ$bAye`pXvcn(N8|2?ho z{1R8E7w+e|(+mH6c&C>%EG|C1aHjmH7v}KJ>4oq7rx#@z)Xn*C`kM12sMvpC3qTxk zOI~@y8JzYHm$ZND)&)>I%i`Ie?WnTy#g)gd{?z*H*y~;IHC*}m^!HVMp55b^2QOjO z@!ZKdbaor&yOoLm--tWRDTCsV2Hq8S*o%k}N{wN?>nMf$S}xCa*^3_Su6)WS6)}|P z$j3kLKcn~maRM<-AMgyyU1>87h`)|x=UzfwQCB;9yz`f5?+E-b3(1^^YN%}s@*jWz z?iZvSVmasU-1%<}`7!@Vmickwe9rS{)%JJbTkgR-Mb-L$r{sF${NLq!e%O89d>;4< DoBaiW literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.vbproj b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.vbproj new file mode 100644 index 0000000..ced4eb5 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.vbproj.user b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.vbproj.user new file mode 100644 index 0000000..9715303 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorHandling.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorTest.vb b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorTest.vb new file mode 100644 index 0000000..6d67bed --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/ErrorHandling/ErrorTest.vb @@ -0,0 +1,41 @@ +Option Strict On +Imports System.Data.SqlClient + +Module ErrorTest + + Sub Main() + Dim strConnection As String + 'Set up database connection + strConnection = "Initial Catalog = Northwind;" + strConnection += "Data Source = CHEETAH;" + strConnection += "Integrated Security = SSPI" + 'Try old and new error-handling functions + MethodOld(strConnection) + MethodNew(strConnection) + End Sub + + Function MethodOld(ByVal ConnectString As String) As Boolean + Dim objSqlConnect As SqlConnection + 'Test database connection with old error handling + On Error Resume Next + objSqlConnect = New SqlConnection(ConnectString) + MethodOld = CBool(Err.Number = 0) + objSqlConnect.Close() + objSqlConnect.Dispose() + End Function + + Function MethodNew(ByVal ConnectString As String) As Boolean + Dim objSqlConnect As SqlConnection + 'Test database connection with new error handling + Try + objSqlConnect = New SqlConnection(ConnectString) + objSqlConnect.Close() + objSqlConnect.Dispose() + Return True + Catch + Return False + Finally + End Try + End Function + +End Module diff --git a/Source/VisualStudio2003/Chapter05/HelloWorld/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter05/HelloWorld/AssemblyInfo.vb new file mode 100644 index 0000000..bdcac6c --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/HelloWorld/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.sln b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.sln new file mode 100644 index 0000000..72fecac --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HelloWorld", "HelloWorld.vbproj", "{B17D4890-3D55-4530-9BAB-331E9F4DB432}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Debug.ActiveCfg = Debug|.NET + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Debug.Build.0 = Debug|.NET + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Release.ActiveCfg = Release|.NET + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.sln.old b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.sln.old new file mode 100644 index 0000000..1fad0c7 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HelloWorld", "HelloWorld.vbproj", "{B17D4890-3D55-4530-9BAB-331E9F4DB432}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Debug.ActiveCfg = Debug|.NET + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Debug.Build.0 = Debug|.NET + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Release.ActiveCfg = Release|.NET + {B17D4890-3D55-4530-9BAB-331E9F4DB432}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.suo b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.suo new file mode 100644 index 0000000000000000000000000000000000000000..ab361fc693a38a8863623af7082763e907a72f1c GIT binary patch literal 7680 zcmeHLO>9(E6h6}yDSrh-Dk9($!61RASO@}wmYE`G2e2)+n#N>)UfY2;^O~7~(x{2L zGOk=gTqp|@qsD}tlBf$4qikSf+-RaJU6`mVT`2YY?tORO%$u3V>rXT!J(K(HoBQs) z=iKx2-E;5F8*6{Oa&_ZR5}+f}Dz|2q$z4_LF}$-VS|iee7yiFBGc%(bMew>vcaR4D zfvjzw4VR#%y_cdaLup4@jGm7z)EQWN78s+ zjL6lO#sYuxT{{c@#O#l~DJTnZoHpS*3)f@bxh~q3<{}O-{yR`sqfqbU%f9Qp+Kgkp z0d4o8Y(%*qWfRI~lr1O^pjasEw-xn6-urg1W_u$t^Edjo*fx6&{2r%;=T7vC)d~AT zE@NA9w@@y+jtbefM5>(Pw97}5{nlV+!p^I|s}i}C*<9HzvcsCBo6b45HEgG? zV{S38hA*r6w><9VC*6WwD65aFhI56iJ5}<#w;dl!_H(k1xRaYqyQyN<8psvK*|hX2 zyI>bn4&UpEu`nOv_%upf4$3H^*Ol|Y4kE@VkcF6b9th{)OBrujw7Bx9bmP~99&wq# z*GYUM;&jVCv>nI0gP$wIC`G(w(W$_@~EC zDoM)N1&*q@raV0M1gNWke--?v_tkZ1(7+fr%|zWaG&7DLbubKllp*~D{wZUdj!kOf z-#UCFensWaeCHl-z94_D+J+40U=K#}4o(7Lqr~n>Ms!o>lOA1o`)251{wZ zCuq|`D0h*EJ^bf>7L`BqJG1|JVhDA@5Yc|DePJBBNJ$=kbqumN$|9rKE4d@m&q^p` zkkhL1bgRbKyW}J?iy`H=8QG7TW6P*TUjI+{(VrZwVho%|Av2?MwDSM|l|su#U0ko| zA_1*t5D|IkTYH}cD-?hN)U1uw&@&2%7shul+Vkqa&Yx(pGG-{^TM|)hA+HI}SB*?T z|D&bJs~X85T2nIq$9RhBfAqZGHNeC{&*<;F=X#c!VOedN;FXWswr-PZ5V&_e|qE1k2$^Z zW~%=5#z+sI-gs`&r?)B0=AYiw@*x5szXo?lZZIZA=BujK*=b_>cAA}TXw-WAp#Gk0 zsK2>rC&bj#jTdP2SDlH_)Q#nb18GmVYS#bNl_#$Kvi|v#m%Bb}zw+zhADU&}MElyz zI|YQ#({y#j(*-l{EIgogzEPmA?^PE3%l9h_yJqn8emid}iCI5S|MlZDkboyhow?Ch zgPEJj5ts+_8+}&aeln9_z8g-&AL0&k>Ztg$4SgrQY0p4Da-}wH6eEwh!3gIrvULvl zTaAC_p4r?#4%W+QVw*Ip+Lr)_Vea7z1b8VK&t1>7RG9 zlp)I4UFgKSTau5a`u@c~|4qY-c_-cE;!F?c{ll!+zZ+wD23jaGx{td4h2m@Gxs&<- E3nn6$xc~qF literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vb b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vb new file mode 100644 index 0000000..c1e98de --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vb @@ -0,0 +1,9 @@ +Module HelloWorld + + Sub Main() + + System.Console.WriteLine("Hello VB.Net world") + + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vbproj b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vbproj new file mode 100644 index 0000000..82445fd --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vbproj.user b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vbproj.user new file mode 100644 index 0000000..9715303 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/HelloWorld/HelloWorld.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestOne/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/AssemblyInfo.vb new file mode 100644 index 0000000..b81bc27 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.sln b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.sln new file mode 100644 index 0000000..04e62dd --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StringPerfTestOne", "StringPerfTestOne.vbproj", "{8454C1C9-B876-4ACF-8562-02C70E18505E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.ActiveCfg = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.Build.0 = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.ActiveCfg = Release|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.sln.old b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.sln.old new file mode 100644 index 0000000..0429d40 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StringPerfTestOne", "StringPerfTestOne.vbproj", "{8454C1C9-B876-4ACF-8562-02C70E18505E}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.ActiveCfg = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.Build.0 = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.ActiveCfg = Release|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.suo b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.suo new file mode 100644 index 0000000000000000000000000000000000000000..058d266917901b29f2d595f8c04a624287abe25f GIT binary patch literal 7680 zcmeHLU2GIp6h8ey+DZ$kt%!mnq5%R8Ab+-kDZ53%Zi{WP)$GguOqYe(oo07SX+)zw z8K2+{;)C*FV$_)UrX->XiBVtR#rUF$KIwyr`lK&Xzwgf6o!RN`b`}~9Nzdl)%-lJ1 z&bjBF`<-*|jq7WFy8OxdpCv$tq(yGdx656={wCbBDOw}aj2k}RoS&a}Iz@21Om~n6 z{(-Hn?i{YbmGiw4tsSimtpjZp+TCcJ=T7%}2MuxA)H)s*6&t^j7&0h%TnjRX84gc9 zvZB1^87uYZwF?*4*j?9}TEO(B%RDX#DavUXk}R$zIe~u@R_Oj>J%M<)S(=qR#w>@q z2z&W8W1DnTUXU?~NfbX5y0emjA85gt`agr76z*!#Ht6S?(JrpV=kNF9LLFL0gF9oD<%&aXk8-IKZjm`X>%>{Zk*`BL$TCG=Dex zdeH7iTZi@l+IqAH(H=tEfJWYjaW&lgP41Qb)kw>(_HMcF_B`-Mgfo2W#JE@;HP2*I zrV+98rGjm#CEFTJloAx%F&P^&#!@HEoOdTpSEX<9((Jvxx*}>7<<~q>a&RKEtk+&zO0$ zkg#~akhm6Zhxq+8T15IJj@4_+46uWU5eKpm(`JBh7T%O_mqw2*yJaVSPkc=+dh zJFPU9kOdAaS+kHr+iDT;Pt}2pB1U2@K7T*gvwkM(CgGV3e$+Dof0SVTNjxov{geUx zD`Rh1{j7KHa}5aU=crBCa2m5>t688QYtt6sFJpkZNwqn>H>|VHxsO5pgUA7l9>xUc zG+$S{$m7sYz07A}^)pxM{O6jX@SjWMn2KX37BcWfLUQo&5!hm>8HpoTG9xn1ifB`? z)2N7aqaxOOWf+ykxLOS<*^eu~E#WHi#($!Z@nm5XQ_viT&0L-F^7H>|g=3pu&zuVz z>!1;@^Bd;xAcgG<#vf-o51jHNSx~nBS;rsOQ`q=p?49SL0R{EP5M?=dfpzGFYl|&J zq3X2Vjepi9VfC|C8h6EUy*cQcN32`ENUy}w2y9|~Y^s0Hnm*`f4y109E4J=sE#4A? zNKwd50snHYWdE3t;~gu~dPuMn`dODb+QaF;2mHhUQnfg7-h}_JCL?Sgu@ID2|Lf%2 zR4#tu zS2gY<5Om9`Va6-ci=odd#PsxzDD?MhWyDsu&B^rSZ9^_tTHE^N&=O1Rl~KewGYNNn zCbFQ;552(W!{~K#|6%YjBs{-Awd9s~$P?ZQ?t})gUb!OA!2SrVW|2wnGZHwG85`I4u9|;_+Qo?7Jr$mUUC6y1l8v$AON#&EsPK9^gnOJ_&FZV zepvmSu&b_+2u9DfP*gRP2`p&L3Y>okF^qfhu=@S=w|`$D^7b}}8AtK$6v5oC__rZU z%Q={v#}Y8Xc_}H+8{Ge-RMp6O(A)j+nzo!=35VlAAFD!qMPuG*4r+DsI>8SzbDSFO1 zBXv-b^UmEEJrzW8ddh$LP`M}bpA+aBhjs8Yu!vHf(@$1HTzU10=dZ*a)|6rK=MnI} z>WV#qQBf&c=o5_k+C?_G`l*|=7(d_p@lT&K>+|O^U=n@6I)quttMsc&CjL5_ zo&V}wmA#MRQSZO?c#pylQ_#$LXoPxhLH|}LV7?%E6^nEJ;_d(DunKu5UE|=)`JCqu X4UeA?!yLR+)TsZLO0Sl4C+q(g`c#dL literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj new file mode 100644 index 0000000..0c0fd7d --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj.user b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/StringPerfTestOne.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestOne/Test.vb b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/Test.vb new file mode 100644 index 0000000..aafbbb1 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestOne/Test.vb @@ -0,0 +1,15 @@ +Option Strict On + +Module StringPerfTestOne + + Sub Main() + Dim strTest As String = "Coming up: ", intTest As Integer = 0 + System.Console.WriteLine("Starting...") + For intTest = 1 To 20000 + strTest += "another test " + Next + System.Console.WriteLine("Finished") + System.Console.ReadLine() + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/AssemblyInfo.vb new file mode 100644 index 0000000..b81bc27 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln new file mode 100644 index 0000000..e6c7833 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StringPerfTestTwo", "StringPerfTestTwo.vbproj", "{8454C1C9-B876-4ACF-8562-02C70E18505E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.ActiveCfg = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.Build.0 = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.ActiveCfg = Release|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln.old b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln.old new file mode 100644 index 0000000..8a00ffe --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StringPerfTestTwo", "StringPerfTestTwo.vbproj", "{8454C1C9-B876-4ACF-8562-02C70E18505E}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.ActiveCfg = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Debug.Build.0 = Debug|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.ActiveCfg = Release|.NET + {8454C1C9-B876-4ACF-8562-02C70E18505E}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.suo b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.suo new file mode 100644 index 0000000000000000000000000000000000000000..69979c96abdcfcdb6519ef0e4c5da15297a98d4a GIT binary patch literal 7680 zcmeHLU2GIp6h2#u6ogV#5KwTeXb@oo$e&a&?Y1b`<)) z+;h+U&bf2_+L|9{KHT_|gy^s=k(;y2<&Hpo0`Dw}Iz(FV!ta~2v$Jlc2wrc~Eo6be zplhqQhD-6}dM`s+j?#v*0%ax2ohV%ARo?R!n&NF$8(3gKY+Q~Q(kCT6%QB4>j!)}k zX?4%jR~k{rN2fN}?O!C8uoE2$G$a|R$T{hk0-lbX#@&P#y1wFei@a}<7R8S~%V|b- z3^mZVNk`?33`$yhahZ@^kUZ=_4F=Wy0&22&i=u6i&po3}9MvyaAH>U}m?>Alk}=#b z#+2%FGa$bmpQ};g&Yzh5fyaWn5XZSDd}rZ&^gD5Y>&oRK4sicd9@`NDs{M5TwWwQ% zaxcnylnp2wQSL*zA7v8?`#ylDf%2gD{gC%$TRqbJ>$TmkTet;&OL2u4PV|e_z2=2N z)-+Of$tl~G+On;^87D)wD@M}&#$a~BEUM2{y@iZr=Z(Hx!LiHi(2=&s3YKXMn`6ci zyIfSmm)Cr)NZG|nyJVIe)wpW7P|Dd;6~BAyGehZqGHXv+g~>5HQ_dL!g;JhX%bqq% zW;tW=eJ&;DRy9?_@slViIVhvpy|$bOb`UW}fh@$d^FTNYEe_stsIg_Y?8NmrdZc6m zt&?aY;_Q^YiU(1+02Ip0NmV}%j372ScurybsHdSNMl~NJUjzNic%DV?EP7Yw;YL0_ z{<&i(l|%G=N&4>Nu z0sO0CZ(RAzckb~N2+QZJP3UkAt75BFpdF)WEAW>-K-r||o_-7StQWn{u>3y60D2F7 zf@@l8C|%?c$fsP!v$*mZD|P(y)KK`(EpklxvFi(Y*dilE*!T!^vDAu;B33dY($6X= zrnq%s|Km!RfKx#v3-bu^PG(_Pb?l%{GOYn6o;OVtknu1Quk4<&=wK)j+jDeI*QcUN$ ztwB36h|~+dS>RvM;~bpxNwhH|ZG;3nA)k4fD?Oh4yU?E)K&s~_ZcF@oJsxrEh=rh> zy04dSTFoU$H)m(Jwn(D?vbK_ZdgJY>ukbz6#<~{So_IkH$R63N#_vKPeL{91WE}v+ z?8Dn0=|h|N=C%aTV0xs7g4f|Wl%8b$(g-_>!z}f>u4k>&T z=>lUBPc+_BV60F@3ow6#56H(qrrE=0 z3u_z4emr+wzxw;gtDT?py?^lA?3F(*Zc@4`n{MsUwE%urqBo$BeyOFl%#N3L;COC9kUOfx|EqI@~?)YYHYK6m`} z + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.vbproj.user b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/StringPerfTestTwo.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/Test.vb b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/Test.vb new file mode 100644 index 0000000..19a18e8 --- /dev/null +++ b/Source/VisualStudio2003/Chapter05/StringPerfTestTwo/Test.vb @@ -0,0 +1,16 @@ +Option Strict On + +Module StringPerfTestTwo + + Sub Main() + Dim sbTest As New System.Text.StringBuilder("Coming up: ") + Dim intTest As Integer = 0 + System.Console.WriteLine("Starting...") + For intTest = 1 To 20000 + sbTest.Append("another test ") + Next + System.Console.WriteLine("Finished") + System.Console.ReadLine() + End Sub + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/AssemblyInfo.vb new file mode 100644 index 0000000..c42de65 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln new file mode 100644 index 0000000..b6493f9 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BooleanSwitchTest", "BooleanSwitchTest.vbproj", "{74999BA0-648F-4433-B23B-66CD0A996617}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {74999BA0-648F-4433-B23B-66CD0A996617}.Debug.ActiveCfg = Debug|.NET + {74999BA0-648F-4433-B23B-66CD0A996617}.Debug.Build.0 = Debug|.NET + {74999BA0-648F-4433-B23B-66CD0A996617}.Release.ActiveCfg = Release|.NET + {74999BA0-648F-4433-B23B-66CD0A996617}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln.old b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln.old new file mode 100644 index 0000000..2e701cf --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BooleanSwitchTest", "BooleanSwitchTest.vbproj", "{74999BA0-648F-4433-B23B-66CD0A996617}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {74999BA0-648F-4433-B23B-66CD0A996617}.Debug.ActiveCfg = Debug|.NET + {74999BA0-648F-4433-B23B-66CD0A996617}.Debug.Build.0 = Debug|.NET + {74999BA0-648F-4433-B23B-66CD0A996617}.Release.ActiveCfg = Release|.NET + {74999BA0-648F-4433-B23B-66CD0A996617}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.suo b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.suo new file mode 100644 index 0000000000000000000000000000000000000000..2431c6e8a08943a62056fe383640c56287f98816 GIT binary patch literal 7680 zcmeHLPfQ$D82=W~Qrgm1ZLO8ou~KcDc10o8QdJZg_^}fnqqnCY zl^VBpe_UtRei^AG5*-VpPm+?8v(h1HT=Q}U|0cN5^En4C@V_2e2&qW;gOh*bR6PPzTrpAnrrB8i0oZ`v8vs>H+%!j{=Buz`gRmcxZaX^Xt#$Y2a3j7GC*a zUDz5o&!tnQ5wop)*3PJqt%@h}Np4#+kmxXaQ)A|YdfXCECo}e_(KejU+gT!POV~r{ zjA`_nL&hmPJE30RSnyO6vnM8P%e3-paZ7*N8n&l%9(vXDeTfckRvXKtCx`50cG&1i zTce!X@SJIx*<^`lE>XJW^8#< z8t`ibMoh-AI*B#ryaqXnxmI8>ADLLO@ZL1u$z#VcWGYkT$Uz^6tL5LzKXJ8tT1G*Y z+=R=7$UhP03+4uTo{zP_TgI+lB-J5kW)weC?T6Hkw3K!E!TftK(3r!*(r2Bz&)vG1 zKC>=0e->7;p?TKCQhXc${jDzTu=LquT@0Y#h8jfgp-<3Ptdi83E1mkodKQ*GdplkK zise70WF9W?WS7+?FPc8}8J0e2UveF{n0^AXPe5+=A^k2dHew*i28SU(YZvQMSo*YA zAAp1UcB0RM)iXl*8GAXm9*^Tb1&o-o1u+XfqIm`Nm%W1SmEzbp1^=ILclOKNjkO&3 zDdhqCx=|x6ig(NsLd|DYqufpDly-E%+0`820OlK72 zx~OzQ$9*arrsOGH`EDLpkvIMmddw#oNHGG+gW#FjdGO!o|CbAgH-A2dO3EJ0eZ^xn zbH#hz$!F$5jA8Y^OTMi#E8)uM{VJrgQRJo9GER~3_m_U!B|Wn{xT}cSf!K7Kc|p^ zohTRw#tGFQiyX(cA}(pQ$tp-gfLA37(Wh0!cyzl|_V-g|##)*;Cp!_hTJ_E4@>VMU z=(AWHI-y>c8d2mQc984?!{#5>Yi(I}Od053=QtalC2fwS zu?lBdt6p&fqzm20I6Q#4E-1$rzFqjVcLntKVv9{K{TQU@2{@;6s0m*vj|-fCBa8u- z)3EaU`>%koP`-IwPGZ+`J*w1>QRzXQb9!5z^Dn~xo%#?(er{FPW~bW<9Hs;>?w+~r zoOqo_crI9FTTnmfljp#H3|#Y&!RVtEygiR2w!`R;b@%4=KL+01_i5V)&EKW2{CR#4 zZ7H>#y+3^Z`{u-3`>%Xa@y?FF)MWOX(=7+DjKA>S_wT;mGylo^5w_htX7{O3VdKcp z89XSkt$|z6*O)o7;MfAM-B`+kYkigwN%NQ;L$Kw5W}`5Ad+CodYb$mRNF_Ulrp zB6B>%)7Wh0s4A*v1O|3etw#fU)&Vv6)DwbeAHv4QCUcb5+nTCyqKTafy$*XFQYd4P zhHX9%WPY`<@tnZC1tSxE&QR#gLt43QN*s299oUuDzg%d678TCa7cDSHjRi~R+2L9U zRn06?|BD9CpDER~QA+Rh$!}Qt^hwh$K7BIMicg>X3g(?Yb5N{4eX{rEKI~SMGvaE= zzzxO($4n_L%oxBZw9H~XD(S+g>H_IGgYtJSDgWxF(=~AN2492`OE4s(wIcO3w!T_M_GH0;%G6+fy)*sd#o+-lCpT~gvn!D*4_z + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj.user b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/BooleanSwitchTest.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/Test.vb b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/Test.vb new file mode 100644 index 0000000..2a785a3 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/BooleanSwitchTest/Test.vb @@ -0,0 +1,25 @@ +Option Strict On + +Module Test + + 'Create switch for controlling tracing in hypothetical component and set + 'the boolean for this switch – setting could come from registry or config file + Private bswTraceOutput As New Diagnostics.BooleanSwitch("MyAppTracing", "Test BooleanSwitch") + + Public Sub Main() + 'Create switch for controlling tracing in hypothetical component and set + 'the boolean for this switch – setting could come from registry or config file + bswTraceOutput.Enabled = True + Test() + End Sub + + Public Sub Test() + 'Show whether the BooleanSwitch is enabled or disabled + If bswTraceOutput.Enabled Then + Trace.WriteLine(bswTraceOutput.DisplayName & " is enabled") + Else + Trace.WriteLine(bswTraceOutput.DisplayName & " is disabled") + End If + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter06/CustomSwitchTest/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/AssemblyInfo.vb new file mode 100644 index 0000000..17cf2fd --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.sln b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.sln new file mode 100644 index 0000000..52bba7d --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomSwitchTest", "CustomSwitchTest.vbproj", "{02FBDF20-1D73-429D-928A-15C519BAD91D}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Debug.ActiveCfg = Debug|.NET + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Debug.Build.0 = Debug|.NET + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Release.ActiveCfg = Release|.NET + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.sln.old b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.sln.old new file mode 100644 index 0000000..a26faad --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomSwitchTest", "CustomSwitchTest.vbproj", "{02FBDF20-1D73-429D-928A-15C519BAD91D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Debug.ActiveCfg = Debug|.NET + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Debug.Build.0 = Debug|.NET + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Release.ActiveCfg = Release|.NET + {02FBDF20-1D73-429D-928A-15C519BAD91D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.suo b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.suo new file mode 100644 index 0000000000000000000000000000000000000000..7e18635687a8ad5527c7c5492227a9c7b0f589c1 GIT binary patch literal 8192 zcmeHMO-x)>6g~rJDYlea!CKq;M5?s01gf>t+A7R|wlZx6DrndY!vluS%p)@c6s?K6 zGOkLxsVik+B5F+B*(U13#HgEgW87$>D_xkVE8ST9zWd(g%^POkylJb3ggZI!=ic+q zIrrT2ckf)gy7kA!k9Yhe1?`wr%k|}ra(iBX2+su78bqq_!1wFR%gc7B2p-ql8q&bu zkhR8HL$390fLg!?z(&9(Kpo%?z-B-_fa^_IZ);xz{bJ#l6GM6=jeADsvBJSy6D&q+ zfwtn;p1L??SoL3os)6*XgFGlP$;w&jlLYQLIfJVSDRh6E-dA1&zlXWP zH{O^RwnWU?MBFsORyvollFDUkBC%YIWb1~bea1k1(oCt>&5=YbX-ybCV~L!VAwomc z8cifkW5^sedaX=KeZJB2Ru{HX(^lF{=hWclp+tJjn#;QAHO~x2`$()loJ>rQTCvQS z(Vs|9uxrE9X4=fel6+p>LaVzf>f!fkKv)jT2t3)68Tc(@#|S)|F>MABE{TyGp2pB) z$pLA{?-5{xWfG&)7-P(9m&a7!jEaPor0~@ozQ}>zB;u5*`bRwS-K_j>{D~;~37Nor zC{3_Pi1-s?ywH~B5w64weO3>V>nJocfgiaJK_B*fIot9L@ppwcWhnoJsCapogILI) zQP+eFXR#_4bkCgVCr2yh&o!uI{;aWHD#5=8If&Lno1m?veYrDMR)xr$`HXjmtnZDv zQs=+I`S+?hk9jQFkC^69eFo)E-WMFhE#x1?+*6o0>yRNw77JcbY7HKC=Fhwols|Lz zAb^efw!JT{{FL)gLWZo9kEie)2S!+}1u?xAaoFKc-fT8i|Lax^GiS3!KsOHiPdSwH z=X@GtS;*sO3GEJl=IEgO?*uMwAipvHGen+Ham=noCa?-INM?wul@Zh`tc_T!WC7!l z&hSJ!!xQV;VD~fI~_t|-7k-#rxS1caXlc9OBbFxI|2pDQC) zaoOzXMBG|cH&-f~U;NQ~u?TcRy%cM0h(C-StOJ9_pKZX^E6a*03H|FBXUExb#Fz>6 zGXCh1V%$X#{}o^IW-E^6?Pacd(Q%Mds6M7(0gQE}V!Zcj@7r$7pYx#|2IapSxI+&A zFlNska8|`o6Sh#96xja?ZJ2wpp#1aeuM%#dZ1ad51Jz0`%8z23^drwPzjDr|oQM6} z`JoN*xm&F^Yu#?(FeJEs_rxui#H~DnOTjGLh5SLAoQ3>hNX<f-^MTfd2W{~jp|PheE->Ro1$;-x%7F}+l_yz&dk>*y7pe0diK5V z-g&M6`X}$JqX%xY2bHU^aO80Yw+bw4a6C&}W8}y{;xuGEjiC&r*1HLj%ZBIsVp|T8 zg;pSi;gMO;;?Bfns84QK8IiWgQVTAAOiw9PP~}da7Qu>-`lSBGVFh+Pc6os2PM~%J zjp2gklLiNOa}($tsjax7;^8?^Q*lu68nthj5-*Bz_VloG){BU&(4 zQS4FEVX4>$sx*-W?=p2MpQpaKOiRtU8XXgSJtxHMzVPel!GSO&ss;BGVZja;j8p1fduXjS7e)? zvgQrodlzuEy61zcsc<~!#zdN{KHss-XVGh)<>@NG83TXvFn;ryFOQ^N7y;Po%`bsWWw)|5R-M9r%_t_^oP{ O`robMtLdy|{{H~N#!Pqs literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj new file mode 100644 index 0000000..712c958 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj.user b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/CustomSwitchTest.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/CustomSwitchTest/Test.vb b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/Test.vb new file mode 100644 index 0000000..b265118 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomSwitchTest/Test.vb @@ -0,0 +1,96 @@ +Option Strict On + +Module Test + + 'Create switch for controlling tracing in hypothetical component and set + 'the boolean for this switch – setting could come from registry or config file + Private AppTrace As New TraceSwitchCustom("AppTrace", "A custom trace switch") + + Public Sub Main() + 'Show a trace information message + AppTrace.MessageInfo("Trace information message", _ + "This is a verbose version of the trace information") + 'Show a trace warning message + AppTrace.MessageWarning("Trace warning message", _ + "This is a verbose version of the trace warning") + 'Show a trace error message + AppTrace.MessageError("Trace error message", _ + "This is a verbose version of the trace error") + End Sub + +End Module + +Public Class TraceSwitchCustom : Inherits TraceSwitch + + Sub New(ByVal DisplayName As String, ByVal Description As String) + 'Chain call to base class, then show that tracing has started + MyBase.New(DisplayName, Description) + ControlTraceOutput(TraceLevel.Info, Me.DisplayName & _ + " trace listener created - trace level is " & Me.Level.ToString, "", 1) + End Sub + + Protected Overrides Sub OnSwitchSettingChanged() + 'Show that switch setting has changed + If Me.TraceInfo Then + ControlTraceOutput(TraceLevel.Info, Me.DisplayName & _ + " trace level is now " & Me.Level.ToString, "", 1) + End If + End Sub + + Public Sub MessageError(ByVal Message As String, ByVal VerboseMessage As String) + 'Show trace error message if errors are switched on + If Me.TraceError Then + ControlTraceOutput(TraceLevel.Error, Message, VerboseMessage, 2) + End If + End Sub + + Public Sub MessageWarning(ByVal Message As String, ByVal VerboseMessage As String) + 'Show trace warning message if warnings are switched on + If Me.TraceWarning Then + ControlTraceOutput(TraceLevel.Warning, Message, VerboseMessage, 2) + End If + End Sub + + Public Sub MessageInfo(ByVal Message As String, ByVal VerboseMessage As String) + 'Show trace information message if information messages are switched on + If Me.TraceInfo Then + ControlTraceOutput(TraceLevel.Info, Message, VerboseMessage, 2) + End If + End Sub + + Private Sub ControlTraceOutput(ByVal MessageLevel As TraceLevel, ByVal Message As String, ByVal VerboseMessage As String, ByVal StackDepth As Int16) + 'Validate parameters supplied by caller + If Message Is Nothing Then Message = "" + If VerboseMessage Is Nothing Then VerboseMessage = "" + 'Add system date/time to the trace message + Dim strDateTime As String = New System.DateTime().Now.ToString + 'Add originating module/procedure name to the trace message + '(catch any stackframe error, probably a permission problem) + Dim strTraceSource As String + Try + Dim objStackFrame As New System.Diagnostics.StackFrame(StackDepth) + strTraceSource = objStackFrame.GetMethod.DeclaringType.FullName & _ + "." & objStackFrame.GetMethod.Name + Catch + strTraceSource = _ + "unknown procedure (stackframe call failed - check permissions)" + Finally + Trace.WriteLine _ + (MessageLevel.ToString & " message at " & strDateTime & _ + " from " & strTraceSource, Me.DisplayName) + End Try + 'Write augmented trace message + Trace.Indent() + Trace.WriteLine(Message) + 'Emit verbose trace message if allowed and supplied + If Me.TraceVerbose And VerboseMessage.Length > 0 Then + Trace.Indent() + Trace.WriteLine(VerboseMessage) + Trace.Unindent() + End If + 'Finish message + Trace.Unindent() + Trace.Flush() + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter06/CustomTraceListener/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter06/CustomTraceListener/AssemblyInfo.vb new file mode 100644 index 0000000..0e631e6 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomTraceListener/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.sln b/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.sln new file mode 100644 index 0000000..f9976eb --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomTraceListener", "CustomTraceListener.vbproj", "{39549A95-F908-4BE4-AF53-C349C8E49FC5}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Debug.ActiveCfg = Debug|.NET + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Debug.Build.0 = Debug|.NET + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Release.ActiveCfg = Release|.NET + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.sln.old b/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.sln.old new file mode 100644 index 0000000..1e7ea25 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomTraceListener", "CustomTraceListener.vbproj", "{39549A95-F908-4BE4-AF53-C349C8E49FC5}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Debug.ActiveCfg = Debug|.NET + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Debug.Build.0 = Debug|.NET + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Release.ActiveCfg = Release|.NET + {39549A95-F908-4BE4-AF53-C349C8E49FC5}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.suo b/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.suo new file mode 100644 index 0000000000000000000000000000000000000000..11346ccb750eeaee3c8634af7d2858683cb491ca GIT binary patch literal 7680 zcmeHLO>7%Q6n;(uO-q}$KuRgJEG31sB2l3&Gzl$AY!_PMwj?eI$QQ@nIBwV8$ab1W z6p5b;;?!d+4&Vb40))g3Dgi}E2)MKt#04Zc!2t<4!G(tJo88IUj=fno;ipo^nw{C1 z=XpQ#-ZyXd%H@qelt0+=qtujx(kfTySIf;6<014}RoNiYf)3xW&d<*~gCgkODA$n% z{(`J+?jCZlZ$fQHU4^u@H8QX9xwVWh`BCl2@!|ruasj6 z@`Y*oILl#hq6I9O!1IiZD(DdaPW^p#)!Uk|otw7vX1=5**NtWKX?wQlk+(e=j}3FNjQzQI;2{kPJl0YQeGK07!b|etl#IzY8oQ0VZ zdTET<^04g2Zx1NKGKJY`%n|c;%Oh%RMj@dsIbc%(^IT2iqY0EIZNimux$=AX6T!Mg z$d_?B1VcjLPl$M-z0VcPw_*Hh0&<;zWit3tuQBLbg2q!y8co%>1^zDZrVNcKy&2-= z?e1$Wf1<7l8BSqWY*>S5qTd%|8Aqd0@O-}DLkO5T^d$o=3?-aOCP zy36`DJS+A2SF8UarE|KOc{Atgi{K@;A>$tW2W6(VZy_tuMxw6>8Q?Pz{(AA&k zQc(UptK;r+w6_y|dF;9+)ZbFR=bXnU(NBRQtoDMG)gICB@+WVW`chVpZp15nkR^h3 zQ}F+syK<$@$1%r<^z($>;IDJ^p!{zIU;030;rUO9Jfd*S(LIA*NJ28B!YT>mD$I?T zs}xZuA)Qf$bVe1{^~zCXmT`rKDR~qv|65Y{_42>Mk9cB1i%D=!KxU$IV&Prnzm&p} zO=EfGel*i({#IL-GgiCSKlx59L`kdXX8F3!Y(=^`Ki}OVt;6SZl*q?Fy*2wK-pAWH z)*^dD&*K2?lYQ#{gX~EU+_Vpe=zjF}B7KhH*&~A(-3Qtpgzz4W^r79a=K3%bW-P`K zf0l|ep3+I>pEE#UjQ}DCRDLWnfCWTc)@re3u!dMKNH0{MRT1OyJ*LpVk}DCbzHAOU zk+vOYLG!Zt;g7zHMPL)!rC#X;{t!D9_yxqj+d!{(mKl=;`)iDIaCQhe#Q8y=JPrB7keZhaMjt)ETXO)h9mIZ&ohuiAAAfcGN748C zze%0{WA-yC=lI= z;81{2d5Ciyf)yZG9BmQfA{TfQ_wEw>;=xH~KA7Y+JB(l>t^cJ%B&B}+-b^Vi|*JR5WMW_F^h@84SA!?437ICCGGDVwf= ze-9WiUtsZ0Ea&@+cmJOQnDU!=gAZrU-}(KaY5jZgU*=#dRhqT`O7Yd}T+jUf2G_nl AkN^Mx literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.vbproj b/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.vbproj new file mode 100644 index 0000000..d45ba0d --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.vbproj.user b/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomTraceListener/CustomTraceListener.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/CustomTraceListener/Test.vb b/Source/VisualStudio2003/Chapter06/CustomTraceListener/Test.vb new file mode 100644 index 0000000..1ef4e2a --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomTraceListener/Test.vb @@ -0,0 +1,114 @@ +Option Strict On +Imports System.Diagnostics +Imports System.Threading +Imports System.Text +Imports System.IO +Imports System + +Public Module Test + + Public Sub Main() + 'Activate the custom trace listener and its output file stream + Dim objPerformOutput As Stream = File.Create("Performance.xml") + Dim objPerformRecorder As New TimerTraceListener(objPerformOutput) + Trace.Listeners.Add(objPerformRecorder) + 'Add this statement at the start of every monitored procedure + Trace.WriteLine("Entering procedure") + 'Add this statement at the end of every monitored procedure + Trace.WriteLine("Leaving procedure") + 'Add these statements when closing the custom trace listener + objPerformRecorder.Flush() + objPerformRecorder.Close() + End Sub + +End Module + +Public Class TimerTraceListener : Inherits TextWriterTraceListener + + Private msbBuffer As New StringBuilder() + + 'All of our constructors are here + Public Sub New(ByVal Stream As Stream) + MyBase.New(Stream) + EmitHeader() + End Sub + + Public Sub New(ByVal Stream As Stream, ByVal Name As String) + MyBase.New(Stream, Name) + EmitHeader() + End Sub + + Public Sub New(ByVal Writer As TextWriter) + MyBase.New(Writer) + EmitHeader() + End Sub + + Public Sub New(ByVal Writer As TextWriter, ByVal Name As String) + MyBase.New(Writer, Name) + EmitHeader() + End Sub + + Protected Sub EmitHeader() + 'Start tracing performance data + MyBase.WriteLine("") + End Sub + + Public Overloads Overrides Sub Write(ByVal Message As String) + If msbBuffer Is Nothing Then + msbBuffer = New StringBuilder() + End If + msbBuffer.Append(Message) + End Sub + + Public Overloads Overrides Sub WriteLine(ByVal Message As String) + If Not (msbBuffer Is Nothing) Then + Message = msbBuffer.ToString & Message + msbBuffer = Nothing + End If + EmitMessage(Message) + End Sub + + Protected Sub EmitMessage(ByVal Message As String) + 'Write performance data + Dim objNow As DateTime = New System.DateTime().Now + Dim objCalledFrom As New StackFrame(4) + MyBase.WriteLine("") + 'Timing data + With objNow + MyBase.WriteLine(CreateTag("time", .ToLongTimeString() & "." & .Millisecond.ToString)) + MyBase.WriteLine(CreateTag("message", Message)) + End With + 'Caller data + With objCalledFrom.GetMethod + MyBase.WriteLine(CreateTag("method", .DeclaringType.FullName & "." & .Name)) + End With + 'Thread data + MyBase.WriteLine(CreateTag("thread", Thread.CurrentThread.Name)) + 'Finish log entry + MyBase.WriteLine("") + End Sub + + Protected Function CreateTag(ByVal TagName As String, ByVal TagContents As String) As String + 'Return an XML tag + Return "<" & TagName & ">" & TagContents & "" + End Function + + Public Overrides Sub Flush() + 'Flush any remaining information to file + If Not (msbBuffer Is Nothing) Then + EmitMessage(msbBuffer.ToString) + msbBuffer = Nothing + End If + 'Don’t forget to chain to MyBase + MyBase.Flush() + End Sub + + Public Overrides Sub Close() + 'Finish tracing performance data + MyBase.WriteLine("") + Me.Flush() + 'Don’t forget to chain to MyBase + MyBase.Close() + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter06/CustomTraceListener/bin/Performance.xml b/Source/VisualStudio2003/Chapter06/CustomTraceListener/bin/Performance.xml new file mode 100644 index 0000000..8742f16 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/CustomTraceListener/bin/Performance.xml @@ -0,0 +1,14 @@ + + + +Entering procedure +CustomTraceListener.Test.Main + + + + +Leaving procedure +CustomTraceListener.Test.Main + + + diff --git a/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/AssemblyInfo.vb new file mode 100644 index 0000000..a4facbb --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln new file mode 100644 index 0000000..11e353e --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RemoveDefaultTrace", "RemoveDefaultTrace.vbproj", "{831BA6C7-D44A-4C54-B62F-C12A3D3831C6}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Debug.ActiveCfg = Debug|.NET + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Debug.Build.0 = Debug|.NET + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Release.ActiveCfg = Release|.NET + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln.old b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln.old new file mode 100644 index 0000000..619bb4e --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RemoveDefaultTrace", "RemoveDefaultTrace.vbproj", "{831BA6C7-D44A-4C54-B62F-C12A3D3831C6}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Debug.ActiveCfg = Debug|.NET + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Debug.Build.0 = Debug|.NET + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Release.ActiveCfg = Release|.NET + {831BA6C7-D44A-4C54-B62F-C12A3D3831C6}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.suo b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.suo new file mode 100644 index 0000000000000000000000000000000000000000..7e017412338b182c1c06b77c50db74bf12a3418d GIT binary patch literal 7680 zcmeHLO-x)>6g~rJp%&Vz)LLzQA~h9Tq*|$IZR;=tN@W0HTF|f=W**a_!#pw!P~uNo zSH@M{!Ae<}7&Ru18*QR4OpLl|H^z-7y3&P-y3&o{_ucm{Z)TWzyrHP6;Y{w_`|dsO zo^$U#=R4=V>(_Svuy|$9k5WV@rCOGj>*UtF{s7u6igt)pp~2^+<>h6&Qv}UTx`}q+ zFX&q1oFUKp7L;0)Ehu#;x1nrB*@jY&!n0=Cr2oeb42XqaP7LXk4C<`R;gtQ;E?A7- z3EGGkT|9NR#cKFGPz|Q1Xjq`A#AHg&OOK>b=j06jO=zL}r);*e|IJbrAP&)9sYhAH zq5;}CsT-2G18Et>{{)V0fLOkL16YXMq z*qlklO(SGwa#<^_T(%}0%f&eD*5OExF&IB*PN>KFa4MFzl167Dm9w&B*b%WtQ)$x} zGDnRrD?6cHuPb=k8nPxPt&Ew;sloc8R3>4~PPyzg&qO0VoU9>~PEC$lv24N^NM(}j z+VZrSF|)BW+p8(Cx~rldzRzWZ`lMi~RgG-k*Fsj_I>b897URDTzLC~FG(B@qXxjXxv= z{sf2@+WNF!UN!w#k5lR>)|bSOQirg@9M*VFX`{Ky*TCNu+0>ytr#nKtywiCsmQU0* zp~HEciiO=^O!SID2e5vgK_%;Fj`d0z`JISCJYm`dZ6)I=UF1Q?r)=t`M^V-HAuqASsM_17FRj(o;wzw&PfFKr;782<^8rxlLbYfs`7V$jUU+m#XID$I?Tt4yJcK|7-W z>5KxbYn5JPmQjUf)zAt<5#cgxo`W;INCdHFz<1bQxOFOg4vdVBUuJP+5huS(hiFUk`Lp@-G` z?QqYdatO|J1iv6!N6_;){tqFIZb!iFLMtSP(F)?NFp7FxLiELm6JJxxa%0Lqr-8s4 z0Ypxy{8;2TrWA2RW9lF#U$9a+0`xN@;OC@44gIKMbjZWmPMJ%XXH!u9r zcd;U`!Id#2-CUO1cQ}U&*CxQfaQj zUdE~y90%z`_Aw3%Al8+`_`To3Kgul#-BeZ+}>A*`M^;3{33wxDm zH1rOB_vx?OBCqeC|E%iG#y?eO_N&vuhvvthedpV^E)6Vw^sY+1X-))(ER@PXoqi~m zg7!Izi{(l7oz0N#tvv}bVelp2G-n`kj|iH97Jro8*p^Z{_2k{?4es zKMuksxCgw0GAga50rA(CZ2y;+>W=J3Q{TVzdb_a?W01^qsDyT{L;k}Mz<5ET|MZvi zpN;SiCBpMh`;RA+$KV%>r>_3o_wC3}znu8qgLQML#16O-%l`i2-v8%-gZw65 f=EIpY7w-QR+y6nl%N%T@s8aviD7ku`n_2$fCZ{XO literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj new file mode 100644 index 0000000..931f935 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj.user b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/RemoveDefaultTrace.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/Test.vb b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/Test.vb new file mode 100644 index 0000000..9a76b38 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/RemoveDefaultTrace/Test.vb @@ -0,0 +1,12 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + 'Remove the default trace listener from the listeners collection + 'This method takes either a string containing the listener name + 'or the listener object + Trace.Listeners.Remove("DefaultTraceListener") + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter06/TraceAssert/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter06/TraceAssert/AssemblyInfo.vb new file mode 100644 index 0000000..3223915 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceAssert/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter06/TraceAssert/Test.vb b/Source/VisualStudio2003/Chapter06/TraceAssert/Test.vb new file mode 100644 index 0000000..86f8991 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceAssert/Test.vb @@ -0,0 +1,21 @@ +Option Strict On + +Module Test + + Sub Main() + Dim VbClassic As Int16, VbNet As Int16 + 'Does TRUE have the same value when using + 'VB.Classic functions and VB .NET functions? + VbClassic = CInt(True) + VbNet = Convert.ToInt16(True) + 'This overload just shows the call stack leading to the assertion failure + Trace.Assert(VbClassic = VbNet) + 'This overload adds an brief explanation of the assertion failure + Trace.Assert(VbClassic = VbNet, "Assertion failed: VbClassic(True) <> VbNet(True)") + 'This overload adds a more detailed explanation of the assertion failure + Trace.Assert(VbClassic = VbNet, "Assertion failed: VbClassic(True) <> VbNet(True)", _ + "CInt(True)=" & VbClassic.ToString & _ + " : Convert.ToInt16(True)=" & VbNet.ToString) + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.sln b/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.sln new file mode 100644 index 0000000..b59b5ab --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceAssert", "TraceAssert.vbproj", "{DB28045D-F29C-46C5-88B1-1B5A786DC862}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Debug.ActiveCfg = Debug|.NET + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Debug.Build.0 = Debug|.NET + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Release.ActiveCfg = Release|.NET + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.sln.old b/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.sln.old new file mode 100644 index 0000000..cef6116 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceAssert", "TraceAssert.vbproj", "{DB28045D-F29C-46C5-88B1-1B5A786DC862}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Debug.ActiveCfg = Debug|.NET + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Debug.Build.0 = Debug|.NET + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Release.ActiveCfg = Release|.NET + {DB28045D-F29C-46C5-88B1-1B5A786DC862}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.suo b/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.suo new file mode 100644 index 0000000000000000000000000000000000000000..da4b203f150f757f87c1b764276ccca7755f0d08 GIT binary patch literal 7680 zcmeHLO-x)>6g~rJ0Sj%lpjKO-NKLIWq1b8#Tf@vyr80mp6*O#y;Q>Qu=8>5JN~(#v zGOp^bT`7wuMvY11Mw_S$6Qge0jnRcBy3&P-y3&o{_ucm{Z)TVo-T>9qa3*)&{WBlP zy4E;*$i2P=r50reN*&5=DD@~iQ5sOV*DTxg|FFQ2SomedkRD0lnU+QDvUh5R$7oB? zN6OJF-^Kh^5s6Ah&Pt!e@yyB@{F~51_h)RjlK-tz zs=eUY!(m_ZI1ChK{4!R(%Fo4X)@eWPiH>dJfUa|1#y_`9V*uC7aioA%KF!~RzGjp= zQSL&y8)YBLJt+60>_;K*eRvuu_oK9+u&>p5vR+7f{=)w4_U0_`dyqT4aiU-B3Yqiq zm}vy9R5ooTRLItZqS+{?tsf2d8N;z@GpU*lp?EZ5O&L8C@vN05!|t#(9#5FYh&gVY zveHTQdR<Lpt(2L{s=m&O7|EhGfgVdbq#eIU!4Z^c zjLu?=nAa|kp)Z13RL#(hw{0}cqQ5w8R(}_NLeL=t{icuysEs!y1pfGl7upMpYnk86 zSk^t1Iu6TB;YX<>SbG+$pH|vvuF_B7@2YI-P@2;nAztovnuYR-x+Ziui(Ro`4d%ph zIp`49&poJQ{XApMmXP0r97OM-PtaFVWu=Qe2>F!Fe8#6UZP^ENrOtna>p!K|Jdx+g z2Tl4QDTH}r@c*PUbMBf4F~*22=LzkO zeCBAc@^1$(eIS>Z{|S+&6^_|!pTaIgp_!3ml`))EcsAl$C4({v?TkF6GxD&`Fa0=K zMid&x^{7NANr*-EhL=7!6?@PsU;x@t06h#w;CG{y7H()(9YS zLY=(|`5 zHlbaLkstU&?BF@jEB@R8UcIwCF(qJsjd3>4P6A`5&`bQ$BgLeP0RNR-$|e=(%I{^a zdeI4x0h~T&-~q(CQW&5Ac7E#s*3b3O553Ai0NxrW{{^vn-heX-LrwTXWm@3=EA(OB z#k|VTJ%5!53+0<#auTy{t+x*$&oRGp&8EBr|F`plANU+lyUnv-06c^QH}0O?a!uTm zhj%TQWxJ6-=#%r%KM1XP$zb%+1Kc^g5Zhkt$Jn`k^^eilTR!f2zw?{e#XryOSFX|6 zKm7ftzwHdaaq!}2Rc|%@r8?7Jo$h|<;>@$}eEasRL(3n%>!VP*6Tu-3rBYC55Q?Rt zSOm`u`tgyrbsd%gyl8^w(t3;$IH(22D~ItH!A{wyW!`IYMf3cY#BQcwD>W}a1r)#7 zhUwXa0u)`!Ia~~?9<_*ZFLo#2G)_Aww?fGB(zvmYU z7{6G0>gq2|FZ5sXzgN5T>xmx + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.vbproj.user b/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceAssert/TraceAssert.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/TraceSwitchTest/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/AssemblyInfo.vb new file mode 100644 index 0000000..bbded1f --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter06/TraceSwitchTest/Test.vb b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/Test.vb new file mode 100644 index 0000000..3d9c0af --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/Test.vb @@ -0,0 +1,28 @@ +Option Strict On + +Module Test + + 'Create switch for controlling tracing in hypothetical component and set + 'the boolean for this switch – setting could come from registry or config file + Private tswTraceControl As New Diagnostics.TraceSwitch("SwitchTrace", "Test trace switch") + + Public Sub Main() + 'Create switch for controlling tracing in hypothetical component and set + 'the boolean for this switch – setting could come from registry or config file + tswTraceControl.Level = TraceLevel.Warning + Test() + End Sub + + Public Sub Test() + 'Either check the TraceError, TraceWarning, TraceInfo + 'or TraceVerbose properties + If tswTraceControl.TraceError Then + Trace.WriteLine("Trace only shows if traceswitch is set to show errors") + End If + 'Or check the Level property against the TraceLevel enumeration + If tswTraceControl.Level = TraceLevel.Warning Then + Trace.WriteLine("Trace shows if traceswitch is set to show warnings or errors") + End If + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.sln b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.sln new file mode 100644 index 0000000..57541e3 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceSwitchTest", "TraceSwitchTest.vbproj", "{CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Debug.ActiveCfg = Debug|.NET + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Debug.Build.0 = Debug|.NET + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Release.ActiveCfg = Release|.NET + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.sln.old b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.sln.old new file mode 100644 index 0000000..fb5873a --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceSwitchTest", "TraceSwitchTest.vbproj", "{CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Debug.ActiveCfg = Debug|.NET + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Debug.Build.0 = Debug|.NET + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Release.ActiveCfg = Release|.NET + {CAFE2AF3-2EE8-48D0-BBAA-5BA83250ADA0}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.suo b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.suo new file mode 100644 index 0000000000000000000000000000000000000000..b02fbc72a7262bf6a454c1306f44b7b538f23624 GIT binary patch literal 8192 zcmeHLO-x)>6g~rJDHhtQV6AO^BGtCBNbs*IwiaeUK?V@0pkXr%4;cEGM`i{n{w#E5 zTy;rT+C>wi#)O?VQ5PmgbkS~%8%=a&7bfaTHx|F|zIS;u!_1pEv}%al$(eWGz2}{C z?z!jh-fLI){&;C+|4)+FPD`cSSlcPLXN`x@C#beZqyinj-&k8)a|T7w-ELb*1Ajr* zDt8aL*S7(x0XqOY0lNS-fI9$nfLZ|eo3P!sz6J)x#xEm=bV?G>lq_L~gSQ4)jMf5e z#jl-NxZY~leG#ez(isub2Kdu2b_0U)XUzP_CEYDAf@f4BGJsXvGN<@wunQgP zebLp2i@xD;3{jZ=OJ5DjKRaHtPyKOEv|lq0=sxLc|L2y`|G8eyBL%GEY5aPOH304b z>;v2j*blf5Z~$-+K-~NBGyo3(8UYUingE9Z4*`gC#C@_~sA-;s=C;RzY2ddocX;!S zd0}_NTu8)CBWx!#Dce#mTNR0AVkBEL8tpZP;?w4=daaElVwOE+bWS8Pc8UmlqV{;g zGK~>)+~~4Xv+DDmId3&#dv?xFn#qistQ|=tC+x+vhhFvEaI}}i>cUoHZrqNgCXB&E za*9Jco;8zZDrT|2v4u7cl{LceNjfYiWelEd%RKy+v11IL&6qZi2xnm?gWd#2Y-yDi z{2l{FSf(*MhdIW)7I_k5!|25ng&|o4eg^$%jG8Jwj^#;rv+{fKC!#ncWD0qJ(gcfy zh(9653vF$A;uUY9+@ z9CpQq_L&p?Mfi7OhSo!ypsgf*xieN)gvguuj8B)W?}NEg=fC{* zcd0c`;_G05-4d?ff(&UlAJ3p42S!-!1u=6i;-t%;yxAP8{{MS1&792^0o^$4f7Yd(z2*VT zr6G@>CA7HwnWKa9zZ1B$f$YZo&p6hj;+Rv5Oko#dkj%)^${1=D)<&#V(tt@wXXHdW zBPZ51OCNMRtfFCDp2CygX7Chw^Ize|cw%7{li)lCnHinO*5ChIDID4IV>;AQR%88^ z-)?3spVmM5&RB>xq5k*D*HvaEOc}Lbg;e%l&|V^+{(O1yE4+_ZbF4y|La)Ll+oel= zk0;XUaU|AG{7#_vIQ}C@sK-%8cL1*)y(d)f1Tb6CZ^2kZ+Ubi?_@AY`j9EIS>~kIw z*ztlHV4PC*u}B*Ti@2=8s+A&amNi6pU7E4*soChe7!t0&a`TKaAD$1e{he)PyaR zCk4*GLL25;EGYl%`m2arDBEn4)1X?eMfp)|mO=2x!Sl-FSYPJU=ceC|-Y&1$y; zI1CA%-#vZHCGjec;8HNlwj+PgCKn)o7*g|)LGPmlcr@GK+d=e4-??_>_tCc+Kk5AN zJJpbNz@4hj33EPHs& z_6`la&fsBzWsS&1+8QHA3KAzF>j0)wkXoN7aD!_A#rwX{p+n>wp2frP$TVo#$e!K@ z`sRj}5owF8G~v&WX}>~+bUf+PB3SWJpVZ$ZtiXxK9uJY#13>Kn8p8$6CkYPT@d&g^ zF&zfFP3fo-k2Lk=xE#wF(gw;gg))uRkQGmD*}7wOI;%u*?ub^64HP@oa#$+%f+|g9 zHFulZmCsXOYMUs0@zr^owUV!@7r@(sMe_8?1$d`V-eKv}CwFb*>64z8fBMWoBIop( z&QdSyUeaKtq6`twNpMTa=vDfJD77t>*6fm>7M2VU%H5fbdRz*ss$ln+)L&0Q{oR~) zu#!Mc>n{*;0i-W4J#*!H{Y!lpn?I<&^vkIq3ZVE7=^BUUpgC9)_moyi_hs&-JNPx; zzcTOeOc6ByJPh1dT%u>;S>#GDGXYv2r>-e>>hmOOborAvn>SOum!1FgJ+qEtL+}ae zfOinAN=iw<{OfRb{)=<<4T + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj.user b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceSwitchTest/TraceSwitchTest.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/TraceToConsole/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter06/TraceToConsole/AssemblyInfo.vb new file mode 100644 index 0000000..5dac7a1 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToConsole/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter06/TraceToConsole/Test.vb b/Source/VisualStudio2003/Chapter06/TraceToConsole/Test.vb new file mode 100644 index 0000000..38175fe --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToConsole/Test.vb @@ -0,0 +1,23 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + 'Create a trace listener that writes trace information to the console + Dim objTraceToConsole As New TextWriterTraceListener(System.Console.Out) + 'Add the new trace listener to the collection of listeners + Trace.Listeners.Add(objTraceToConsole) + 'Write trace information to all listeners, including the console + Trace.WriteLine("This trace information is for all listeners") + 'Write trace information to just the console listener + objTraceToConsole.WriteLine _ + ("This trace information is just for the console listener") + 'Pause application to see console output + Console.ReadLine() + 'Finish and clean up our console listener + objTraceToConsole.Flush() + objTraceToConsole.Close() + objTraceToConsole.Dispose() + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.sln b/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.sln new file mode 100644 index 0000000..2c171b0 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceToConsole", "TraceToConsole.vbproj", "{10886B1B-5C6A-4023-ADAC-D32412E5B9AC}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Debug.ActiveCfg = Debug|.NET + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Debug.Build.0 = Debug|.NET + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Release.ActiveCfg = Release|.NET + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.sln.old b/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.sln.old new file mode 100644 index 0000000..111c80f --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceToConsole", "TraceToConsole.vbproj", "{10886B1B-5C6A-4023-ADAC-D32412E5B9AC}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Debug.ActiveCfg = Debug|.NET + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Debug.Build.0 = Debug|.NET + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Release.ActiveCfg = Release|.NET + {10886B1B-5C6A-4023-ADAC-D32412E5B9AC}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.suo b/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.suo new file mode 100644 index 0000000000000000000000000000000000000000..d97c4b17296430d3276ba5e45e15a42b8595916f GIT binary patch literal 7680 zcmeHLO-x)>6g~rJ0Sj$auvS~2*fzDcgrZ^vTZI{FsSF@Y1r3{Fc)-w^d1Pkzi@MO2 zaaDKiN?Di~H73T5Hc=NQModh*F>W-`jk+*VSGp1WzWd(on|aI(j{!9`oXMSc-+kxZ zbMCq4eCOPE?dqQIm)_s^gLvq)RLaU~joh3w9zdT>(Qc6nba=nAy1Hr)ilDnqH;@JX zg05B09&)d5LaRpGfmVZd3tBDOPP95S?ls#s{XZ-)C>DNMF{E2kxTa+hyX>DD;W640 z^rMpW)sJmf{bzwnFg-!X0!1V$8Mz?662~gA3@Pbz&?bi7`eaB&fO7YM)vtVF=6lZ6J@O1>h9x8eShXcHN`4l* z(53F@9eWhhUeYqWJSK+umCrnNyECO%K2g_%4i~U1 z7OcUXsGQE>_g;=b{w@qsHp%FcIp={_em8Ouy@x(QU*X=DqQg%9VLtOKpS7LN ze_r`#)SAchJlT(Y+S9Lm%D(70u2+5-Yfoa`tV4z!T`XZ1EKJ9+e&#OLrhesfzaq|b zw6`67DeQVexPC@j#>vOi=*Pfe$00fMJ)*sg{L5NF*GeI*H3t7rIy2|4c>vECk)=GL z#o2%6Xus>f6}?bS*|o?db|DJQj2x?sqE=yT#9D=@Gy(05Jft)7u&!D9 zP+3M48ph-iT={NRA=%6Siag>;0;`ySVL0%S!Gtjl~-4fR7jxrqK*>z_@_7Lzrg)SHODH%2s|$*kT6fG_q)*V zlH>9)!n92~(R&EbT9IOp<1U02L@$KGLXLT)F)U{d1)fu?p*EqZ4_n{`C9KRE2aeOuQATX*$H6GBu0rp`bi<_BEWxzdz4Ko%#}aN zT=kq2ApNL5rr`m^x?&ig|91Y}fimPDz!ZZ{{tIIDJOO7EhMMq&jcI}NZ-6nt>HMxg zxBe;;7Rom}Y+=YR=nQury5KzpXweIa2=L@yl8^wG9iRp#1f1P9M-#BFH)jOCY+<_Pqxg$pQ|-cS=@Lx0tGWSkJhpH+}=sr#G5$ z?dgr4>OH-28|>3t7PH0B@=tG0*bCUy4vk!;Pl0Hv*LacH@C>4k z+hL#ni1@5`OB3;jxWk&#FaFST7My9%!#Ay z$06(~ZNM`qv(kDR@cSdzt;yA_c#lD*&tH1IJ+Q+BBy%4&LXD37`Av>G_<8pMF!9?R ziT;1Kp#N{myVcx&{;vDKALar)pD#Ur<>!WH`z|-XQ@!-dsqYG~Y!8*NfSa-G?=SB8 oe-W_EZ{kHhoH=vi`@@F){}|q74YpOJW6!VuZ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.vbproj.user b/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToConsole/TraceToConsole.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/TraceToEventLog/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter06/TraceToEventLog/AssemblyInfo.vb new file mode 100644 index 0000000..aa32d4b --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToEventLog/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter06/TraceToEventLog/Test.vb b/Source/VisualStudio2003/Chapter06/TraceToEventLog/Test.vb new file mode 100644 index 0000000..a4d8324 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToEventLog/Test.vb @@ -0,0 +1,29 @@ +Option Strict On + +Class Test + + Public Shared Sub Main() + + 'Create an event log trace listener, give it a name, and configure it + Dim objTraceToAppLog As New EventLogTraceListener("LogTraceListener") + With objTraceToAppLog + 'Write to the Application event log + .EventLog.Log = "Application" + 'Specify source of tracing information + .EventLog.Source = "AppName." & .Name + End With + 'Add the new trace listener to the collection of listeners + Trace.Listeners.Add(objTraceToAppLog) + 'Write trace information to all listeners, + 'including the Application event log + Trace.WriteLine("This trace information is for all listeners") + 'Finish and clean up our console listener + With objTraceToAppLog + .Flush() + .Close() + .Dispose() + End With + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.sln b/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.sln new file mode 100644 index 0000000..e8aece5 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceToEventLog", "TraceToEventLog.vbproj", "{DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Debug.ActiveCfg = Debug|.NET + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Debug.Build.0 = Debug|.NET + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Release.ActiveCfg = Release|.NET + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.sln.old b/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.sln.old new file mode 100644 index 0000000..da1a871 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceToEventLog", "TraceToEventLog.vbproj", "{DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Debug.ActiveCfg = Debug|.NET + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Debug.Build.0 = Debug|.NET + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Release.ActiveCfg = Release|.NET + {DC3BFCE2-7CBB-43BB-BD42-514F04E0CB3D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.suo b/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.suo new file mode 100644 index 0000000000000000000000000000000000000000..f2898b4bdae7f5c48dcc37377d8c9374850f1e81 GIT binary patch literal 7680 zcmeHLPiz!b82`4d(jqOO77+zUEQo|Qm7*p^Fzs%u#V%mG*lK#&Zl}w_bf?)}DD_XG zp41Zu4-gO1gNadN(wmZ~2NNS+;9|UJq9;9=s3*Nh{r%p|>+DQtx6?mrYWi*7&igm- z`}4l{`@T0fu5bNeW_HJq5}>0}D>vsFUrY-RBxoab46Z78np4zmgczBY8XvGL0RMPTSxy zdU^U$HEOrt=(L-@h}B}!D|9GOO43r4v(hg)JWFy4|0bl+{Y7V5#s3zd5THo;E9Iy- zF)%1Q+g zwxQgGvK{4alpQGdpxleH6NPi{!_z>yA7wYn11K#h9NX(YSr3xt6YO7aFV6zM#ks@F zCm!R?3G;j|V;XTgUnB5*X zkjrP;wc$xKZx+%P>kBEiuxm*@e4k6lrBg<5l5IJMb4%vukVPaTR{)|(1x=RN6 z6Ln39$r zJd4Voxt)%GLH@l;=P{oryP}3ZG=JJNDu436=sIqYe-gS+KyT(DL#`~gFbam#0qD=z z#kdreKldx;E=PMir!S9Pw}kpz%J-ajdq}@c#*S z<#L@*VvHxUnkTfo`_C91RsY*Dmp)KVv>|cqn8Gnf_bhfH4atl$tBfF5VQ$1+rHC>P z=?ovz89uCQljFd!ltROdJccLVEh!v(?O)+XJh7m~I5>|$W}@@Rd|Twdl){lMi0S3~ z5~WV;3(`vZf@}SgZDJv4O#N?{uj|ZOxbocGz8b0Rzo<`%eEQS7Q(vJyT+hB5X^Fjv zlsPUP>isxe?4Y#5z2ZolyHPuY@aojMG4GHXeMBBctrubT5aze5xg9)7S`S=ylblsYjU-xCV`%efM@>FyM$32@P`>B^T4S1!+5QCmKl=;`)iDIaCRIRlSMD_M~{SY7Xkh& zzT`~`pXKjmta{!(ASaN0oPh@r>ndTq|80M3*E0C;!V+(}@h=YTc>^vg3^m~kOOpck z-x$vTmy4=@dH&TZp~ph`=3zOCRae*B2N35NU#YVxFTwwv_|OJ??pC|a+^-vR2npV~ zdwkU;@iLF-QZUMPA%4&&nU}{QH7^-FecT0a&BHj`QS8UKd*kZw!>{lDr02uVZ!(wu zxUf^XM$_@Z?>_r=Q}WF{mp-p~r}!C|$o__D!E3XdR{P=x!^yp3mhXRDk zL!6TktN_7Mcoxwwa+x=A|Gk2P%zWTEEsMN=0;`&sbB*}I{bPPc?WyfJ_RK*~Z+(&3 z#nw#0(QPbuc|ZPA*l{Q8=KZK#1?GVh;E;#SDZ(su^%(JjDRSOoh=%K zx?VFDydS(^iM$;U!n0$Dsh+`#7Nq0tk3x92KYl~fw?A&f!rLD`J$U=$HafSz5>_+k zZ+{kA&h5_y4nYTWAHGhX1S#_@&6?8&-t${?p*1?H*>hT`|FKa0SEwCCi$e4IN0}Tl z=gXNVuKwKo-0{n8AJotMa^(AvDgWy(o#XHxGzm}UiF0oMjQG6oR42wC#vR@%qQ;*+ znEQge>?xdWa!mv8O%yGUlh;(b^?5SwUPk;akAM0*v;O`(h%-qW@EZiPlEoz8_h;&@ z$&;*d?LiFb`?uD&4|W&_XYRvNXq#()ev_pPQQkd(N&I$8@*lJ#%Ja?HV2i?r>d>c3ii^*U>r|KF%NI3NH3 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.vbproj b/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.vbproj new file mode 100644 index 0000000..58af692 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.vbproj.user b/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToEventLog/TraceToEventLog.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/TraceToText/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter06/TraceToText/AssemblyInfo.vb new file mode 100644 index 0000000..307f6ec --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToText/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter06/TraceToText/Test.vb b/Source/VisualStudio2003/Chapter06/TraceToText/Test.vb new file mode 100644 index 0000000..464ca21 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToText/Test.vb @@ -0,0 +1,22 @@ +Option Strict On +Imports System.IO + +Class Test + + Public Shared Sub Main() + + 'Create a trace listener that writes trace information to a text file + Dim objTextFile As Stream = File.Create("TraceListener.txt") + Dim objTraceToText As New TextWriterTraceListener(objTextFile) + 'Add the new trace listener to the collection of listeners + Trace.Listeners.Add(objTraceToText) + 'Write trace information to all listeners, including the text file + Trace.WriteLine("This trace information is for all listeners") + 'Finish and clean up our console listener + objTraceToText.Flush() + objTraceToText.Close() + objTraceToText.Dispose() + + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.sln b/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.sln new file mode 100644 index 0000000..cd9cac6 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceToText", "TraceToText.vbproj", "{32485B72-9BD6-46CE-BA3D-A685907A58D2}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Debug.ActiveCfg = Debug|.NET + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Debug.Build.0 = Debug|.NET + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Release.ActiveCfg = Release|.NET + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.sln.old b/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.sln.old new file mode 100644 index 0000000..c600440 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TraceToText", "TraceToText.vbproj", "{32485B72-9BD6-46CE-BA3D-A685907A58D2}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Debug.ActiveCfg = Debug|.NET + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Debug.Build.0 = Debug|.NET + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Release.ActiveCfg = Release|.NET + {32485B72-9BD6-46CE-BA3D-A685907A58D2}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.suo b/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.suo new file mode 100644 index 0000000000000000000000000000000000000000..33e785fcf43fa7c1282bbbe4a35b8af9e6b0b05f GIT binary patch literal 7680 zcmeHLPfT1z82=W~0v6gTpjKO-*qYiDLa=HDsabZZQdvOQ3K}lU@}NtXePnm}7d25& z##6n)NjaDpH74A&iFzH*Xm)PtzCsJEeVpX;3G9uje%)e;&Q5(~eq7}6stJkzp-9rj}m z+EJ;}*3}TS>OT)uV$v%#D3qwgBqLX(PZD@$UGi3RlkdS{$^*YotV5q(Xl zccR{fdN=A()O%3xMLmYfx%c5|px%$#jQRj7`%gMgwu==_r`XtjU-=sNHN+j>exVy5 z3Y+tZxM_r}R5ooTmCIIzW7!y&tsRZ@8N>0*=8Sr+3nyYpYs%=ENMx-vCmfDg-hjj<3jzcq3_>t-eWY0qS%ZeL4%lk?Ey#vF1Q=oqcoutiDI9}|XIo7N*P)NTAyG`q%P0&_SC8>)%=)@n!Gr#ni z+v)gMNdJP8c_Pn}9af7zG=1vRFMZO!>KJYz{Rm{Af!xePMjT!&VH7N0&Om;~F2*Il z^toSAXF2NI_P!K$Jt>qwscg@V$J1!XF(ah*f;00iqGKEJm$`z@mBLsz4*Q>RR?d}q z5M%VnQkKx>>_20)U-@sxT-rcxp$-X=7Zr}#vQJ?bV&Kfk(aIQd73N0FRWhiP;LgZH zIwKG3TBRSEWmKVITpq)d-`aTg+P^}Nc#?z^lb}2Xo{7$5f4__Tmt5Gqd0~6*{*-DH z`wGiW`U=cFyvhS+)68YrEcNV_H`)D=$Dx@LsA_8c; zoK@dYQ%!_ zc`JoK`YaZPPN-h5Ti^r5{ z)b|g6`{^$SBX68s{;cAy#y?bN`ufG-L(9|8y!*}DuMVw$^j?6e6wQg?kOosJurmn8 z(qN27hYb2fR(KLGey+gD|HKyG4`5XjbFLF#xPQ#gC_SZ}#Gcvc>8>xbw$++Z7`lb! zR!-wDiXFGJZk~^FMPME{0}3hVoGh$SR+kVDNVdB$6`@&y%Y0db%D1QxrHD+NRs(fApQh(h=^|wv!C~f%v)B5xOMgGh$R-e4~Q{(gfE3NNWum0TiUH<6* z|4rvOJO|Cfh3Iki>7Nmw_FK9z{xI(FOyM{F5FFIi51yCc+oT$U7n-P=A3Lw{I`z3c zHE$#S=EgsL&#dpChvC!I0q-D~m2AZU@1H5RE-q)@E#jy?e`|Srp@&IO=022DnjHP} zPL@3Q`SuJZ@$Qzzjac^mi+lcG0`l@s+~eZR{+#y@Wy{}!Z<&MbR?)imEB|iM)$8nK G`hNj*Sumym literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.vbproj b/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.vbproj new file mode 100644 index 0000000..966a681 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.vbproj.user b/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToText/TraceToText.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter06/TraceToText/bin/TraceListener.txt b/Source/VisualStudio2003/Chapter06/TraceToText/bin/TraceListener.txt new file mode 100644 index 0000000..913e28a --- /dev/null +++ b/Source/VisualStudio2003/Chapter06/TraceToText/bin/TraceListener.txt @@ -0,0 +1 @@ +This trace information is for all listeners diff --git a/Source/VisualStudio2003/Chapter07/DebugAddIn/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter07/DebugAddIn/AssemblyInfo.vb new file mode 100644 index 0000000..65078ef --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/DebugAddIn/AssemblyInfo.vb @@ -0,0 +1,36 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +'TODO: Review the values of the assembly attributes + + + + + + + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Revision +' Build Number +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + + + + + + +' Note: A strong name key has been generated. If you wish to use it, uncomment the following line: +' diff --git a/Source/VisualStudio2003/Chapter07/DebugAddIn/Connect.vb b/Source/VisualStudio2003/Chapter07/DebugAddIn/Connect.vb new file mode 100644 index 0000000..fc4c4e6 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/DebugAddIn/Connect.vb @@ -0,0 +1,83 @@ +Imports Microsoft.Office.Core +imports Extensibility +imports System.Runtime.InteropServices +Imports EnvDTE + +#Region " Read me for Add-in installation and setup information. " +' When run, the Add-in wizard prepared the registry for the Add-in. +' At a later time, if the Add-in becomes unavailable for reasons such as: +' 1) You moved this project to a computer other than which is was originally created on. +' 2) You chose 'Yes' when presented with a message asking if you wish to remove the Add-in. +' 3) Registry corruption. +' you will need to re-register the Add-in by building the DebugAddInSetup project +' by right clicking the project in the Solution Explorer, then choosing install. +#End Region + + _ +Public Class Connect + + Implements Extensibility.IDTExtensibility2 + Implements IDTCommandTarget + + Dim applicationObject As EnvDTE.DTE + Dim addInInstance as EnvDTE.AddIn + + Public Sub OnBeginShutdown(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnBeginShutdown + End Sub + + Public Sub OnAddInsUpdate(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnAddInsUpdate + End Sub + + Public Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete + End Sub + + Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection + End Sub + + Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection + + applicationObject = CType(application, EnvDTE.DTE) + addInInstance = CType(addInInst, EnvDTE.AddIn) + If connectMode = Extensibility.ext_ConnectMode.ext_cm_UISetup Then + Dim objAddIn As AddIn = CType(addInInst, AddIn) + Dim CommandObj As Command + + ' When run, the Add-in wizard prepared the registry for the Add-in. + ' At a later time, the Add-in or its commands may become unavailable for reasons such as: + ' 1) You moved this project to a computer other than which is was originally created on. + ' 2) You chose 'Yes' when presented with a message asking if you wish to remove the Add-in. + ' 3) You add new commands or modify commands already defined. + ' You will need to re-register the Add-in by building the DebugAddInSetup project, + ' right-clicking the project in the Solution Explorer, and then choosing install. + ' Alternatively, you could execute the ReCreateCommands.reg file the Add-in Wizard generated in + ' the project directory, or run 'devenv /setup' from a command prompt. + Try + CommandObj = applicationObject.Commands.AddNamedCommand(objAddIn, "DebugAddIn", "DebugAddIn", "Executes the command for DebugAddIn", True, 59, Nothing, 1 + 2) '1+2 == vsCommandStatusSupported+vsCommandStatusEnabled + CommandObj.AddControl(applicationObject.CommandBars.Item("Tools")) + Catch e as System.Exception + End Try + End If + End Sub + + Public Sub Exec(ByVal cmdName As String, ByVal executeOption As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As Object, ByRef handled As Boolean) Implements IDTCommandTarget.Exec + handled = False + If (executeOption = vsCommandExecOption.vsCommandExecOptionDoDefault) Then + If cmdName = "DebugAddIn.Connect.DebugAddIn" Then + 'Here is the active code + MsgBox("The add-in debugging demo is born", MsgBoxStyle.OKOnly Or MsgBoxStyle.Information, "Welcome") + handled = True + Exit Sub + End If + End If + End Sub + + Public Sub QueryStatus(ByVal cmdName As String, ByVal neededText As vsCommandStatusTextWanted, ByRef statusOption As vsCommandStatus, ByRef commandText As Object) Implements IDTCommandTarget.QueryStatus + If neededText = EnvDTE.vsCommandStatusTextWanted.vsCommandStatusTextWantedNone Then + If cmdName = "DebugAddIn.Connect.DebugAddIn" Then + statusOption = CType(vsCommandStatus.vsCommandStatusEnabled + vsCommandStatus.vsCommandStatusSupported, vsCommandStatus) + Else + statusOption = vsCommandStatus.vsCommandStatusUnsupported + End If + End If + End Sub +End Class diff --git a/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.sln b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.sln new file mode 100644 index 0000000..53d6a5f --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.sln @@ -0,0 +1,27 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugAddIn", "DebugAddIn.vbproj", "{535259D0-3BAD-4EA0-8E16-9FC33E98294F}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "DebugAddInSetup", "DebugAddInSetup\DebugAddInSetup.vdproj", "{456DEF88-8A39-4CF8-9BF8-CF25DBBEDDA6}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Debug.ActiveCfg = Debug|.NET + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Debug.Build.0 = Debug|.NET + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Release.ActiveCfg = Release|.NET + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Release.Build.0 = Release|.NET + {456DEF88-8A39-4CF8-9BF8-CF25DBBEDDA6}.Debug.ActiveCfg = Debug + {456DEF88-8A39-4CF8-9BF8-CF25DBBEDDA6}.Release.ActiveCfg = Release + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.sln.old b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.sln.old new file mode 100644 index 0000000..79a3573 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.sln.old @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugAddIn", "DebugAddIn.vbproj", "{535259D0-3BAD-4EA0-8E16-9FC33E98294F}" +EndProject +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "DebugAddInSetup", "DebugAddInSetup\DebugAddInSetup.vdproj", "{456DEF88-8A39-4CF8-9BF8-CF25DBBEDDA6}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Debug.ActiveCfg = Debug|.NET + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Debug.Build.0 = Debug|.NET + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Release.ActiveCfg = Release|.NET + {535259D0-3BAD-4EA0-8E16-9FC33E98294F}.Release.Build.0 = Release|.NET + {456DEF88-8A39-4CF8-9BF8-CF25DBBEDDA6}.Debug.ActiveCfg = Debug + {456DEF88-8A39-4CF8-9BF8-CF25DBBEDDA6}.Release.ActiveCfg = Release + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.suo b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.suo new file mode 100644 index 0000000000000000000000000000000000000000..a78a56d41ba22cc368272a69bf2ebd087ef07767 GIT binary patch literal 9216 zcmeHMU1(cX96#wg*Uf$F=A3R`=RUf*mbPiTw)-+))y`#`ZMRkkLYkymx-_>W>AJBF zCWwgmAU?=^azg}B5dvqq&5DBgwJ zhy(v(t@Y*^F2MsFgCZ(&;*>ZnQh4UYar`H+3RRyox>fw& z3M;e*t&~@uLdA}@2KFcTM2857PT?1OP;L_~Cu z2nR%+=YBlb1KrZ6&D;(o^kJtwfwUOG{~0kLcYhk(h@mt$XrNEJYthv$eV)??=G01u zc_zvZuuj@c4@@!SP`9Jt%8W4j$#*N*lM;1fW5yZv3QQ$6kNcgp)80b2RmfoInX zX-z{~2Vgs>!wE4CYZ6Co9x|P+IyvQPRWNZn6-#IVJ(JJsX{qw{!Dv3pk;{g|hqZy& z$;7yPT@g%0(|S@1#Z!4*PQ5y;kEGHGZ74CK_3GJiIecl!+p>T@KA~q4nY?UVF_g;0 z^{JfIz5c1e@L^J08AzulM)YVluJxxfNmea+GLcDSqiL4Q!Bbu}uNsaY0R}{mh=7B- zm;}eD`w?*h9L(W83hoYomy?pGy0lU)ut5=wI*HZ^$@45M(;n0XF?IxfldxKG{Q6+m zBcMP^^yGY6tL_7p0TITiW1y>JE?VC_PSP*mr%Zc{L5{Es_P1D996Q-6sdK8zqR(~b zu;V1w%Qd*OgrM)Ct>VtO4mEGJXEA+?TS-ZE2>i^0|0m^Ys?B1w(f+POk@nLqea2bz z83a3hay@}HoWe=y;0ArN6k4Nu*?%MG(+-n1p{#>L1!KI|EDap!MuQl60^_J5 z9G#as@xo1_NSR7wC!?Sp!Ff`{BZYS%ZrwWU@)tr3LhD1Dk^+A-Ri%${j1hm(i@23P z_Eqthoj!d@23D)s5~6!WQ1lsZxTQ~9@wzFvcKTuLeH{B{96V&MMHjS!&afN%XWYb? z$Sr-wtAplrA&<{L%N(XA`Q?SGizNN@&y=VEbPSLlC1_uSHFuJ{cd9^fcqwJ}HleO)CTH+nk%Z?1tpbI<3@>6&3{r=-WU z4(q+a71xG^`W*HprZIA!Tzfvg?JF_GZx!IcKiITZe?0E<^{-@XdaC+Km1D z=o1HROYinA_)09#<9-!}_P4|IbV74NFd$v{(a`u{TDqn23CLQS9KTs&4NMhA`0)$j z$s3JMaUQ#ObNbzK?+Zz_^c3deJ#Sjh!SXHKt}WirMVns0Cp~ZqQE>t~ItpDik`Oo$Bq)IO90_F%zcWHG@P^ znbpJBj5vYWdny0s&z)Bsxf5{UvePc++M9EG0G5unFeh`U1bo5#yb$hRJ{E9b17%?Mn19p2 zjLUc02POYpGjsE^LW7Q##*`dYe3w<6p>vgXo;ypbb8YRG!jN;`H8H>9?u~mmgKq&m zcu&o|QUOJV+D=*JDC28caqE?twLR(2XV!e=7nimk+Vm~kOhJ>~ip%D>^LVzldD}ZW zd13x_ebUH5c2v(nUM$W*Za4{;b~K9yOO!F3Hl0Mg>~J+G4^wsx;$RmRs+A=y{Jcb^ zHiTtd3QPHX5gdi(dN`})e6)gbRtg#c1t*si1CaXjbJ@Q8LdkvR= z+y5hHxoNWJxa3Njs^fsmHPvYf-bvH z87kM{W-PNx^Yb(I-HmE--ofhgCYC}83ft+ literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.vbproj b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.vbproj new file mode 100644 index 0000000..d684f47 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.vbproj @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.vbproj.user b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.vbproj.user new file mode 100644 index 0000000..7b3836b --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddIn.vbproj.user @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddInSetup/DebugAddInSetup.vdproj b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddInSetup/DebugAddInSetup.vdproj new file mode 100644 index 0000000..f9a80fe --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/DebugAddIn/DebugAddInSetup/DebugAddInSetup.vdproj @@ -0,0 +1,1089 @@ +"DeployProject" +{ +"VSVersion" = "3:701" +"ProjectType" = "8:{2C2AF0D9-9B47-4FE5-BEF2-169778172667}" +"IsWebType" = "8:FALSE" +"ProjectName" = "8:DebugAddInSetup" +"LanguageId" = "3:1033" +"CodePage" = "3:1252" +"UILanguageId" = "3:1033" +"SccProjectName" = "8:" +"SccLocalPath" = "8:" +"SccAuxPath" = "8:" +"SccProvider" = "8:" + "Hierarchy" + { + "Entry" + { + "MsmKey" = "8:_0F4F71DAC220C61A7421F72C99601122" + "OwnerKey" = "8:_A18D22CB7CF548E99EF4F3A51C564401" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4ED3A28D6D324C77A6C0F50FDC0D5EB8" + "OwnerKey" = "8:_A18D22CB7CF548E99EF4F3A51C564401" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_558FE741FD1E46CE401F7BA1D72B6167" + "OwnerKey" = "8:_0F4F71DAC220C61A7421F72C99601122" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A18D22CB7CF548E99EF4F3A51C564401" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A1B4C5D4F0B04AD09A9661E61A87CADD" + "OwnerKey" = "8:_A18D22CB7CF548E99EF4F3A51C564401" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BDEBB69EADEC7D20D27BF63A0899C110" + "OwnerKey" = "8:_0F4F71DAC220C61A7421F72C99601122" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BDEBB69EADEC7D20D27BF63A0899C110" + "OwnerKey" = "8:_A18D22CB7CF548E99EF4F3A51C564401" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F293FC85A07EACA34FA466B4955CB861" + "OwnerKey" = "8:_0F4F71DAC220C61A7421F72C99601122" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F293FC85A07EACA34FA466B4955CB861" + "OwnerKey" = "8:_BDEBB69EADEC7D20D27BF63A0899C110" + "MsmSig" = "8:_UNDEFINED" + } + } + "Configurations" + { + "Debug" + { + "DisplayName" = "8:Debug" + "IsDebugOnly" = "11:TRUE" + "IsReleaseOnly" = "11:FALSE" + "OutputFilename" = "8:Debug\\DebugAddInSetup.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + } + "Release" + { + "DisplayName" = "8:Release" + "IsDebugOnly" = "11:FALSE" + "IsReleaseOnly" = "11:TRUE" + "OutputFilename" = "8:Release\\DebugAddInSetup.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + } + } + "Deployable" + { + "CustomAction" + { + } + "DefaultFeature" + { + "Name" = "8:DefaultFeature" + "Title" = "8:" + "Description" = "8:" + } + "ExternalPersistence" + { + "LaunchCondition" + { + "{2522A265-4974-4402-83C5-3B575A2E935A}:_64C84FB153514CFFA559C6152F971F64" + { + "Name" = "8:MsiNetAssemblySupport" + "Message" = "8:[VSDNETMSG]" + "SupportedRuntimes" = "8:1.1.4322" + "InstallUrl" = "8:http://support.microsoft.com/support/vstudio/vsdeployment.asp" + } + } + } + "Feature" + { + } + "File" + { + "{FB480208-1853-44D0-9ABD-A3B734C3FAAA}:_0F4F71DAC220C61A7421F72C99601122" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:EnvDTE, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_0F4F71DAC220C61A7421F72C99601122" + { + "Name" = "8:EnvDTE.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:EnvDTE.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{FB480208-1853-44D0-9ABD-A3B734C3FAAA}:_4ED3A28D6D324C77A6C0F50FDC0D5EB8" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Extensibility, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_4ED3A28D6D324C77A6C0F50FDC0D5EB8" + { + "Name" = "8:Extensibility.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Extensibility.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{A582A373-4685-4296-BEFE-614B80A702C3}:_558FE741FD1E46CE401F7BA1D72B6167" + { + "SourcePath" = "8:dte.olb" + "TargetName" = "8:dte.olb" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{FB480208-1853-44D0-9ABD-A3B734C3FAAA}:_BDEBB69EADEC7D20D27BF63A0899C110" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Office, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_BDEBB69EADEC7D20D27BF63A0899C110" + { + "Name" = "8:Office.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Office.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{FB480208-1853-44D0-9ABD-A3B734C3FAAA}:_F293FC85A07EACA34FA466B4955CB861" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:TRUE" + "AssemblyAsmDisplayName" = "8:stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" + "ScatterAssemblies" + { + "_F293FC85A07EACA34FA466B4955CB861" + { + "Name" = "8:stdole.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:stdole.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + } + "FileType" + { + } + "Folder" + { + "{78BAF5CE-F2E5-45BE-83BC-DB6AF387E941}:_752873E334AC42F28BA930688B96759E" + { + "Name" = "8:#1919" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:ProgramMenuFolder" + "Folders" + { + } + } + "{78BAF5CE-F2E5-45BE-83BC-DB6AF387E941}:_B77B8CC82F544E14958EA25C687EBC48" + { + "Name" = "8:#1916" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:DesktopFolder" + "Folders" + { + } + } + "{58C0ADA3-3CEA-43BD-A3B3-2EA121BC8217}:_CDE300ED3B194097AE33ECB71ECE9B7F" + { + "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]" + "Name" = "8:#1925" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:TARGETDIR" + "Folders" + { + } + } + } + "LaunchCondition" + { + } + "Locator" + { + } + "MsiBootstrapper" + { + "LangId" = "3:1033" + } + "Product" + { + "Name" = "8:Microsoft Visual Studio" + "ProductName" = "8:DebugAddInSetup" + "ProductCode" = "8:{3D050B02-F6BD-4803-BCF5-8FE325A4F971}" + "PackageCode" = "8:{7E2C78B2-2B27-4375-BD94-1DCCD3675BAC}" + "UpgradeCode" = "8:{6FB60611-7F9C-44AB-8E9B-799CE6399B7D}" + "RestartWWWService" = "11:FALSE" + "RemovePreviousVersions" = "11:FALSE" + "DetectNewerInstalledVersion" = "11:TRUE" + "ProductVersion" = "8:1.0.0" + "Manufacturer" = "8:Sleek Software Ltd" + "ARPHELPTELEPHONE" = "8:" + "ARPHELPLINK" = "8:" + "Title" = "8:DebugAddInSetup" + "Subject" = "8:" + "ARPCONTACT" = "8:Sleek Software Ltd" + "Keywords" = "8:" + "ARPCOMMENTS" = "8:" + "ARPURLINFOABOUT" = "8:" + "ARPPRODUCTICON" = "8:" + "ARPIconIndex" = "3:0" + "SearchPath" = "8:" + "UseSystemSearchPath" = "11:TRUE" + } + "Registry" + { + "HKLM" + { + "Keys" + { + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_D8629588BB434B99AFF1B48A49CB55F6" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_69989357966443E881ABD5623DDA1BE3" + { + "Name" = "8:Microsoft" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_09A6D1EA72204C8F95507099738A41DE" + { + "Name" = "8:VSA" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_273AAC7056794D72975B80AA8D6C91D0" + { + "Name" = "8:7.0" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_F83464988848477BAF60E13BD25C51A0" + { + "Name" = "8:AddIns" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_760A9241284549849D704A7092BB9869" + { + "Name" = "8:DebugAddIn.Connect" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_11947A1EA185469590A77AF750773B0E" + { + "Name" = "8:Description" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:Demonstrate add-in debugging" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_3E878CE40D6141BC8DA290F9FB5D7D60" + { + "Name" = "8:LoadBehavior" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:1" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_7A2F3F5E81E24C36BBD71FA51E9462B8" + { + "Name" = "8:AboutBoxIcon" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:4" + "Value" = "8:0000010002002020100000000000E8020000260000001010100000000000280100000E0300002800000020000000400000000100040000000000800200000000000000000000000000000000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ABA00000000000000000000000000000BAB00000000000000000000000000000ABA00000000000000000000000F00000BAB00000000000008888888888F0ABABABABABA0000000008F77777777F0BABABABABAB0000000008F77777777F0ABABABABABA0000000008F77777777F00000BAB00000000000008F77777777FFFFF0ABA00000008880008F777777777777F0BAB00000887788008F777777777777F0ABA000008FF770778F777777777777F0000000008FFF78088F777777777777FFFFFF000008FF70008F7777777777777777800000008880008F7777777777777777800000000000008F7777777777777777800000000000008F7777777777777777800000000000008F7777777777777777800000000000008FFFFFFFFFFFFFFFFF800000000000008888888888888888888000000000000000000870000008700000000000000000000008F0000008F000000000000000000000008000000080000000000000000000000808000008080000000000000000000877788008777880000000000000000008FF778008FF7780000000000000000008FFF78008FFF7800000000000000000008FF700008FF7000000000000000000000777000007770000000000000000000000000000000000000000FFFFFFFFFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFF000000FF000000FF000000FF000000FF000000C700000F8300000F0000000F0000000F0000000F8300000FC700000FFF00000FFF00000FFF00000FFF00000FFF00000FFFF8F8FFFFF8F8FFFFF8F8FFFFF0707FFFE0203FFFE0203FFFE0203FFFF0707FFFF8F8FFFFFFFFFF2800000010000000200000000100040000000000C00000000000000000000000000000000000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000000000000000000000000000000000000000A000000000000000B00000000000F0ABABA000008F88F000B00000008F77FFF0A00070708F7777F000000F008F7777FFFF0070708F777777800000008FFFFFFF800000008888888880000000000000000000000000070700000000000000F00000000000000707000000FFFF0000FFE30000FFE30000FF800000F0000000F0000000F0030000100300000003000010030000F0030000F0030000FF7F0000FE3F0000FE3F0000FE3F0000" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_8FEFF79061BA49B08795EDCEF0FAD25C" + { + "Name" = "8:CommandLineSafe" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:0" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_A7C4E07C9B3049C28FB2C27A063E04F1" + { + "Name" = "8:FriendlyName" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:Debug AddIn" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_AE28F0AFA43741458B1449FB88335D41" + { + "Name" = "8:CommandPreload" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:1" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_DC92F045E0DD4F048CC51E5AEB57B049" + { + "Name" = "8:AboutBoxDetails" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:This Visual Studio .NET add-in is a debugging demonstration" + } + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_EFB6A2CFDF204BFF845AFADBF144FB32" + { + "Name" = "8:VisualStudio" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_5D224508FB724B778F87AE714E8EB555" + { + "Name" = "8:7.0" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_0D86E33CA23741F8BBD2C390AC4ED8B6" + { + "Name" = "8:AddIns" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_F9CE86043D2B48369CE7E86AA726972E" + { + "Name" = "8:DebugAddIn.Connect" + "Condition" = "8:" + "AlwaysCreate" = "11:TRUE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_058E8ADEBEBC4DA5BFA240CF913CD84C" + { + "Name" = "8:AboutBoxIcon" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:4" + "Value" = "8:0000010002002020100000000000E8020000260000001010100000000000280100000E0300002800000020000000400000000100040000000000800200000000000000000000000000000000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ABA00000000000000000000000000000BAB00000000000000000000000000000ABA00000000000000000000000F00000BAB00000000000008888888888F0ABABABABABA0000000008F77777777F0BABABABABAB0000000008F77777777F0ABABABABABA0000000008F77777777F00000BAB00000000000008F77777777FFFFF0ABA00000008880008F777777777777F0BAB00000887788008F777777777777F0ABA000008FF770778F777777777777F0000000008FFF78088F777777777777FFFFFF000008FF70008F7777777777777777800000008880008F7777777777777777800000000000008F7777777777777777800000000000008F7777777777777777800000000000008F7777777777777777800000000000008FFFFFFFFFFFFFFFFF800000000000008888888888888888888000000000000000000870000008700000000000000000000008F0000008F000000000000000000000008000000080000000000000000000000808000008080000000000000000000877788008777880000000000000000008FF778008FF7780000000000000000008FFF78008FFF7800000000000000000008FF700008FF7000000000000000000000777000007770000000000000000000000000000000000000000FFFFFFFFFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFF000000FF000000FF000000FF000000FF000000C700000F8300000F0000000F0000000F0000000F8300000FC700000FFF00000FFF00000FFF00000FFF00000FFF00000FFFF8F8FFFFF8F8FFFFF8F8FFFFF0707FFFE0203FFFE0203FFFE0203FFFF0707FFFF8F8FFFFFFFFFF2800000010000000200000000100040000000000C00000000000000000000000000000000000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000000000000000000000000000000000000000A000000000000000B00000000000F0ABABA000008F88F000B00000008F77FFF0A00070708F7777F000000F008F7777FFFF0070708F777777800000008FFFFFFF800000008888888880000000000000000000000000070700000000000000F00000000000000707000000FFFF0000FFE30000FFE30000FF800000F0000000F0000000F0030000100300000003000010030000F0030000F0030000FF7F0000FE3F0000FE3F0000FE3F0000" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_66BFFC4A036F475F8630545DE4F7F84E" + { + "Name" = "8:AboutBoxDetails" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:This Visual Studio .NET add-in is a debugging demonstration" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_94963B340CE84207BF19AA8403B83E9B" + { + "Name" = "8:CommandLineSafe" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:0" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_B6F46FA7092B4CB19031659BD70DB93C" + { + "Name" = "8:Description" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:Demonstrate add-in debugging" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_BDFB3C729CE84D42AECADBDAA31673F4" + { + "Name" = "8:LoadBehavior" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:1" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_D50A998B828C4589BFABB1E3E4BD6D56" + { + "Name" = "8:CommandPreload" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:3" + "Value" = "3:1" + } + "{35AE352C-BC79-4EF9-ABD8-61F467188583}:_F5DE8AC508494456A4773705B4A1C6FD" + { + "Name" = "8:FriendlyName" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:Debug AddIn" + } + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCU" + { + "Keys" + { + "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_6B40E74C6A3648E19EC5C00FD7DA0A53" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + } + "HKCR" + { + "Keys" + { + } + } + "HKU" + { + "Keys" + { + } + } + "HKPU" + { + "Keys" + { + } + } + } + "Sequences" + { + } + "Shortcut" + { + } + "UserInterface" + { + "{B654A020-6903-4E6A-A86C-75DC463DB54B}:_6218B88E89FE478E8B64EE267D46CFB2" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdUserInterface.wim" + } + "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_6C6A2019794A428AAC594CF1F4D0D8D0" + { + "Name" = "8:#1901" + "Sequence" = "3:2" + "Attributes" = "3:2" + "Dialogs" + { + "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_3DDA4B78A4D44F9EA0C350450DFFBB62" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_7B0B0E38D1C04BFAB059184A451012ED" + { + "Name" = "8:#1902" + "Sequence" = "3:2" + "Attributes" = "3:3" + "Dialogs" + { + "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_032AE689439C4F52B1646CEC625D44BA" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_9A854B9E75D447AC8A77C302D70B2349" + { + "Name" = "8:#1902" + "Sequence" = "3:1" + "Attributes" = "3:3" + "Dialogs" + { + "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_182877F5792B4153B0623805DCD78B2E" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "UpdateText" + { + "Name" = "8:UpdateText" + "DisplayName" = "8:#1058" + "Description" = "8:#1158" + "Type" = "3:15" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1258" + "DefaultValue" = "8:#1258" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_B0D7A8425A044AC494921E9159923DDA" + { + "Name" = "8:#1900" + "Sequence" = "3:2" + "Attributes" = "3:1" + "Dialogs" + { + "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_3419C658202E4141A292F8097FA90D51" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_3D47C35321644641B44D8910FFCD10AC" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_50A57E1AB4AB486AA7FE6F9D752B8383" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_B866188749924DE390D758D413B13E1D" + { + "Name" = "8:#1901" + "Sequence" = "3:1" + "Attributes" = "3:2" + "Dialogs" + { + "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_9FF09CF32AA4497DAA0CF1AD1051F8EF" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{B654A020-6903-4E6A-A86C-75DC463DB54B}:_C354EEFC52134F47A537732481755B06" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdBasicDialogs.wim" + } + "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_CE2DB2EACD34479992CADC4C0326386E" + { + "Name" = "8:#1900" + "Sequence" = "3:1" + "Attributes" = "3:1" + "Dialogs" + { + "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_4EEE0209AC304F7981534B738F1E4D14" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_51687977F6BE4225ADB22755AA7A8AF8" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_917F1F1053AC478B9AB035F9D81BB6F9" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + } + "MergeModule" + { + "{35A69C6E-5BA4-440D-803D-762B59A45393}:_A1B4C5D4F0B04AD09A9661E61A87CADD" + { + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:TRUE" + "SourcePath" = "8:dotnetfxredist_x86.msm" + "Properties" + { + } + "LanguageId" = "3:1033" + "Exclude" = "11:TRUE" + "Folder" = "8:" + "Feature" = "8:" + "IsolateTo" = "8:" + } + } + "ProjectOutput" + { + "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_A18D22CB7CF548E99EF4F3A51C564401" + { + "SourcePath" = "8:..\\obj\\Debug\\DebugAddIn.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_CDE300ED3B194097AE33ECB71ECE9B7F" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:2" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{535259D0-3BAD-4EA0-8E16-9FC33E98294F}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + } + } +} diff --git a/Source/VisualStudio2003/Chapter07/DebugAddIn/ReCreateCommands.reg b/Source/VisualStudio2003/Chapter07/DebugAddIn/ReCreateCommands.reg new file mode 100644 index 0000000..1b4cb3f --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/DebugAddIn/ReCreateCommands.reg @@ -0,0 +1,5 @@ +REGEDIT4 +[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VSA\7.0\PreloadAddinState] +"DebugAddIn.Connect"=dword:1 +[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\7.0\PreloadAddinState] +"DebugAddIn.Connect"=dword:1 diff --git a/Source/VisualStudio2003/Chapter07/NumericTextBox/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter07/NumericTextBox/AssemblyInfo.vb new file mode 100644 index 0000000..8741dfc --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/NumericTextBox/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter07/NumericTextBox/ControlContainer.resx b/Source/VisualStudio2003/Chapter07/NumericTextBox/ControlContainer.resx new file mode 100644 index 0000000..d10f386 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/NumericTextBox/ControlContainer.resx @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + ControlContainer + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter07/NumericTextBox/ControlContainer.vb b/Source/VisualStudio2003/Chapter07/NumericTextBox/ControlContainer.vb new file mode 100644 index 0000000..bb29be2 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/NumericTextBox/ControlContainer.vb @@ -0,0 +1,66 @@ +Option Strict On + +Public Class ControlContainer + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Switch on control debugging + Me.CustomControl.DebugMode = True + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents CustomControl As DebugDemo.NumericTextBox + Private Sub InitializeComponent() + Me.CustomControl = New DebugDemo.NumericTextBox() + Me.SuspendLayout() + ' + 'CustomControl + ' + Me.CustomControl.DebugMode = False + Me.CustomControl.Location = New System.Drawing.Point(80, 112) + Me.CustomControl.Name = "CustomControl" + Me.CustomControl.TabIndex = 0 + Me.CustomControl.Text = "" + ' + 'ControlContainer + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(292, 272) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.CustomControl}) + Me.Name = "ControlContainer" + Me.Text = "Form1" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub ShowDebugMessage(ByVal DebugMethod As String, ByVal DebugComment As String) Handles CustomControl.DebugMessage + 'Show the debug message whenever user types non-numeric character + MsgBox(DebugComment, MsgBoxStyle.OKOnly Or MsgBoxStyle.Information, DebugMethod) + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBox.resx b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBox.resx new file mode 100644 index 0000000..df79c33 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBox.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBox.vb b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBox.vb new file mode 100644 index 0000000..3a73386 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBox.vb @@ -0,0 +1,11 @@ +Imports System.Windows.Forms + +Public Class NumericTextBox : Inherits TextBox + + Private Sub NumericTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress + If e.KeyChar < "0"c Or e.KeyChar > "9"c Then + e.Handled = True + End If + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.sln b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.sln new file mode 100644 index 0000000..cc6fb80 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.sln @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NumericTextBoxTest", "NumericTextBoxTest.vbproj", "{8A595660-BB97-4824-AD3F-43500C201AB4}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8A595660-BB97-4824-AD3F-43500C201AB4}.Debug.ActiveCfg = Debug|.NET + {8A595660-BB97-4824-AD3F-43500C201AB4}.Debug.Build.0 = Debug|.NET + {8A595660-BB97-4824-AD3F-43500C201AB4}.Release.ActiveCfg = Release|.NET + {8A595660-BB97-4824-AD3F-43500C201AB4}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(SolutionItems) = postSolution + ..\DebugDemoControl\NumericTextBox.vb = ..\DebugDemoControl\NumericTextBox.vb + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.sln.old b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.sln.old new file mode 100644 index 0000000..9ee862d --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.sln.old @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NumericTextBoxTest", "NumericTextBoxTest.vbproj", "{8A595660-BB97-4824-AD3F-43500C201AB4}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8A595660-BB97-4824-AD3F-43500C201AB4}.Debug.ActiveCfg = Debug|.NET + {8A595660-BB97-4824-AD3F-43500C201AB4}.Debug.Build.0 = Debug|.NET + {8A595660-BB97-4824-AD3F-43500C201AB4}.Release.ActiveCfg = Release|.NET + {8A595660-BB97-4824-AD3F-43500C201AB4}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(SolutionItems) = postSolution + Item:1 = ..\DebugDemoControl\NumericTextBox.vb + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.suo b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.suo new file mode 100644 index 0000000000000000000000000000000000000000..eb6c42eea4570ac0e1730f62967479433e1e6c4d GIT binary patch literal 7168 zcmeHL&re)c6h2UD3l`d{pjKO-we?3M1Zc4qYz^~fP?Vt+Xu)I>GYpSm=wsewW}r0c z!o-E~4=}he%C1pk;!eBJg^7t9%f`6TM0YMs)Rk@ozwf?x=QlHN3TjBWFXz4c?mh3G zd+#~tJLkT&TZeyI{q)GsQc^C+9$DXLmOBdC8&D^ya!8~R6~3=;Y;3rVBB<_`9kc^~ zW3Ek}4)@|oeeVM`gZ6`3KnFn7G3id!chK^7r&?nN#>Byu6+=Rj#4|0|p<(}}L-ywE zfwoeuq+a>KJO8xVabq_KfGM4RPOYq00K zY1=Hrki;FZWg7Qo8CTMmFq;@^wTl7yZD2bH@++U1`H465uv~%6umt52R_#bi$~RVxO#h|7`juaZ*Q|5@s1xnu!~k9AxKtJWo;c77;(FPS5Rl{3{OxG# z0No3^4|G512*qpVXUR#5SsO`j!&`cuhq{(n7>`W(Y%b2vLjUgw! zpgwOddTTMAg_M)Dl3CT+I+;k$IM*_H_NM12!Xq54&9oD#X(yVVF~$z1=<8wKBjdM5@=ptg+ufI_E;H&s2Vk;}(8uHj+GJidwHn+!&qgv2D|Izl8Fgsc>1 z!;z!lNC5vd{si$=1}$;$b2k2v5ctzTywFzaO|a^NeytfObs8&<)YVWv@o0rG2e%e4i>t~*|fPcst#lOWfQ-B=XIUPNJwh74gYw$exhv5MBiSd{_I zVxC5kr5i=IZb%m_Is`kWKg5)U^Xn|$Mc(|6B+}MxtYj85h+y9I&`9q6|DK0CJMG)p z68M7OohLWrcWLq4R%(CLH1VPk$x6pAeAo6zfAVX8w7qxeG$^I=!?3ai*cJ28V(fDH zOYcv5_RqY;uYBfe6W&1dHy3@Auywn@(p?|WSZXR?Bqy`vJRs3ugT4TGUI#kPATk%ry{OQ?P%169m`Bgejr8Q*k65t1a~qHg z+dN{IjKPB#NqFkB-r^kNs4`AAJ@ND!oJ@sl0Rnf0#SC=;IH6?gqccKgJmwv(^~r;_NI|8b>Rm zpzbM`%@*K)PPSkCW2{>90O}&L&v_sKBkpDxUsPYB6o#!z#|$R2JurM2GEu798HXpH z47AR@DM!mv{CLUW`75SQU(84Ir!W4)(dQ(NSAO~;(v+UQlHkjqz8LSBAGrU9n4x)T z3vkQzx~W_APOgYKZY>lm$B(a9pS}4@`^%&6c73#e_1E)1){7rXc*(6ERpqh6J%8o% zzw6isu6vV%vnLbzU)}!q7`~+sZdcLRP>*=cE5%RF}?whpv3BgIfITFT_9npIQHZ9tS3H u515BAD&;f%$|DnhwQRrZKZ&9A`CG4d82c~_$<#wVrQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.vbproj.user b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.vbproj.user new file mode 100644 index 0000000..6f2ca04 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/NumericTextBox/NumericTextBoxTest.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter07/NumericTextBox/obj/Debug/WindowsApplication10.ControlContainer.resources b/Source/VisualStudio2003/Chapter07/NumericTextBox/obj/Debug/WindowsApplication10.ControlContainer.resources new file mode 100644 index 0000000000000000000000000000000000000000..7d2717ad015aa99cfcb8b73b33316540f976082f GIT binary patch literal 666 zcmb_YOG*Pl5UmKJpo<`GTsaFj!q7~JNz5XPFxhD&WW=3>`IOq&ALx&et0;H{Z{Pu3 zcmXfqN^cOY#;6MyZl>th)l|Rwyn23me{2B2Jz+naTZfWO(Q0o>v_G#Y<`tSalD5=F z@WTFOdgZvp@6-(4FFTIT&{(e3pv4l_ZYK##;wbgPd4mIm-kDs)(Zm;mmq$21)z_#7 zMX#54%1*b{Zy#WC*bh^#EOEZeHq)$ literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter07/SortingDebug/AssemblyInfo.vb new file mode 100644 index 0000000..e68a407 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.sln b/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.sln new file mode 100644 index 0000000..0992622 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.sln @@ -0,0 +1,35 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoLogic", "SortingDll\DebugDemoLogic.vbproj", "{057FA2D6-5280-4393-BE33-C6631BA07451}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoForm", "DebugDemoForm.vbproj", "{1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}" + ProjectSection(ProjectDependencies) = postProject + {057FA2D6-5280-4393-BE33-C6631BA07451} = {057FA2D6-5280-4393-BE33-C6631BA07451} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + ReleaseCustom = ReleaseCustom + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.ActiveCfg = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.Build.0 = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.ActiveCfg = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.Build.0 = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.ActiveCfg = ReleaseCustom|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.Build.0 = ReleaseCustom|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.ActiveCfg = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.Build.0 = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.Build.0 = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.sln.old b/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.sln.old new file mode 100644 index 0000000..b71c4dc --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.sln.old @@ -0,0 +1,33 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoLogic", "SortingDll\DebugDemoLogic.vbproj", "{057FA2D6-5280-4393-BE33-C6631BA07451}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DebugDemoForm", "DebugDemoForm.vbproj", "{1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + ConfigName.2 = ReleaseCustom + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.0 = {057FA2D6-5280-4393-BE33-C6631BA07451} + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.ActiveCfg = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Debug.Build.0 = Debug|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.ActiveCfg = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.Release.Build.0 = Release|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.ActiveCfg = ReleaseCustom|.NET + {057FA2D6-5280-4393-BE33-C6631BA07451}.ReleaseCustom.Build.0 = ReleaseCustom|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.ActiveCfg = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Debug.Build.0 = Debug|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.Release.Build.0 = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.ActiveCfg = Release|.NET + {1AA3BEBF-5A57-486B-B4E1-84A24B1D5AB9}.ReleaseCustom.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.suo b/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemo.suo new file mode 100644 index 0000000000000000000000000000000000000000..ab9a81daaf4ca9372025172b56200010c16e9392 GIT binary patch literal 12800 zcmeHNU2GiH6~5~P@rXheKiEBHX5E4RbuWg!OCm}XCl~yYD?%3I6cgNaY zCqXd}2m*+wK2%lufJh#oh@VPGJU}Esf~sl}EfEsp1rY5^d8kDDRHUkLzwh2TJ2Shp zyR**51l4zScJADJ=bn4dIrsd{T=;m+SLfci@vo|)+^-g?i?hqr)xP!^>I7X@E7gVy z;o|Jwj*8(5{Y7Kz= zCsdZOw#qRJ_unlA4k-t}lCo64%Hvv4kAb7n%X&zS?0|Apul)2^%a1v$K8P*ip!H_t zh#FHxbxaMa46Y^hF#c_|@=PhVJ*?(00)S*xFVU$Yzy;y^dH5^k@;7dmHq~1E(v474dYtWN6_@mAq z(M&LBw*&XQB@H_PJh!3)c>bveN8>En!y?N{Cu?iGeHi|y-@ZjI~G9Ba4#g7k~^t}A;SfnCtIb_&vVK? zp7Tc_<5`?LK0g6SfU8M8ei~1tFe-^L)CtpiIizLG=>7& z?s4ZJPO}2Pef%RAcN?D+yM=MKpsQu9GBbuHmO(8yA z!o5;YRq3C8by8EGG$pO`4Yc4LuKuI%KzYTbVd2oBc64|6NjDwX9@+A8O2bf3g2uC1YlAu}cXj6N)a?makPIenk0deSfR2Qh0A z5C?RJTKxaR<7KSUwpwnoQx76taJcBV-V_-sPfP8BLCDgv_rB-bIvBP z>q)JDh}r1DFzobqn)m-0PaSs`Z~)%tQRsB)`dVi^9J6V?1^ZuzD&;Ne{;$K>XUyX| z=F`<1)Q5}hMNnh2v+ZpvHuy`Skb39uFP``#?hh|DZ3kngU~0F+lnkgI>hf>ief>+q zS$9re{`_iut+ZX;h^fg(epS&0XrL&sOv|MAL1nt+95)G)-9&M48+O2&&A9~$> z;rzc2KfCem{?~SWnmY6ElN+>ZU$uYu^LM{lG4$N+XWnajVcoad%_;n8U(a1{bH`1 zMR-g*IEA&)^3oa_Nua%}Ux2@iJF5KC5B=7i_F>plVjY7{q?an|F;-WTtL_3e&H=xF z{}Shl?>r2dGCngsPWqbl%Ut$PeIfqWUhsVwC$P`m`IM%93EmGQQRDfLAGONem$-iq zKRq#8n@MoQNC5wN3K4xO&P+MURx)E=8q83MFb}wKnB&Z)())E-A1GO%+_2@V)jwia* z!|o=qtIexqUft&{^b<7+JoOV&HY}u2$YQ;?JiI@c0vw%wQR&8 z9bKsHL~9SECyw?maGIlgAwf}OgB}5+nV|dxbvQY;ROgghxwhTPaKDwi4a#J6x*P7d zawT)&KK-B`=xX}Q$Mu<-fG#)Grxm&j~k4JB55qiIY{jl(Q1aLX%UF)=ooSUpg8n!nJx$*H%9Eh2+m`K9c z46P?(W`k1@E(gJP_<^qZ8k&wss@)h=o=+(G?~iq%4>GJpqJ*o79*nocww|!dn;C z?#jM@Va=Pp>g=X{8$MyT--7t-zDEPq1|I#JMBMc{1}y^(7fVD!CeAznKsJ z%s)`_8HGj7Ka67R766O*hI_GUDs*N)nknn&kbmk20=|P_p&Igk|KYuVd<^P|IidO# zkoTY5JByjM{{I8$_WM%xM>p;@n9YCV(ZLbM!2L&v;A-Wv?K5H+(Aed^a4#wilGS=y z&QweARTR^%@+zt_*vRQ%qk6tzYTnX`n^4;fTnsiS(q;#&F|ZKNA*s_pToqZJ1wQ(a z?7du`T3MPN1sh0gc{jrIbF0f5c{d_`ZnM5fA8k%MzK*ffWs{RHrF>*EYyg2B}6NYik{xE^@oH^zz8DLZw+8a`oz#`X! zs8@dVVk3LBrySRN-^&ysdW?7(RJ4cW1UAEI=ND0eC;E3P^jLyN&;J&<^5|VzaXzUj zg*%^bPmDMhxGR=g-i(Er1}|yn`7h!#8I@|XI4eL=$>Q)!K`Es40H9hUb?CNWR!C;1 vY%`bddE?ZK!NQrt^dR4xvyV~IqkvXmuBVf^+t%&y(lxE$cUY+Z|54z7_SeJb literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemoForm.vbproj b/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemoForm.vbproj new file mode 100644 index 0000000..fda6517 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemoForm.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemoForm.vbproj.user b/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemoForm.vbproj.user new file mode 100644 index 0000000..6f2ca04 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/DebugDemoForm.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/DemoForm.resx b/Source/VisualStudio2003/Chapter07/SortingDebug/DemoForm.resx new file mode 100644 index 0000000..363456d --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/DemoForm.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + Assembly + + + True + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + Assembly + + + True + + + DebugDemo + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/DemoForm.vb b/Source/VisualStudio2003/Chapter07/SortingDebug/DemoForm.vb new file mode 100644 index 0000000..cf4ee1a --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/DemoForm.vb @@ -0,0 +1,207 @@ +Public Class DebugDemo + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents lblTwo As System.Windows.Forms.Label + Friend WithEvents lblOne As System.Windows.Forms.Label + Friend WithEvents boxSort As System.Windows.Forms.GroupBox + Friend WithEvents Timing As System.Windows.Forms.Label + Friend WithEvents StartSort As System.Windows.Forms.Button + Friend WithEvents MaxValue As System.Windows.Forms.TextBox + Friend WithEvents NumberItems As System.Windows.Forms.TextBox + Friend WithEvents SortCounting As System.Windows.Forms.RadioButton + Friend WithEvents SortQuick As System.Windows.Forms.RadioButton + Friend WithEvents SortSelection As System.Windows.Forms.RadioButton + Friend WithEvents SortBubble As System.Windows.Forms.RadioButton + Private Sub InitializeComponent() + Me.lblTwo = New System.Windows.Forms.Label() + Me.lblOne = New System.Windows.Forms.Label() + Me.StartSort = New System.Windows.Forms.Button() + Me.MaxValue = New System.Windows.Forms.TextBox() + Me.NumberItems = New System.Windows.Forms.TextBox() + Me.boxSort = New System.Windows.Forms.GroupBox() + Me.SortCounting = New System.Windows.Forms.RadioButton() + Me.SortQuick = New System.Windows.Forms.RadioButton() + Me.SortSelection = New System.Windows.Forms.RadioButton() + Me.SortBubble = New System.Windows.Forms.RadioButton() + Me.Timing = New System.Windows.Forms.Label() + Me.boxSort.SuspendLayout() + Me.SuspendLayout() + ' + 'lblTwo + ' + Me.lblTwo.Location = New System.Drawing.Point(32, 96) + Me.lblTwo.Name = "lblTwo" + Me.lblTwo.Size = New System.Drawing.Size(112, 30) + Me.lblTwo.TabIndex = 14 + Me.lblTwo.Text = "Max item value" + ' + 'lblOne + ' + Me.lblOne.Location = New System.Drawing.Point(32, 40) + Me.lblOne.Name = "lblOne" + Me.lblOne.Size = New System.Drawing.Size(112, 30) + Me.lblOne.TabIndex = 12 + Me.lblOne.Text = "Number of items" + ' + 'StartSort + ' + Me.StartSort.Location = New System.Drawing.Point(280, 285) + Me.StartSort.Name = "StartSort" + Me.StartSort.Size = New System.Drawing.Size(92, 39) + Me.StartSort.TabIndex = 10 + Me.StartSort.Text = "Start sort" + ' + 'MaxValue + ' + Me.MaxValue.Location = New System.Drawing.Point(160, 96) + Me.MaxValue.Name = "MaxValue" + Me.MaxValue.Size = New System.Drawing.Size(72, 22) + Me.MaxValue.TabIndex = 13 + Me.MaxValue.Text = "10000" + ' + 'NumberItems + ' + Me.NumberItems.Location = New System.Drawing.Point(160, 40) + Me.NumberItems.Name = "NumberItems" + Me.NumberItems.Size = New System.Drawing.Size(72, 22) + Me.NumberItems.TabIndex = 11 + Me.NumberItems.Text = "1000" + ' + 'boxSort + ' + Me.boxSort.Controls.AddRange(New System.Windows.Forms.Control() {Me.SortCounting, Me.SortQuick, Me.SortSelection, Me.SortBubble}) + Me.boxSort.Location = New System.Drawing.Point(280, 16) + Me.boxSort.Name = "boxSort" + Me.boxSort.Size = New System.Drawing.Size(232, 247) + Me.boxSort.TabIndex = 9 + Me.boxSort.TabStop = False + Me.boxSort.Text = "Sort algorithm" + ' + 'SortCounting + ' + Me.SortCounting.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.SortCounting.Location = New System.Drawing.Point(41, 178) + Me.SortCounting.Name = "SortCounting" + Me.SortCounting.Size = New System.Drawing.Size(164, 29) + Me.SortCounting.TabIndex = 3 + Me.SortCounting.Text = "Counting sort" + ' + 'SortQuick + ' + Me.SortQuick.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.SortQuick.Location = New System.Drawing.Point(41, 128) + Me.SortQuick.Name = "SortQuick" + Me.SortQuick.Size = New System.Drawing.Size(164, 30) + Me.SortQuick.TabIndex = 2 + Me.SortQuick.Text = "Quick sort" + ' + 'SortSelection + ' + Me.SortSelection.Location = New System.Drawing.Point(41, 79) + Me.SortSelection.Name = "SortSelection" + Me.SortSelection.Size = New System.Drawing.Size(164, 30) + Me.SortSelection.TabIndex = 1 + Me.SortSelection.Text = "Selection sort" + ' + 'SortBubble + ' + Me.SortBubble.Checked = True + Me.SortBubble.Location = New System.Drawing.Point(41, 30) + Me.SortBubble.Name = "SortBubble" + Me.SortBubble.Size = New System.Drawing.Size(164, 29) + Me.SortBubble.TabIndex = 0 + Me.SortBubble.TabStop = True + Me.SortBubble.Text = "Bubble sort" + ' + 'Timing + ' + Me.Timing.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.Timing.Location = New System.Drawing.Point(400, 288) + Me.Timing.Name = "Timing" + Me.Timing.Size = New System.Drawing.Size(112, 32) + Me.Timing.TabIndex = 15 + ' + 'DebugDemo + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(544, 348) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Timing, Me.lblTwo, Me.lblOne, Me.StartSort, Me.MaxValue, Me.NumberItems, Me.boxSort}) + Me.Name = "DebugDemo" + Me.Text = "Debug demo" + Me.boxSort.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private m_SortType As DemoSort.SortType = DemoSort.SortType.BubbleSort + + Private Sub StartSort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartSort.Click + Dim SortObject As New DemoSort() + + 'Show that we're busy + Cursor.Current = Cursors.WaitCursor + Me.StartSort.Enabled = False + + 'Build a list to sort + Me.Timing.Text = "Building list to sort..." + Me.Timing.Refresh() + SortObject.ListBuild(Convert.ToInt32(Me.NumberItems.Text), 1, Convert.ToInt32(Me.MaxValue.Text)) + + 'Do the sort and report timing + Me.Timing.Text = "Performing sort..." + Me.Timing.Refresh() + Me.Timing.Text = SortObject.DoSort(m_SortType).ToString & " seconds" + + 'Show that we've finished + Me.StartSort.Enabled = True + Cursor.Current = Cursors.Default + + End Sub + + Private Sub SortBubble_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortBubble.CheckedChanged + m_SortType = DemoSort.SortType.BubbleSort + End Sub + + Private Sub SortSelection_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortSelection.CheckedChanged + m_SortType = DemoSort.SortType.SelectionSort + End Sub + + Private Sub SortQuick_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortQuick.CheckedChanged + m_SortType = DemoSort.SortType.QuickSort + End Sub + + Private Sub SortCounting_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortCounting.CheckedChanged + m_SortType = DemoSort.SortType.CountingSort + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/AssemblyInfo.vb new file mode 100644 index 0000000..240f036 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/AssemblyInfo.vb @@ -0,0 +1,30 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj b/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj new file mode 100644 index 0000000..b9cbd77 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj.user b/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj.user new file mode 100644 index 0000000..d7b0259 --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DebugDemoLogic.vbproj.user @@ -0,0 +1,64 @@ + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DemoSort.vb b/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DemoSort.vb new file mode 100644 index 0000000..038eb8a --- /dev/null +++ b/Source/VisualStudio2003/Chapter07/SortingDebug/SortingDll/DemoSort.vb @@ -0,0 +1,265 @@ +Option Strict On + +Public Class DemoSort + + 'These are the sorting lists + Private ListUnsorted() As Int32 + Private ListBeingSorted() As Int32 + 'These are max and minimum sort settings + Private ListLengthMin As Int32 + Private ListLengthMax As Int32 + Private ListValueMin As Int32 + Private ListValueMax As Int32 + + Public Enum SortType As Integer + BubbleSort = 1 + SelectionSort = 2 + QuickSort = 3 + CountingSort = 4 + End Enum + + Public Sub ListBuild(ByVal ListLength As Int32, ByVal ValueMin As Int32, ByVal ValueMax As Int32) + Dim ArrayItem As Int32, objRandom As New System.Random(1) + + 'If parameters haven't changed, just use previous list + 'This enables multiple timing checks on an identical array + If ListLength = ListLengthMax And ValueMin = ListValueMin And ValueMax = ListValueMax Then + Exit Sub + End If + + 'Build a new list with given parameters + ReDim ListUnsorted(ListLength) + For ArrayItem = 1 To ListLength + ListUnsorted(ArrayItem) = objRandom.Next(ValueMin, ValueMax) + Next ArrayItem + + 'Set length of sorted list to match + ReDim ListBeingSorted(ListLength) + + 'Store min and max list items and values + ListLengthMin = 1 + ListLengthMax = ListLength + ListValueMin = ValueMin + ListValueMax = ValueMax + + End Sub + + Public Function DoSort(ByVal Sort As SortType) As Double + Dim TimeStart As Int32, TimeFinish As Int32, ArrayItem As Int32 + + 'Copy to array that will contain newly-sorted list + For ArrayItem = ListLengthMin To ListLengthMax + ListBeingSorted(ArrayItem) = ListUnsorted(ArrayItem) + Next + + 'Start the clock so we can report how long the sorting took + TimeStart = System.Environment.TickCount() + + 'Do the sort + Select Case Sort + Case SortType.BubbleSort + SortBubble(ListLengthMin, ListLengthMax) + Case SortType.QuickSort + SortQuick(ListLengthMin, ListLengthMax) + Case SortType.SelectionSort + SortSelection() + Case SortType.CountingSort + SortCounting() + Case Else + Trace.Fail(CStr(Sort) & " is an invalid sort type") + End Select + + 'Stop the clock and report how long the sorting took + TimeFinish = System.Environment.TickCount() + 'Check sort + SortCheck() + 'Convert elapsed time into seconds + Return (TimeFinish - TimeStart) / 1000 + + End Function + + Private Sub SortBubble(ByVal ItemLow As Int32, ByVal ItemHigh As Int32) + Dim intLastSwap As Int32, intLoop1 As Int32, intLoop2 As Int32 + Dim intDrop As Int32 + + 'Repeat until we are done + Do While ItemLow < ItemHigh + + 'First bubble upwards + intLastSwap = ItemLow - 1 + intLoop1 = ItemLow + 1 + + Do While intLoop1 <= ItemHigh + 'Find a bubble + If ListBeingSorted(intLoop1 - 1) > ListBeingSorted(intLoop1) Then + 'See where to drop the bubble + intDrop = ListBeingSorted(intLoop1 - 1) + intLoop2 = intLoop1 + Do While ListBeingSorted(intLoop2) < intDrop + ListBeingSorted(intLoop2 - 1) = ListBeingSorted(intLoop2) + intLoop2 += 1 + If intLoop2 > ItemHigh Then + Exit Do + End If + Loop + ListBeingSorted(intLoop2 - 1) = intDrop + intLastSwap = intLoop2 - 1 + intLoop1 = intLoop2 + 1 + Else + intLoop1 += 1 + End If + Loop + + 'Update maximum value + ItemHigh = intLastSwap - 1 + + 'Next bubble downwards + intLastSwap = ItemHigh + 1 + intLoop1 = ItemHigh - 1 + + Do While intLoop1 >= ItemLow + 'Find a bubble + If ListBeingSorted(intLoop1 + 1) < ListBeingSorted(intLoop1) Then + 'See where to drop the bubble + intDrop = ListBeingSorted(intLoop1 + 1) + intLoop2 = intLoop1 + Do While ListBeingSorted(intLoop2) > intDrop + ListBeingSorted(intLoop2 + 1) = ListBeingSorted(intLoop2) + intLoop2 -= 1 + If intLoop2 < ItemLow Then + Exit Do + End If + Loop + ListBeingSorted(intLoop2 + 1) = intDrop + intLastSwap = intLoop2 + 1 + intLoop1 = intLoop2 - 1 + Else + intLoop1 -= 1 + End If + Loop + + 'Update minimum value + ItemLow = intLastSwap + 1 + + Loop + + End Sub + + Private Sub SortSelection() + Dim LoopOuter As Int32, LoopInner As Int32, BestValue As Int32, BestInnerIndex As Int32 + + For LoopOuter = ListLengthMin To ListLengthMax - 1 + + 'Init lowest-value search + BestValue = ListBeingSorted(LoopOuter) + BestInnerIndex = LoopOuter + + 'Find lowest value that hasn't already been sorted + For LoopInner = LoopOuter + 1 To ListLengthMax + If ListBeingSorted(LoopInner) < BestValue Then + BestValue = ListBeingSorted(LoopInner) + 1 + BestInnerIndex = LoopInner + End If + Next LoopInner + + 'Swap lowest value into proper position + ListBeingSorted(BestInnerIndex) = ListBeingSorted(LoopOuter) + ListBeingSorted(LoopOuter) = BestValue + + Next LoopOuter + + End Sub + + Private Sub SortQuick(ByVal ItemLow As Int32, ByVal ItemHigh As Int32) + Dim IntermediateValue As Int32, Position As Int32 + Dim objRandom As New System.Random() + Dim intLow As Int32, intHigh As Int32 + + 'If the list has only 1 element, it's already sorted + If ItemLow >= ItemHigh Then Exit Sub + + 'Pick a dividing item + Position = objRandom.Next(ItemLow, ItemHigh) + IntermediateValue = ListBeingSorted(Position) + + 'Swap it to the front so we can find it easily + ListBeingSorted(Position) = ListBeingSorted(ItemLow) + + 'Move the items smaller than this into the left + 'half of the list. Move the others into the right. + intLow = ItemLow + intHigh = ItemHigh + Do + 'Look down from low item for a value < IntermediateValue + Do While ListBeingSorted(intHigh) >= IntermediateValue + intHigh -= 1 + If intHigh <= intLow Then Exit Do + Loop + If intHigh <= intLow Then + ListBeingSorted(intLow) = IntermediateValue + Exit Do + End If + + 'Swap the low and high values + ListBeingSorted(intLow) = ListBeingSorted(intHigh) + + 'Look up from ItemLow for a value >= IntermediateValue + intLow += 1 + Do While ListBeingSorted(intLow) < IntermediateValue + intLow += 1 + If intLow >= intHigh Then Exit Do + Loop + If intLow >= intHigh Then + intLow = intHigh + ListBeingSorted(intHigh) = IntermediateValue + Exit Do + End If + + 'Swap the low and high items + ListBeingSorted(intHigh) = ListBeingSorted(intLow) + Loop + + 'Sort the two sublists recursively + SortQuick(ItemLow, intLow - 1) + SortQuick(intHigh + 1, ItemHigh) + + End Sub + + Private Sub SortCounting() + Dim ListCounts(ListValueMax) As Int32 + Dim ArrayItem As Int32, ThisCount As Int32, NextOffset As Int32 + + 'Count the items + For ArrayItem = ListLengthMin To ListLengthMax + ListCounts(ListUnsorted(ArrayItem)) += 1 + Next ArrayItem + + 'Convert the ListCounts into offsets + NextOffset = ListLengthMin + For ArrayItem = ListValueMin To ListValueMax + ThisCount = ListCounts(ArrayItem) + ListCounts(ArrayItem) = NextOffset + NextOffset += ThisCount + Next ArrayItem + + 'Place the items in the sorted array + For ArrayItem = ListLengthMin To ListLengthMax + ListBeingSorted(ListCounts(ListUnsorted(ArrayItem))) = ListUnsorted(ArrayItem) + ListCounts(ListUnsorted(ArrayItem)) += 1 + Next ArrayItem + + End Sub + + Private Function SortCheck() As Boolean + Dim ArrayItem As Int32 + + For ArrayItem = 2 To ListLengthMax + If ListBeingSorted(ArrayItem - 1) > ListBeingSorted(ArrayItem) Then + Trace.Fail("Item " & (ArrayItem - 1).ToString & " is larger than item " & ArrayItem.ToString) + Exit For + End If + Next ArrayItem + + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter07/SortingDebug/obj/Debug/DebugDemo.DebugDemo.resources b/Source/VisualStudio2003/Chapter07/SortingDebug/obj/Debug/DebugDemo.DebugDemo.resources new file mode 100644 index 0000000000000000000000000000000000000000..24379ba0a8cb61c130bc0ebc4ac085e9c4f5fe25 GIT binary patch literal 4029 zcmeHKTSyd982&YN4J*26N*5bU(rVdOOijZF-7QF6Q+KrtYTMa8+2qU)%*B*IFnsbk z!jg&}f-I;WQhG`vBB-#UAo8i#$`ap<$ogj5UELiekbP@s_n$N8obP=9?VO*P$rm$^ z(}?IgWVg3Z)tKaHW2&qxL8iu@+E^gO6gwxWL0J(6UbQ0iuqH?>y41_G1+<;(V2Ucp z;o35X(@|dTbUK`N&ZUc*uCUrL(={a^+PM~;7lmLW>+{LoEL_W1RRt=76_sVx<@=fQ zK(%3I0b~{AR78KhEQ>4M>h_%Of8Hl3UItdQl8)vPV+?|I^z?I}4uP*8ntU%yWt z&3dVIA}do!(RQ@=(K?KD;i`n(gZt=lu zX~}qQ#YW}gr>z{V0Bz%um)>RUnFXLI5n$yhvB4J6+%HEFtHizi9MfF2BoHC*3eAD>K*?m+oorxUw%Jj8#d5-qMVdh3&~F9YNanfsU3)VkvdnA_ua%I TnmSjhbG7(WDOD~0k81G;_%8yo literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter08/ReadMe.txt b/Source/VisualStudio2003/Chapter08/ReadMe.txt new file mode 100644 index 0000000..516d70a --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/ReadMe.txt @@ -0,0 +1,13 @@ +To setup the TimeService web service on your IIS web server, +use IIS to create a IIS virtual directory called TimeServer, +pointing at the real folder C:\Inetpub\wwwroot\TimeServer. +This real folder should have been created when you un-zipped +the zip file containing the source code. + +Then in Visual Studio 2003, load the TimeServer solution and set +a web reference to the TimeService web service (using the +Project...Add web reference menu item). The web service can be +found at the ISS virtual directory that you've just created. + + + diff --git a/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServer.sln b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServer.sln new file mode 100644 index 0000000..6403331 --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServer.sln @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TimeServer", "http://localhost/TimeServer/TimeServer.vbproj", "{1BB5B66C-C66B-474D-BE43-03E212F5DF3F}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TimeServerClient", "TimeServerClient\TimeServerClient.vbproj", "{B2064CD5-D49D-4BF7-B31E-57025D69727C}" + ProjectSection(ProjectDependencies) = postProject + {1BB5B66C-C66B-474D-BE43-03E212F5DF3F} = {1BB5B66C-C66B-474D-BE43-03E212F5DF3F} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {1BB5B66C-C66B-474D-BE43-03E212F5DF3F}.Debug.ActiveCfg = Debug|.NET + {1BB5B66C-C66B-474D-BE43-03E212F5DF3F}.Debug.Build.0 = Debug|.NET + {1BB5B66C-C66B-474D-BE43-03E212F5DF3F}.Release.ActiveCfg = Release|.NET + {1BB5B66C-C66B-474D-BE43-03E212F5DF3F}.Release.Build.0 = Release|.NET + {B2064CD5-D49D-4BF7-B31E-57025D69727C}.Debug.ActiveCfg = Debug|.NET + {B2064CD5-D49D-4BF7-B31E-57025D69727C}.Debug.Build.0 = Debug|.NET + {B2064CD5-D49D-4BF7-B31E-57025D69727C}.Release.ActiveCfg = Release|.NET + {B2064CD5-D49D-4BF7-B31E-57025D69727C}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServer.suo b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServer.suo new file mode 100644 index 0000000000000000000000000000000000000000..896e3e92a8883acd36d492460421759502aacc2e GIT binary patch literal 11776 zcmeI2TWlOx8OP7s4oyNXZ6P6)HVmOj(>8H@OX4O?TYGoi2J9rnZW5$brM11W*R^-8 z^~R1BSHJ^O)dwDU3NM8`AfdKYLP8Zpq97Haf0KTe>P?1G1F|WEp9L$3AM+li)^{mm?kQ^ zzP7ly=o*codb@mpX5c@_+TyR_I?h_}JD~N@2I!;EMraeX8QKDAy|;2k1wDZd^S7{bhfR@|WL!)gM~6 zD$<$+en8jq0Z&2l0lJnS2>XD*{)6YmKd5UyJ^}53J_+3eeF}OQItJ~8J`H)$XP{ls zXQBI{-OwKBF(?5&2=zf4dmrchP%Cr*YJ=LL4yY6Af(}B5puV@Kv?j`;6lm1z4w`y4p*?xBA@vHA{`{Idjw7$Il%HNLtk=I^Qc|R@gT zZB1lmvm+TVp3fBv`AKVXEs1n7tzkEw8|e22N5(T#_HuI~o1V;%dCAdiF<(%JI|uT^ z*~yG|HZ$z?1aKVh)Q9984HZ(rPQ{&v#=<-=@XnYEPk~LFY2cATC zdZE0T^L<;K@v`)gzdsI_K{J5t&J$1Dk%~lt=rd8NOIHv1{zv{mc2c@iyC%I2?w0s# z_GXZ447nt8Ab)*N81R?xS`L449cE_7_=)RT=CjEBk6UR1DQlnQf3=44pN;Yt&XRvq zDd(?Q&mhCItZJUw&>C5#b=@nDd*Lq&)R>L(7sh+uA4#%{a1{mkEY{I%z`hpRtNM_V+1iu}$FoGy+r z7ir}2kWMxw{Yas!(g^AE40IlOyojZE5nJ(y7AKH&h+ZYTIl~Bt8B607IUDn}o6cK$ zHp$zaM~W2hBCAhbzrI-#mFr*aHD!XTls)L5R$F+XQT-G4nefLd=dYE{;pf7h(C=FH zB>v*79HmkI>ihke8?HA0dDcRhtcK(FrGdZYE8Z%8bKR42Cgn;h<@^WGa#^5o_*s80 zoac7^%a8k(!C(2>kUx;3NMH@sHPW@pM%JoGf6B{B+RDdT%j@}*|f zYjJURlWC4Me>u$hM}PVD+?)N}05OcmE&*M8`5lA~@rwg(vlYZjxFj zHHG{nPOKg3Fg}3F=5Z#14dc|5)*Pq`3uu+SJM@sV50pG@ zkeOu|s%T?_e7{2tfu9$)cJ}AAzcKxn?kiraB&?_x(0MmavGEq$mV6n$Ts(cY;zr&_}=T^{gbSCfbP#g zry!MIz1($oaL=`rj=??o@&Tq~(oTR-dK$*U>eD`=R-`*-@u9L%<*2J^`mMyuIg5Bo zd{4r==yR2PM~%>Vb=jPCOTzUw?_N#Wj#`wvnj^M?K{L#?5V90);X1l&#b$b~wFtZS z(nl`2H1CgcwYrj&B6s6bxYh4PsoQY%U8rsXb>GiXiYs^Dh3tK(zZ`!jYMrEZ(3(Ss zb@_+rC!;vbv(NGNGUF{L2LJH-dz%Jc*nRoOP2b%1Zwo>SKmT0MgO?{h|DE4|>no?P z{oti`#hqQyP{iahjr!lc4Eaxg*r#!;;+jTZGf*Ipv&(7` zFDlQjW$+Kb{}(*vqAPLn!8f57{ZW*amG&^SlNsz`2#A#LVVrwQXne&bjIExzRj^gW z&|E~k=a?O5pn%(xGLuUM)`r= z9pEwLTtUtoY>J!q3G3=WH~5Wh@ppNR%Wc25eNJ0Q;l*M z?Sq%bh&Si`Ysp9aiq+Ytdja3Mdg{JVRjb0vSN-!{xJPva z`M;P_m$qrUdKhJ#M;+Z?IMy!eb&@|v<6iBxYifG!_S#uPbiOO<4r-Z$GuO)f<5U&H zUaNH;vo1pk@s!mm_s1N!6)IGvk7V=4<379GwFP!Q=gnKt=hT+D(tEb@vI3T&62T{d zZ?zjpRq#noZ1@}d9im^K4P>}WnshS5V8348J)GlvEM6(g_mEssWdcQ1yjJgOv8{UR zN>$d)+0K}YI#yjGl6%aozBNi_ZEgSm&O{@6rO3SWIg0+fCD^Z$Zk2!kcmHH4*OuG4 m$;xt*ceSNUS-hsBz62$$PM-vYX~$nHum4b}IQxrQ>wf`Tr?V{p literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/AssemblyInfo.vb new file mode 100644 index 0000000..30e9959 --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.resx b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.resx new file mode 100644 index 0000000..323365d --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.resx @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + ClientForm + + + 80 + + + True + + + Assembly + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.vb b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.vb new file mode 100644 index 0000000..3a537ca --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/ClientForm.vb @@ -0,0 +1,206 @@ +Option Strict On +Imports System.Windows.Forms + +Public Class ClientForm : Inherits System.Windows.Forms.Form + + Private m_TimeTest As localhost.TimeService + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents GetTime As System.Windows.Forms.Button + Friend WithEvents ShowTime As System.Windows.Forms.Label + Friend WithEvents ProxyDebugDemo As System.Windows.Forms.Button + Friend WithEvents TriggerRawException As System.Windows.Forms.Button + Friend WithEvents TriggerCustomException As System.Windows.Forms.Button + Private Sub InitializeComponent() + Me.GetTime = New System.Windows.Forms.Button + Me.ShowTime = New System.Windows.Forms.Label + Me.ProxyDebugDemo = New System.Windows.Forms.Button + Me.TriggerRawException = New System.Windows.Forms.Button + Me.TriggerCustomException = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'GetTime + ' + Me.GetTime.Location = New System.Drawing.Point(40, 40) + Me.GetTime.Name = "GetTime" + Me.GetTime.Size = New System.Drawing.Size(160, 56) + Me.GetTime.TabIndex = 0 + Me.GetTime.Text = "Test time retrieval" + ' + 'ShowTime + ' + Me.ShowTime.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.ShowTime.Location = New System.Drawing.Point(240, 48) + Me.ShowTime.Name = "ShowTime" + Me.ShowTime.Size = New System.Drawing.Size(128, 48) + Me.ShowTime.TabIndex = 1 + ' + 'ProxyDebugDemo + ' + Me.ProxyDebugDemo.Location = New System.Drawing.Point(40, 120) + Me.ProxyDebugDemo.Name = "ProxyDebugDemo" + Me.ProxyDebugDemo.Size = New System.Drawing.Size(160, 56) + Me.ProxyDebugDemo.TabIndex = 2 + Me.ProxyDebugDemo.Text = "Demo proxy debugging" + ' + 'TriggerRawException + ' + Me.TriggerRawException.Location = New System.Drawing.Point(40, 200) + Me.TriggerRawException.Name = "TriggerRawException" + Me.TriggerRawException.Size = New System.Drawing.Size(160, 56) + Me.TriggerRawException.TabIndex = 4 + Me.TriggerRawException.Text = "Trigger raw exception" + ' + 'TriggerCustomException + ' + Me.TriggerCustomException.Location = New System.Drawing.Point(40, 280) + Me.TriggerCustomException.Name = "TriggerCustomException" + Me.TriggerCustomException.Size = New System.Drawing.Size(160, 56) + Me.TriggerCustomException.TabIndex = 5 + Me.TriggerCustomException.Text = "Trigger custom exception" + ' + 'ClientForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(432, 396) + Me.Controls.Add(Me.TriggerCustomException) + Me.Controls.Add(Me.TriggerRawException) + Me.Controls.Add(Me.ProxyDebugDemo) + Me.Controls.Add(Me.ShowTime) + Me.Controls.Add(Me.GetTime) + Me.Name = "ClientForm" + Me.Text = "TimeServer client" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub ClientForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'Create web service instance (via proxy) and + 'ensure timeout never happens during debugging + m_TimeTest = New localhost.TimeService +#If DEBUG Then + m_TimeTest.Timeout = -1 +#End If + + End Sub + + Private Sub GetTime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetTime.Click + 'Get time details + Me.ShowTime.Text = m_TimeTest.CurrentTime + + End Sub + + Private Sub ProxyDebugDemo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProxyDebugDemo.Click + 'Trigger exception without catching it + 'Ensure proxy has DebuggerStepthroughAttribute removed + 'This exception will then break into the debugger + m_TimeTest.ThrowExceptionRaw() + + End Sub + + Private Sub TriggerRawException_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriggerRawException.Click + Dim ExceptionMessage As String, Sep As String = Space$(4) + 'Trigger raw exception and show it + Try + m_TimeTest.ThrowExceptionRaw() + + Catch SoapExc As System.Web.Services.Protocols.SoapException + + With SoapExc + ExceptionMessage += "RECEIVED EXCEPTION INFORMATION" + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Type: " & Environment.NewLine + ExceptionMessage += Sep & .GetType.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Message: " & Environment.NewLine + ExceptionMessage += Sep & .Message + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Stack trace: " & Environment.NewLine + ExceptionMessage += Sep & .StackTrace + ExceptionMessage += Environment.NewLine + ExceptionMessage += "SOAP fault: " & Environment.NewLine + ExceptionMessage += Sep & .Code.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Web service URL: " & Environment.NewLine + ExceptionMessage += Sep & .Actor.ToString + End With + + MessageBox.Show(ExceptionMessage, "Web service raw exception", MessageBoxButtons.OK) + + End Try + + End Sub + + Private Sub TriggerCustomException_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriggerCustomException.Click + Dim ExceptionMessage As String, Sep As String = Space$(4) + 'Trigger custom exception and show it + Try + m_TimeTest.ThrowExceptionCustom() + + Catch SoapExc As System.Web.Services.Protocols.SoapException + + With SoapExc + ExceptionMessage = "ORIGINAL EXCEPTION INFORMATION" + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Type: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionType").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Message: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionMessage").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Stack trace: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionTrace").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "SOAP fault: " & Environment.NewLine + ExceptionMessage += Sep & .Code.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Web service URL: " & Environment.NewLine + ExceptionMessage += Sep & .Actor.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Raw SOAP message: " & Environment.NewLine + ExceptionMessage += Sep & .Message + End With + + MessageBox.Show(ExceptionMessage, "Web service custom exception", MessageBoxButtons.OK) + + End Try + + End Sub + + Private Sub ClientForm_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed + 'Close web service instance + m_TimeTest.Dispose() + m_TimeTest = Nothing + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj new file mode 100644 index 0000000..487e33a --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj.user b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj.user new file mode 100644 index 0000000..9a7fdd0 --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/TimeServerClient.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources b/Source/VisualStudio2003/Chapter08/TimeServerBrowserClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..50edb5966d82360d6c2ec74a2584b8a94d871022 GIT binary patch literal 6134 zcmeHLTWl0n82*>G)7|ZjTU$hshHwc`)-9zX7!=&qvQo;@Exw2@v%9C;19RETg|Z|B zU(}$9Vnj_q#SkCV7Zsz?NQ|gY1WbIu@M5CE1I7d|uO#AkW@p;Hw6rXJz@(F&IcNUs z_y6biZ+|%d=hr?WdIxP)B5ztu4Gl0;w~aJ2M@Iup&M>31Lp9U7q41PhDQRmKSDB}p zVAhy)XUCJwFuAU6?h1uNJ>hUT6z=SZ*otKvY_rB}%aE1Mj<}stczQd_59<4wwmG$7 zgWQwud7x`!_j(q7aHBwZ51NFgy8a`2hDCKXw1cTBW^A=AgQskZnVlU4f$8!5jO*=D zU00Z_O?P12H6JzP5w2xJ34Vxq0fby)m4Sr2hkAxK40Uy7dctzIoO3<(Dtby*_#xTC zq=ejwh-pLmbcgn|>o9?d(X!KReUEEBrdi$VrrUUYYgGJ67mmL0#4q2y_G|jso7ew6 zdE&?XD{rm1cH>Osv-dyWwPw>7_kZ)$*$aKaiz|}9AA8*ec>m2R(~0Yuf2Box$c|K2R43xwconWn|GXaVUl;N{og`CYuyccaTmQaE8zr8IEb9MWqS`#7C$XY!2af;k87-Vz43-m!>qbyv?cr!W-tV@es^Z`X0OvSMvQwk$StLuptREq5fD?@w1oL|iBhrSBd z8(?%4GZOGEQ;r7V#DjXeTxbx%$&{yUu)qOw7`eF&p%ulJJRuQ};Y1PxY#sK0hG@7K zx)$7U2gl@@o`h1`^7AZDHbcy zpa?Q$V%l^}+GEIH8q^%VIVjo`GG{juZMr>^#n4-uh_>9GdSzJKVPspWkpV2xk*Wgv z1IE@*)mU*TFEv+WVqz4PL7am+5l#lWiAVI}X~a=ReTDPB%Db?voTw9~m$)~`M0JFa zsXrhqHcKYSFEG$-q6S|DzFHyK>{@f{1V>p-I_l)}HO#8ea-te^wWjr^ccPnDYS}3) zL=1H!JYx+@!;EK#Eh4`Y7!D5-t)Zp@rW2f7QH3U~9k4%1Qj?mjvY?vG$d(*KF*!#~ z+9um=GGpffW*9uf0_j5G7mGHkNp6bLa;K)`8`8R(lMN=y5WmF^T4GSI*{bLpVU7)= zzI3>0Sz%g6HbjD{Mm&C>-!}okF{_K+bd*Lg=(<`yF1Oznh2`VAp~?=RmE%f9U36n| zoTzinxoO)l zn3m3uk>=zWetc-w7^N|%o800DSb}G@MvY}rxE4Oz3ihHb%~e@RFsvZi(vA7WZaiXJ zsVk4Xz$2F%Y4#Y2yqeOLxw2;Rh>NyB3TU!c7`1r_u|T=Tt-MS2u$GeB-3ZG)ww6Th z0c>)q1(VJA+QAit6+Vl$+PsonM0u85W~>#9I)_o#69m(oy&0*mulJQcSZ-sF zzvvNS0r4|3fO3tTk%YpBd}}0ei22q^s1L{&l5nS!uT#QJC^~U5f!Km>*0=8kCENs5 z(=Yc+b1?9GGc3);S75F884#ud!jRO8mv6b$hOXwfXFnEONbF$eEI=h3RUs0~IGj(sUkx$17fy0`;gz%RbsC%-%iSuEH3|Ca=J ne^fJBulB!HcT!%?WPK*<)AOTa=7bUdIlhy8JamBg({TYGoi2JEE7ZW5#w(%N1-o33|P z_9jjgSF}h-s1FG76kdQlAXO9)NC-hCiUbHz1ZstZcmY%-Br3I{@B}Z!{Qfid`riG_ z+FqAL^{meQn3+50+?n(7KXdo>*Y0@Z+7IsftEniDns#%2X^VMZq&~*A$d=oUY2!lo z*O!)-T%|EwZj@VS2L6kz9sU|_;;i+)4cZKCf!+^og|bh-tx~sRq(MG2n5*M((hB6v1jkEe%yPeoG?QH2xOo2i%l?|>FTedge`wjN zNNW=K0o}_7JPFAM=w5yx>H`A%51tqQ;9B$XA!rZuVdyUCBhZ7;G3XxXV~_`Z9NG(g z0=gI42knO*g%Z&H&@iO24{|;PbwUq8T~IgF1NB0E&|&BZbQJ1`9)=!)2B1$ufsBuF z{WvrT4MA~8ZAt(9gnw4u&01O^+pn%Y_VSy%K6~P8oiA;^_V%$q^V%ya|BOpRR$ru7 zI}@3U*~yF-FXT&eg`73HjzqeY*05X8j*fU^ljkzC_I7(Bo6Z$xyyR52RG3qT+eZr% z*<8julbP^_3v;vf@hxR{TjPb`8GkfyI{aCt0l7MMHTr*>REjEcTtJzP#x9i%=Xb zO=0~7a{=$8XHw=g&&+e5X1p;*xL~I2C_QL?7aE`9sdKbybos0a4?=L%-Q_lMPbKF6oRub!vi@2AS8FK$*(`tI zEcrK;O8%Pl3^F{!Y899bt&~+-*S+d^0RFN-joB=JVZ1N+BT06Vd~6(!v;3r|9uYCk zdB*CW=EgIpxRyLlzl0bnwL6eh7V+C(em(K~uAaxgdio!G-WvSTgSDThqb-_0MSf=o zP8VmGi!}0hNGF?;ex%S<#YXAoJT#3wUYVtMWwzoGElwcmIK4uQl@2#=JWcRq9{;HMPrBb=Z&oX|;tHn$cc(t zp&W;3O>))Cl|p_JC)N!O^IU>sFZ8TgBwUsF6#)?s@ynq=leo?t^>ULX>T1CPYGv;Z zJ>=~Jp{ETpvkXI(Y;2J4ci18D^TO87{+#wVr~lG@#cP#>74-r-??#U5{8Lu=ELaC!lKrU2=)}BFismDz_|nTSTl0 z?icJ&eYAa$vSMlxUHW{HtGODrF0Jk4wdPs!O9W@}TI6>Ht&X#t-Dq|k?eDVoaMacw zqPCkUQ(Zs5xNi?#q;Fl^J#51TDaqLh5K2$OSXjO2BWgvuW8gytoB;$hylU%A zzmr(GU=dHq_awYaK3B;%V1&+V%jT?G5^lD6cPnKZuqd~cBX)v8Gt9LRvJ`D`8QpcV zazoZygx!beBbTgsR~fLme`_TPBX{#sxYZv*sk?CXeW-2%bw9*WiYs^DhwQ_szZ`!r zdXnVour-Gs>++A#PeyT+XP@Qm^?o}}jQ#1Aceahbu6+P<;tKNf_{z51!a`>&q= z^oxJ|=JThn|M=V8iaUFu@<4DB^E;0Q3u`;yQ|;qSh5O%Q7BVV=O|n*v_a3xrtI_`lcrM)kPFM|@L~9&qxJ;yKX6MK0 zjO<@APB~4p_7~OvXr3w0BP$F%kibpj?9aY`On6e5wpsoK`W}Q@RRZ7FEdMgTE5%lN zID)0_i(n~#+^8*%zej9QPEQ-GZu3kjivr2|pj%;Dt-)_Prd_UipwSw%wT-+-)?fkC zonX%8N`e&1WfsaOjsUOvZNA(Oq#6Wh^#i5KwZEGh!7*hLVP>H$J;|>Zz*RN((fmN) zxkM^Keh_U}I-)#HC1}49dXIr!wO4!vAzFtT*M_27DamS3v=GA}%dE^;F(VH4*QXlg zFxm$X$KfO=<2zfY?u#|GDyn?7Ki@@r)ZU%B zS*O?SKBj7@$oj>`V83TMJ~qNAfq-u9e}0o|Yap$1)N+gK#9s)2xbl^z--EsA7dCX< zI&Hw&^z1gPk20 zi)+R2)yCucD(kxiPC + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.resx b/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.resx new file mode 100644 index 0000000..323365d --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.resx @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + ClientForm + + + 80 + + + True + + + Assembly + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.vb b/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.vb new file mode 100644 index 0000000..3a537ca --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/ClientForm.vb @@ -0,0 +1,206 @@ +Option Strict On +Imports System.Windows.Forms + +Public Class ClientForm : Inherits System.Windows.Forms.Form + + Private m_TimeTest As localhost.TimeService + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents GetTime As System.Windows.Forms.Button + Friend WithEvents ShowTime As System.Windows.Forms.Label + Friend WithEvents ProxyDebugDemo As System.Windows.Forms.Button + Friend WithEvents TriggerRawException As System.Windows.Forms.Button + Friend WithEvents TriggerCustomException As System.Windows.Forms.Button + Private Sub InitializeComponent() + Me.GetTime = New System.Windows.Forms.Button + Me.ShowTime = New System.Windows.Forms.Label + Me.ProxyDebugDemo = New System.Windows.Forms.Button + Me.TriggerRawException = New System.Windows.Forms.Button + Me.TriggerCustomException = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'GetTime + ' + Me.GetTime.Location = New System.Drawing.Point(40, 40) + Me.GetTime.Name = "GetTime" + Me.GetTime.Size = New System.Drawing.Size(160, 56) + Me.GetTime.TabIndex = 0 + Me.GetTime.Text = "Test time retrieval" + ' + 'ShowTime + ' + Me.ShowTime.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.ShowTime.Location = New System.Drawing.Point(240, 48) + Me.ShowTime.Name = "ShowTime" + Me.ShowTime.Size = New System.Drawing.Size(128, 48) + Me.ShowTime.TabIndex = 1 + ' + 'ProxyDebugDemo + ' + Me.ProxyDebugDemo.Location = New System.Drawing.Point(40, 120) + Me.ProxyDebugDemo.Name = "ProxyDebugDemo" + Me.ProxyDebugDemo.Size = New System.Drawing.Size(160, 56) + Me.ProxyDebugDemo.TabIndex = 2 + Me.ProxyDebugDemo.Text = "Demo proxy debugging" + ' + 'TriggerRawException + ' + Me.TriggerRawException.Location = New System.Drawing.Point(40, 200) + Me.TriggerRawException.Name = "TriggerRawException" + Me.TriggerRawException.Size = New System.Drawing.Size(160, 56) + Me.TriggerRawException.TabIndex = 4 + Me.TriggerRawException.Text = "Trigger raw exception" + ' + 'TriggerCustomException + ' + Me.TriggerCustomException.Location = New System.Drawing.Point(40, 280) + Me.TriggerCustomException.Name = "TriggerCustomException" + Me.TriggerCustomException.Size = New System.Drawing.Size(160, 56) + Me.TriggerCustomException.TabIndex = 5 + Me.TriggerCustomException.Text = "Trigger custom exception" + ' + 'ClientForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(432, 396) + Me.Controls.Add(Me.TriggerCustomException) + Me.Controls.Add(Me.TriggerRawException) + Me.Controls.Add(Me.ProxyDebugDemo) + Me.Controls.Add(Me.ShowTime) + Me.Controls.Add(Me.GetTime) + Me.Name = "ClientForm" + Me.Text = "TimeServer client" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub ClientForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'Create web service instance (via proxy) and + 'ensure timeout never happens during debugging + m_TimeTest = New localhost.TimeService +#If DEBUG Then + m_TimeTest.Timeout = -1 +#End If + + End Sub + + Private Sub GetTime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetTime.Click + 'Get time details + Me.ShowTime.Text = m_TimeTest.CurrentTime + + End Sub + + Private Sub ProxyDebugDemo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProxyDebugDemo.Click + 'Trigger exception without catching it + 'Ensure proxy has DebuggerStepthroughAttribute removed + 'This exception will then break into the debugger + m_TimeTest.ThrowExceptionRaw() + + End Sub + + Private Sub TriggerRawException_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriggerRawException.Click + Dim ExceptionMessage As String, Sep As String = Space$(4) + 'Trigger raw exception and show it + Try + m_TimeTest.ThrowExceptionRaw() + + Catch SoapExc As System.Web.Services.Protocols.SoapException + + With SoapExc + ExceptionMessage += "RECEIVED EXCEPTION INFORMATION" + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Type: " & Environment.NewLine + ExceptionMessage += Sep & .GetType.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Message: " & Environment.NewLine + ExceptionMessage += Sep & .Message + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Stack trace: " & Environment.NewLine + ExceptionMessage += Sep & .StackTrace + ExceptionMessage += Environment.NewLine + ExceptionMessage += "SOAP fault: " & Environment.NewLine + ExceptionMessage += Sep & .Code.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Web service URL: " & Environment.NewLine + ExceptionMessage += Sep & .Actor.ToString + End With + + MessageBox.Show(ExceptionMessage, "Web service raw exception", MessageBoxButtons.OK) + + End Try + + End Sub + + Private Sub TriggerCustomException_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TriggerCustomException.Click + Dim ExceptionMessage As String, Sep As String = Space$(4) + 'Trigger custom exception and show it + Try + m_TimeTest.ThrowExceptionCustom() + + Catch SoapExc As System.Web.Services.Protocols.SoapException + + With SoapExc + ExceptionMessage = "ORIGINAL EXCEPTION INFORMATION" + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Type: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionType").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Message: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionMessage").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Stack trace: " & Environment.NewLine + ExceptionMessage += Sep & .Detail("ExceptionTrace").InnerText + ExceptionMessage += Environment.NewLine + ExceptionMessage += "SOAP fault: " & Environment.NewLine + ExceptionMessage += Sep & .Code.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Web service URL: " & Environment.NewLine + ExceptionMessage += Sep & .Actor.ToString + ExceptionMessage += Environment.NewLine + ExceptionMessage += "Raw SOAP message: " & Environment.NewLine + ExceptionMessage += Sep & .Message + End With + + MessageBox.Show(ExceptionMessage, "Web service custom exception", MessageBoxButtons.OK) + + End Try + + End Sub + + Private Sub ClientForm_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed + 'Close web service instance + m_TimeTest.Dispose() + m_TimeTest = Nothing + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj b/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj new file mode 100644 index 0000000..487e33a --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj.user b/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj.user new file mode 100644 index 0000000..9a7fdd0 --- /dev/null +++ b/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/TimeServerClient.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources b/Source/VisualStudio2003/Chapter08/TimeServerSoapClient/TimeServerClient/obj/Debug/TimeServerClient.ClientForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..50edb5966d82360d6c2ec74a2584b8a94d871022 GIT binary patch literal 6134 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 + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/Client.vb b/Source/VisualStudio2003/Chapter10/DebugOnStart/Client.vb new file mode 100644 index 0000000..601e85c --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/Client.vb @@ -0,0 +1,130 @@ +Option Strict On + +Imports System.Net +Imports System.Text +Imports System.Threading +Imports System +Imports System.IO +Imports System.ServiceProcess + +Public Class Client + + Private ThisClient As Sockets.Socket = Nothing + Private ReadBuffer(16384) As Byte + Private PageBuffer(16384) As Byte + Private EmptyBuffer() As Byte = Encoding.ASCII.GetBytes(Space$(1024)) + + Public Sub New(ByVal NewClient As Sockets.Socket) + + Me.ThisClient = NewClient + + End Sub + + Public Sub Start() + Dim HtmlStream As StreamReader, PageRequest As String, PageText As String + + Try + Me.ThisClient.Receive(Me.ReadBuffer, Me.ReadBuffer.Length, Sockets.SocketFlags.None) + PageRequest = ReturnPage(Encoding.ASCII.GetString(Me.ReadBuffer)) + 'Open requested page + HtmlStream = New StreamReader(PageRequest) + PageText = HtmlStream.ReadToEnd() + HtmlStream.Close() + 'If status page, display services + PageText = PageText.Replace("#1#", Environment.MachineName & " (" & Me.ThisClient.LocalEndPoint.ToString & ")") + PageText = PageText.Replace("#2#", Me.DisplayServices) + 'Display requested page + Trace.WriteLine("Sending page " & PageRequest) + Me.PageBuffer = Encoding.ASCII.GetBytes(PageText) + Me.ThisClient.Send(Me.PageBuffer, Me.PageBuffer.Length, Sockets.SocketFlags.None) + Me.Close() + + Catch Exc As Sockets.SocketException + Trace.WriteLine(Exc.Message) + Close() + + End Try + + End Sub + + Private Function ReturnPage(ByVal PageRequest As String) As String + Dim HtmlPage As String, IndexStart As Int32, IndexEnd As Int32 + + 'Extract page + IndexStart = InStr(PageRequest, "/") + 1 + IndexEnd = InStr(IndexStart, PageRequest, " ") + HtmlPage = Mid$(PageRequest, IndexStart, IndexEnd - IndexStart) + 'add suffix if necessary + If Right$(HtmlPage, 5) <> ".html" Then + HtmlPage += ".html" + End If + 'Add local path + HtmlPage = Me.ReturnPath & HtmlPage + 'Check page exists + If File.Exists(HtmlPage) = False Then + HtmlPage = Me.ReturnPath & "error.html" + End If + 'Return page + Trace.WriteLine("Page requested: " & HtmlPage) + Return HtmlPage + + End Function + + Private Function ReturnPath() As String + + If Right$(AppDomain.CurrentDomain.BaseDirectory, 1) = "\" Then + Return AppDomain.CurrentDomain.BaseDirectory + Else + Return AppDomain.CurrentDomain.BaseDirectory & "\" + End If + + End Function + + Private Function DisplayServices() As String + Dim ThisService As ServiceController, TempPage As String + + For Each ThisService In ServiceController.GetServices + TempPage += "" & Environment.NewLine + 'Add service name + TempPage += "
    " + TempPage += ThisService.ServiceName & "
    " & Environment.NewLine + 'Add service friendly name + TempPage += "
    " + TempPage += ThisService.DisplayName & "
    " & Environment.NewLine + 'Add service status + TempPage += "
    " + TempPage += ThisService.Status.ToString & "
    " & Environment.NewLine + TempPage += "" & Environment.NewLine + 'Finished with this service + ThisService.Dispose() + Next + + Return TempPage + + End Function + + Public Function IsConnected() As Boolean + + If Me.ThisClient Is Nothing Then + Return False + Else + Return Me.ThisClient.Connected + End If + + End Function + + Public Sub Close() + + If Not (Me.ThisClient Is Nothing) Then + Trace.WriteLine("Closing client socket") + Me.ThisClient.Shutdown(Sockets.SocketShutdown.Both) + Me.ThisClient.Close() + Me.ThisClient = Nothing + End If + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/DummyService.resx b/Source/VisualStudio2003/Chapter10/DebugOnStart/DummyService.resx new file mode 100644 index 0000000..df79c33 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/DummyService.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/DummyService.vb b/Source/VisualStudio2003/Chapter10/DebugOnStart/DummyService.vb new file mode 100644 index 0000000..6d34e4f --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/DummyService.vb @@ -0,0 +1,50 @@ +Option Strict On +Imports System.ServiceProcess +Imports System.Threading + +Public Class DummyService : Inherits System.ServiceProcess.ServiceBase + + +#Region " Component Designer generated code " + + Public Sub New() + MyBase.New() + + ' This call is required by the Component Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call + + End Sub + + 'UserService overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + ' The main entry point for the process + _ + Shared Sub Main() + + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + ' NOTE: The following procedure is required by the Component Designer + ' It can be modified using the Component Designer. + ' Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container() + Me.ServiceName = "DummyService" + End Sub + +#End Region + + +End Class diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/ProjectInstaller.resx b/Source/VisualStudio2003/Chapter10/DebugOnStart/ProjectInstaller.resx new file mode 100644 index 0000000..142cb5c --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/ProjectInstaller.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + Assembly + + + 17, 17 + + + Assembly + + + Assembly + + + 211, 17 + + + Assembly + + + Assembly + + + 360, 17 + + + ProjectInstaller + + + Assembly + + + False + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/ProjectInstaller.vb b/Source/VisualStudio2003/Chapter10/DebugOnStart/ProjectInstaller.vb new file mode 100644 index 0000000..98ed79d --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/ProjectInstaller.vb @@ -0,0 +1,89 @@ +Imports System.ComponentModel +Imports System.Configuration.Install +Imports Microsoft.Win32 + + Public Class ProjectInstaller + Inherits System.Configuration.Install.Installer + +#Region " Component Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Component Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Installer overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Component Designer + 'It can be modified using the Component Designer. + 'Do not modify it using the code editor. + Friend WithEvents ServiceProcessInstaller1 As System.ServiceProcess.ServiceProcessInstaller + Friend WithEvents ServiceInstaller1 As System.ServiceProcess.ServiceInstaller + Friend WithEvents ServiceInstaller2 As System.ServiceProcess.ServiceInstaller + Private Sub InitializeComponent() + Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller + Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller + Me.ServiceInstaller2 = New System.ServiceProcess.ServiceInstaller + ' + 'ServiceProcessInstaller1 + ' + Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem + Me.ServiceProcessInstaller1.Password = Nothing + Me.ServiceProcessInstaller1.Username = Nothing + ' + 'ServiceInstaller1 + ' + Me.ServiceInstaller1.ServiceName = "ServiceAdmin" + ' + 'ServiceInstaller2 + ' + Me.ServiceInstaller2.ServiceName = "DummyService" + ' + 'ProjectInstaller + ' + Me.Installers.AddRange(New System.Configuration.Install.Installer() {Me.ServiceProcessInstaller1, Me.ServiceInstaller1, Me.ServiceInstaller2}) + + End Sub + +#End Region + + Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary) + + 'First do the install + MyBase.Install(stateSaver) + + 'System.Diagnostics.Debugger.Launch() + + Dim SystemKey As RegistryKey = Registry.LocalMachine.OpenSubKey("System") + Dim ControlSetKey As RegistryKey = SystemKey.OpenSubKey("CurrentControlSet") + Dim ServicesKey As RegistryKey = ControlSetKey.OpenSubKey("Services") + Dim ServiceKey As RegistryKey = ServicesKey.OpenSubKey(Me.ServiceInstaller1.ServiceName, True) + + 'Set the service description + ServiceKey.SetValue("Description", "Allows remote service administration") + + 'Cleanup + ServiceKey.Close() + ServicesKey.Close() + ControlSetKey.Close() + SystemKey.Close() + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/Service.resx b/Source/VisualStudio2003/Chapter10/DebugOnStart/Service.resx new file mode 100644 index 0000000..df79c33 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/Service.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/Service.vb b/Source/VisualStudio2003/Chapter10/DebugOnStart/Service.vb new file mode 100644 index 0000000..5c3fc82 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/Service.vb @@ -0,0 +1,82 @@ +Option Strict On +Imports System.ServiceProcess + +Public Class ServiceAdmin : Inherits System.ServiceProcess.ServiceBase + +#Region " Component Designer generated code " + + Private Listener As ServiceListener = Nothing + + Public Sub New() + MyBase.New() + + ' This call is required by the Component Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call + + End Sub + + 'UserService overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + ' The main entry point for the process + _ + Shared Sub Main() + +#If DEBUG Then + Dim DebugService As New ServiceAdmin + DebugService.OnStart(Nothing) +#Else + Dim ServicesToRun() As System.ServiceProcess.ServiceBase + 'The following line instantiates just your service + 'ServicesToRun = New ServiceBase() {New ServiceAdmin()} + + 'The following line (instead of the previous line) additionally instantiates a dummy service within the same + 'process as your real service. Starting the dummy service allows you to attach to the service process - then + 'you can debug your service's OnStart method by setting a breakpoint before starting your service. + ServicesToRun = New ServiceBase() {New ServiceAdmin, New DummyService} + + 'Start the service + ServiceBase.Run(ServicesToRun) +#End If + + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + ' NOTE: The following procedure is required by the Component Designer + ' It can be modified using the Component Designer. + ' Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container + Me.ServiceName = "ServiceAdmin" + End Sub + +#End Region + + Protected Overrides Sub OnStart(ByVal args() As String) + + Me.Listener = New ServiceListener + Me.Listener.Start() + + End Sub + + Protected Overrides Sub OnStop() + + If Not (Me.Listener Is Nothing) Then + Me.Listener.Close() + Me.Listener = Nothing + End If + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.sln b/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.sln new file mode 100644 index 0000000..fe31dc5 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ServiceAdmin", "ServiceAdmin.vbproj", "{A7151D9F-543D-46BF-B098-49E2616B8F05}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Debug.ActiveCfg = Debug|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Debug.Build.0 = Debug|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Release.ActiveCfg = Release|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.suo b/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.suo new file mode 100644 index 0000000000000000000000000000000000000000..ac05350879a8c49a5516fc8fd03b33cf37d7bcc4 GIT binary patch literal 10240 zcmeHN-EUMy6rXL2d<%k%$>cvcel5@ZK-L(Y)ni zfJh=wi3#jz>1m@_l0Eb5XXv&jG&*Tkf8nV_yK7eCUJ(*$aY=NE81jrbkG~N}q07@V zj9CK|%3bvtnrEx2+f1F}CD9{-!Y|H(t0_h#_Y78{L%xq&@~GB@fA@(B5Bc+KFfVLT zSdxpEHh(`jr?CoA>;qSzNB$i{Nf=MlCC#5$JRAO$g?+gv`WzDj^fPgQ7{K#S9N;{8 z{&jus`RA5y0Br<43EBjD3bYwi2V$SC$hU!>0U4m}pdFx{pc>FF5ZmoRUTZz?vvSR| z9`DbAyr2e9Bd7_~3_1XM9&`}Y0%`@dfewLQ038M$0UZUs2&VeY`VoiVgxWltg)Qi>r$XF~KF??n+lQQG-$X5A7nGlCv zaUs}c^n@=)67qGGKNgCcQ6n%I%a|!PSQ9h{V)2O47a1^)nW=>AzC7=3h0jckn8`>o zBP&<+#gc>Oc-n4Wb)q-O-4WHkcx+_A45bE*?pQL)qNT?p$w(>`=W}856c&|L!u~@b zAGE9=XVw&>IJ-Qt{XiCC+9(h%j+zXf22o-{U%mJ>p@mOeMC}Obc;XvS+7B&^hyk>X zLdTM_UkG&>)Top@s*&}_IIdw~*f2&2qemKj@=>H65+oo)GCNu)kd_u84xXmC>}YSX zbjb|hpY{iM23(qEtGH$#TW|JkqjC-UupSvme-UqTv$MU5KY)MP_)mXF+bSo2qJ9K2 zT*9uHa;3PA)2CX@pSFbfS?c`hXGzsZ?&Kf99#DIz6Wr6JD|aDwWB&BXh}os`r+=sI zA0B0*{7I0~V`U4YkTL{)F@T6MXb5+t9|%Z`L|d5#4M9#LPt%P&T{lEM@G<}`<9P@J zm-}UJrO&S~5J&1%95WdL?|#V56WX7B7vlewLrJI4H@8Eb=E9XLoCjOaB{}tvJDmhd zw$Ogvw#G3riP)plQ1ZG;~e}U=XUH8~_FX8MIIifF4VkcOF!R zOjKKfa|%#PNT~-d)(L9yHIPq1eWZ<-H(1Qg*+DK(EjPf_$7!9iOW+) zFHJ4>C^k+b0HX%lM@A8hG3HZ!>VdW6(qh_t&q(W^%ayk+#br~fz_!ca3zRRL8~*56 z+>bTkx)e+G7XC60C>4L6M%x-|Fxr_o)?Z_s!r399UQ`|va#ns&G44VD|2>Rg7@L;L ze+$~aVgcM49JOI+0DYb5FupivRk{uQiKoP&Qu%YAuB-0g8OO?|@uOcKfi9FM1@1pQ z)M4^wvW9id7_aIEZqRl}M#}T6?cJCo!HRQ^0Hm~!QxD&)L+TkJu>)-eA)Kx)d~;?ErG>Jblyvd(1+;!vgigz~r zBVj7_^~v_VH-=BW|NXnyyC*;Wz(a-QO-iTqKnVA|t+F`^ahuiC1$+om?%(~3E_~zf%UdltM5o!Oa|YwzVy2BZS33HonJSEa%QJrVw+BYa+DKlwryLnZzxn2o zu?lr8g`HA&Xd(2nqhB@qFK-^b^ZSOEPrqG%YuU{|4*yj4N-VsMCr4%98=-(+Sn31F z58|m#<}A&(?=2{4DzNXoZt!XwM?ZK3r;eUC*GyR(`n&FFHutZ4F=WOX_B^ziT)8(9 zkd{Z^V7PPV-C_Che=h#@N+h!HpL>8lTm#-g&??!UesM{NzlLGCEK9rL-&SL)i!GJQ$M9)_FcTLR)aC4gDJNdg;+}`qR_u+Xw2hG?8rLhvp7ppK$gA+EA^6$ z2Qn`a?I@cg(WfIZM*9JzzKu9rr1PthKu_K@Aa@lhT-{?Y$qLC1&XJV2e`PszfNi4iUD-Sc~4;x38) zFYmH>r&g-}o9lnu@vHj&XMcZ~fLidI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.vbproj.user b/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.vbproj.user new file mode 100644 index 0000000..7136437 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceAdmin.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceListener.vb b/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceListener.vb new file mode 100644 index 0000000..2dcaa2e --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/ServiceListener.vb @@ -0,0 +1,92 @@ +Option Strict On + +Imports System.Threading +Imports System.Net + +Public Class ServiceListener + + Private ListenThread As Thread = Nothing + Private ThreadExit As Boolean = False + Private Clients As ArrayList = New ArrayList + + Public Sub New() + + End Sub + + Public Sub Start() + + If Me.ListenThread Is Nothing Then + Me.ThreadExit = False + Me.ListenThread = New Thread(New ThreadStart(AddressOf ListeningThread)) + Me.ListenThread.Start() + Else + Throw New InvalidOperationException("Listener thread already started") + End If + + End Sub + + Private Sub ListeningThread() + Dim MyTcpListener As Sockets.TcpListener = Nothing + Dim LocalAddress As Net.IPAddress = IPAddress.Any + Dim ThisClient As Client = Nothing, LoopCounter As Int32 + + Try + MyTcpListener = New Sockets.TcpListener(LocalAddress, 5005) + MyTcpListener.Start() + Trace.WriteLine("Listening thread starting on " & MyTcpListener.LocalEndpoint.ToString) + + While Me.ThreadExit = False + Thread.Sleep(500) + If MyTcpListener.Pending = True Then + Trace.WriteLine(Environment.NewLine & "Connecting new client") + ThisClient = New Client(MyTcpListener.AcceptSocket()) + Clients.Add(ThisClient) + ThisClient.Start() + Else + For LoopCounter = Me.Clients.Count - 1 To 0 Step -1 + ThisClient = DirectCast(Clients(LoopCounter), Client) + If ThisClient.IsConnected = False Then + Trace.WriteLine("Performing client cleanup") + ThisClient.Close() + Me.Clients.RemoveAt(LoopCounter) + End If + Next + End If + End While + + Catch Exc As Sockets.SocketException + Trace.WriteLine(Exc.Message) + + Finally + Trace.WriteLine("Listen thread ending...") + If Not (MyTcpListener Is Nothing) Then + MyTcpListener.Stop() + End If + Trace.WriteLine("Listen thread ended") + + End Try + + End Sub + + Public Sub Close() + Dim ThisClient As Client = Nothing, LoopCounter As Int32 + + Me.ThreadExit = True + 'Pause to process pending requests and do cleanup + Thread.Sleep(1000) + 'Time to die + If Me.ListenThread.IsAlive Then + Me.ListenThread.Abort() + Me.ListenThread = Nothing + End If + 'Dump any client still connected! + For LoopCounter = Me.Clients.Count - 1 To 0 Step -1 + ThisClient = DirectCast(Clients(LoopCounter), Client) + ThisClient.Close() + Me.Clients.RemoveAt(LoopCounter) + Next + Me.Clients = Nothing + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/bin/error.html b/Source/VisualStudio2003/Chapter10/DebugOnStart/bin/error.html new file mode 100644 index 0000000..a64a784 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/bin/error.html @@ -0,0 +1,16 @@ + + + + + + Couldn't find page + + + + +

    Ooops!

    + +

    Sorry - this page cannot be found

    + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/bin/status.html b/Source/VisualStudio2003/Chapter10/DebugOnStart/bin/status.html new file mode 100644 index 0000000..d847698 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/bin/status.html @@ -0,0 +1,25 @@ + + + + + + Service administrator + + + + +

    Windows services on

    +

    #1#

    + + + + + + + +#2# +
    Service name
    Service description
    Service status
    + + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/error.html b/Source/VisualStudio2003/Chapter10/DebugOnStart/error.html new file mode 100644 index 0000000..a64a784 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/error.html @@ -0,0 +1,16 @@ + + + + + + Couldn't find page + + + + +

    Ooops!

    + +

    Sorry - this page cannot be found

    + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Debug/ServiceAdmin.DummyService.resources b/Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Debug/ServiceAdmin.DummyService.resources new file mode 100644 index 0000000000000000000000000000000000000000..d42e55551f494b8ef9389b001d47b993acbce7bb GIT binary patch literal 188 zcmX?i>is@O1_p+CK&%;DSzMBus~417oL^d$oLUTL1*ImYq!#HYycEh^5;&$BhuGte_NFfhR-+SNAOWwZT ztVW3F5$sg9;tFOd3(R#qt~2-7Y=LP-#$!>-)g5jc1-H@DvxQ-??a(X}JKnMA1;$;& zu_xn-sw7lZRn%B?#xsS-*`&=p!8J1$&3FaV(9f~TqH~$qlZ9kbOX!KQ_{7L4Q^zMH z%RX2a%nJ6Oaf&SESjs%J3XD$)!Ht3^m>Y}M99pw;F4!##czdbUd0h(7rya*+n%!#n z$LG@?2L9aU3_ya_kR51=j&^^O~`r{ipF8zU>@wMlp5ns2hmH+ ztC$btI*a>T-9)hyB&bXVxuj5v7?nsvpoypR<;R2b_nqg~caW7}~wC z2!D+#l*TuwCAiFy4m_LI;hM_&fGYsj{UsaV0m+wOUGHe}`N zu=p=Jrmx4~UgTPbmSvBuMk+)-z69@ZKLBg{@*T*#^Me>(-ZDis@O1_p+CK&%;DSzMBus~417oL^d$oLUTL1*ImYq!#HYycEh^5;&$BhuGte_NFfh + + + + Couldn't find page + + + + +

    Ooops!

    + +

    Sorry - this page cannot be found

    + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Debug/status.html b/Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Debug/status.html new file mode 100644 index 0000000..d847698 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Debug/status.html @@ -0,0 +1,25 @@ + + + + + + Service administrator + + + + +

    Windows services on

    +

    #1#

    + + + + + + + +#2# +
    Service name
    Service description
    Service status
    + + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Release/ServiceAdmin.DummyService.resources b/Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Release/ServiceAdmin.DummyService.resources new file mode 100644 index 0000000000000000000000000000000000000000..d42e55551f494b8ef9389b001d47b993acbce7bb GIT binary patch literal 188 zcmX?i>is@O1_p+CK&%;DSzMBus~417oL^d$oLUTL1*ImYq!#HYycEh^5;&$BhuGte_NFfhR-+SNAOWwZT ztVW3F5$sg9;tFOd3(R#qt~2-7Y=LP-#$!>-)g5jc1-H@DvxQ-??a(X}JKnMA1;$;& zu_xn-sw7lZRn%B?#xsS-*`&=p!8J1$&3FaV(9f~TqH~$qlZ9kbOX!KQ_{7L4Q^zMH z%RX2a%nJ6Oaf&SESjs%J3XD$)!Ht3^m>Y}M99pw;F4!##czdbUd0h(7rya*+n%!#n z$LG@?2L9aU3_ya_kR51=j&^^O~`r{ipF8zU>@wMlp5ns2hmH+ ztC$btI*a>T-9)hyB&bXVxuj5v7?nsvpoypR<;R2b_nqg~caW7}~wC z2!D+#l*TuwCAiFy4m_LI;hM_&fGYsj{UsaV0m+wOUGHe}`N zu=p=Jrmx4~UgTPbmSvBuMk+)-z69@ZKLBg{@*T*#^Me>(-ZDis@O1_p+CK&%;DSzMBus~417oL^d$oLUTL1*ImYq!#HYycEh^5;&$BhuGte_NFfh + + + + Couldn't find page + + + + +

    Ooops!

    + +

    Sorry - this page cannot be found

    + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Release/status.html b/Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Release/status.html new file mode 100644 index 0000000..d847698 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/obj/Release/status.html @@ -0,0 +1,25 @@ + + + + + + Service administrator + + + + +

    Windows services on

    +

    #1#

    + + + + + + + +#2# +
    Service name
    Service description
    Service status
    + + + diff --git a/Source/VisualStudio2003/Chapter10/DebugOnStart/status.html b/Source/VisualStudio2003/Chapter10/DebugOnStart/status.html new file mode 100644 index 0000000..d847698 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/DebugOnStart/status.html @@ -0,0 +1,25 @@ + + + + + + Service administrator + + + + +

    Windows services on

    +

    #1#

    + + + + + + + +#2# +
    Service name
    Service description
    Service status
    + + + diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter10/ServiceAdmin/AssemblyInfo.vb new file mode 100644 index 0000000..64988a1 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/Client.vb b/Source/VisualStudio2003/Chapter10/ServiceAdmin/Client.vb new file mode 100644 index 0000000..601e85c --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/Client.vb @@ -0,0 +1,130 @@ +Option Strict On + +Imports System.Net +Imports System.Text +Imports System.Threading +Imports System +Imports System.IO +Imports System.ServiceProcess + +Public Class Client + + Private ThisClient As Sockets.Socket = Nothing + Private ReadBuffer(16384) As Byte + Private PageBuffer(16384) As Byte + Private EmptyBuffer() As Byte = Encoding.ASCII.GetBytes(Space$(1024)) + + Public Sub New(ByVal NewClient As Sockets.Socket) + + Me.ThisClient = NewClient + + End Sub + + Public Sub Start() + Dim HtmlStream As StreamReader, PageRequest As String, PageText As String + + Try + Me.ThisClient.Receive(Me.ReadBuffer, Me.ReadBuffer.Length, Sockets.SocketFlags.None) + PageRequest = ReturnPage(Encoding.ASCII.GetString(Me.ReadBuffer)) + 'Open requested page + HtmlStream = New StreamReader(PageRequest) + PageText = HtmlStream.ReadToEnd() + HtmlStream.Close() + 'If status page, display services + PageText = PageText.Replace("#1#", Environment.MachineName & " (" & Me.ThisClient.LocalEndPoint.ToString & ")") + PageText = PageText.Replace("#2#", Me.DisplayServices) + 'Display requested page + Trace.WriteLine("Sending page " & PageRequest) + Me.PageBuffer = Encoding.ASCII.GetBytes(PageText) + Me.ThisClient.Send(Me.PageBuffer, Me.PageBuffer.Length, Sockets.SocketFlags.None) + Me.Close() + + Catch Exc As Sockets.SocketException + Trace.WriteLine(Exc.Message) + Close() + + End Try + + End Sub + + Private Function ReturnPage(ByVal PageRequest As String) As String + Dim HtmlPage As String, IndexStart As Int32, IndexEnd As Int32 + + 'Extract page + IndexStart = InStr(PageRequest, "/") + 1 + IndexEnd = InStr(IndexStart, PageRequest, " ") + HtmlPage = Mid$(PageRequest, IndexStart, IndexEnd - IndexStart) + 'add suffix if necessary + If Right$(HtmlPage, 5) <> ".html" Then + HtmlPage += ".html" + End If + 'Add local path + HtmlPage = Me.ReturnPath & HtmlPage + 'Check page exists + If File.Exists(HtmlPage) = False Then + HtmlPage = Me.ReturnPath & "error.html" + End If + 'Return page + Trace.WriteLine("Page requested: " & HtmlPage) + Return HtmlPage + + End Function + + Private Function ReturnPath() As String + + If Right$(AppDomain.CurrentDomain.BaseDirectory, 1) = "\" Then + Return AppDomain.CurrentDomain.BaseDirectory + Else + Return AppDomain.CurrentDomain.BaseDirectory & "\" + End If + + End Function + + Private Function DisplayServices() As String + Dim ThisService As ServiceController, TempPage As String + + For Each ThisService In ServiceController.GetServices + TempPage += "" & Environment.NewLine + 'Add service name + TempPage += "
    " + TempPage += ThisService.ServiceName & "
    " & Environment.NewLine + 'Add service friendly name + TempPage += "
    " + TempPage += ThisService.DisplayName & "
    " & Environment.NewLine + 'Add service status + TempPage += "
    " + TempPage += ThisService.Status.ToString & "
    " & Environment.NewLine + TempPage += "" & Environment.NewLine + 'Finished with this service + ThisService.Dispose() + Next + + Return TempPage + + End Function + + Public Function IsConnected() As Boolean + + If Me.ThisClient Is Nothing Then + Return False + Else + Return Me.ThisClient.Connected + End If + + End Function + + Public Sub Close() + + If Not (Me.ThisClient Is Nothing) Then + Trace.WriteLine("Closing client socket") + Me.ThisClient.Shutdown(Sockets.SocketShutdown.Both) + Me.ThisClient.Close() + Me.ThisClient = Nothing + End If + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/ProjectInstaller.resx b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ProjectInstaller.resx new file mode 100644 index 0000000..482e83e --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ProjectInstaller.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + Assembly + + + 17, 17 + + + Assembly + + + Assembly + + + 211, 17 + + + ProjectInstaller + + + Assembly + + + False + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/ProjectInstaller.vb b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ProjectInstaller.vb new file mode 100644 index 0000000..4c0d513 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ProjectInstaller.vb @@ -0,0 +1,83 @@ +Imports System.ComponentModel +Imports System.Configuration.Install +Imports Microsoft.Win32 + + Public Class ProjectInstaller + Inherits System.Configuration.Install.Installer + +#Region " Component Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Component Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Installer overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Component Designer + 'It can be modified using the Component Designer. + 'Do not modify it using the code editor. + Friend WithEvents ServiceProcessInstaller1 As System.ServiceProcess.ServiceProcessInstaller + Friend WithEvents ServiceInstaller1 As System.ServiceProcess.ServiceInstaller + Private Sub InitializeComponent() + Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller + Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller + ' + 'ServiceProcessInstaller1 + ' + Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem + Me.ServiceProcessInstaller1.Password = Nothing + Me.ServiceProcessInstaller1.Username = Nothing + ' + 'ServiceInstaller1 + ' + Me.ServiceInstaller1.ServiceName = "ServiceAdmin" + ' + 'ProjectInstaller + ' + Me.Installers.AddRange(New System.Configuration.Install.Installer() {Me.ServiceProcessInstaller1, Me.ServiceInstaller1}) + + End Sub + +#End Region + + Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary) + + 'First do the install + MyBase.Install(stateSaver) + + 'System.Diagnostics.Debugger.Launch() + + Dim SystemKey As RegistryKey = Registry.LocalMachine.OpenSubKey("System") + Dim ControlSetKey As RegistryKey = SystemKey.OpenSubKey("CurrentControlSet") + Dim ServicesKey As RegistryKey = ControlSetKey.OpenSubKey("Services") + Dim ServiceKey As RegistryKey = ServicesKey.OpenSubKey(Me.ServiceInstaller1.ServiceName, True) + + 'Set the service description + ServiceKey.SetValue("Description", "Allows remote service administration") + + 'Cleanup + ServiceKey.Close() + ServicesKey.Close() + ControlSetKey.Close() + SystemKey.Close() + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/Service.resx b/Source/VisualStudio2003/Chapter10/ServiceAdmin/Service.resx new file mode 100644 index 0000000..df79c33 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/Service.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/Service.vb b/Source/VisualStudio2003/Chapter10/ServiceAdmin/Service.vb new file mode 100644 index 0000000..caf9754 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/Service.vb @@ -0,0 +1,82 @@ +Option Strict On +Imports System.ServiceProcess + +Public Class ServiceAdmin : Inherits System.ServiceProcess.ServiceBase + +#Region " Component Designer generated code " + + Private Listener As ServiceListener = Nothing + + Public Sub New() + MyBase.New() + + ' This call is required by the Component Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call + + End Sub + + 'UserService overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + ' The main entry point for the process + _ + Shared Sub Main() + +#If DEBUG Then + Dim DebugService As New ServiceAdmin + DebugService.OnStart(Nothing) +#Else + Dim ServicesToRun() As System.ServiceProcess.ServiceBase + 'The following line instantiates just your service + ServicesToRun = New ServiceBase() {New ServiceAdmin()} + + 'The following line (instead of the previous line) additionally instantiates a dummy service within the same + 'process as your real service. Starting the dummy service allows you to attach to the service process - then + 'you can debug your service's OnStart method by setting a breakpoint before starting your service. + 'ServicesToRun = New ServiceBase() {New ServiceAdmin(), New DummyService()} + + 'Start the service + ServiceBase.Run(ServicesToRun) +#End If + + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + ' NOTE: The following procedure is required by the Component Designer + ' It can be modified using the Component Designer. + ' Do not modify it using the code editor. + Private Sub InitializeComponent() + components = New System.ComponentModel.Container + Me.ServiceName = "ServiceAdmin" + End Sub + +#End Region + + Protected Overrides Sub OnStart(ByVal args() As String) + + Me.Listener = New ServiceListener + Me.Listener.Start() + + End Sub + + Protected Overrides Sub OnStop() + + If Not (Me.Listener Is Nothing) Then + Me.Listener.Close() + Me.Listener = Nothing + End If + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.sln b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.sln new file mode 100644 index 0000000..fe31dc5 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ServiceAdmin", "ServiceAdmin.vbproj", "{A7151D9F-543D-46BF-B098-49E2616B8F05}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Debug.ActiveCfg = Debug|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Debug.Build.0 = Debug|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Release.ActiveCfg = Release|.NET + {A7151D9F-543D-46BF-B098-49E2616B8F05}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.suo b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.suo new file mode 100644 index 0000000000000000000000000000000000000000..85d9970d3509d8f13f7b548c2cd83313e5e15e19 GIT binary patch literal 10240 zcmeHMU2IfE6rSym6r}tqh$wi)0tM;PLXozB+U^!Dwt#J+HEB$?+ikmLySMHx6aq#_ zd@#mm0xwz~Obn<|;{%e2i6%x(3=N6V2Q~Vn4<_i7zDWJPxp(&7y}NsRw@WJ|J)3i9 z?#$ddXXczaKeLn9m;Z9{!!^GO2RtcC#jUA@;vQSO4|Sr1WkQso!uMNKQ&UEx5U9?> zU9;1VEZZU^VPy>GsL=k7qK(D6$NO|*(Q z%7i!x>3WA%qC9=(@1N$g4?apBHDA|#UHsAv~alqqo-&j`3s?MY); z-e(o8kbQUa4s>)-w+U_Hi0Bd>A}9`lsxHPP^%QoYMZS-l{1~INpIbzUkMwyqSZ0sN zZn4`-i+&K4lh}nJ$bmc1C7;L95=Jc_DEhR;Goepj_$_6^I#Jnx8ncZyfajlffa|2_ zmI66;xmmJK`L6`70zLp-4SW!|2IvQJ%vzM|fR6w*;G@9xz{h}9zzsl-+k~>(tZy+( zwi9>ZeH*YASO?q=+ySfy?gTyog{OPy28VeQTbXKjD}+Rkk&d7P3Z{^Sk|HUM`IDKC(^I&(-Wie^Mx62 zivs%Sm>!SBQ?j$NCmJ8n$CK9ZvS+(H+Bw;hKrA}euZI!?T4yvq#HIz$MB;W}wn&GmWYk1!rNUPV6JsZN0 zJJW+5OJVEJeqkNT!{`{^y3lqECxh$P;5iN;HtEI*IfCzYq2$*od179j zBZ}0?7*;X}+I`@ZC%iBHF2w)Khrt~!Na5hrKT0Z&y|-I3w^^ZoGXA08_o{#NIOlxE ztWNqJ(2`NeopET7$%`%+h2@5=GdTZ9U7=3~@VpuJIWD!&(o{o-N5D@QBLd)w@o_{x zEpD33^>gin++1e1^1RXp5rUXE3~e7ZXST2T5c(Jqx>{7)5>Wu%K zP)wV1uGxGq7d~pzfTXcnRF}O{imjNM+E{{)(ld6_pZ@mt_*d;4xU!OJ-zm`yV^W8J zu?|9Lgo&y_y&i#N5Vd*)ku9>V1#Y`hG|09_7^3aysgu18=&!{$FN@O-w`sX`KU{r3 zj5*ES2*!nFm_Wm4g$Zf9gvV{qmJ;wZ}G4m;K763n7Q2;Be1;;GeT7y=u zl5Gw61+dB*ywze4YVp=6`}tmvI@hxg944TY2(Y*BsNac*+P1fw-1pW$mwQ_d&wKOQ zdp}Dp0J~K-iGO>!eucfSB}X6gmktOcCQlhXPY4UA{~0qg!V!$vEB(6=yJe1XJ5|RI z(T+=xXVE<~D&Jw`tc>|J^F;E1$P#71u|L{?VNt<9!>sl}$Rs(42@|m^W z;z;*Qrhod2xkt(E`C&?xcs{^rf+N1l7< z`-!uix2|0BQDJ$L(q_gX#%-0g3L#!%cfJG@Daz#4zj|L=|4Hk+P2Yvj|9xVuq=Qe2 zf#)^GFvYtyD-%h`$oizvpaGe&Q4&3LiB_hN6us9e6M>Oh+RYj^k)t!6rQMAxdS70A z>gw++UpR2Vf4Sn~AA5h2lNIo=XY=X~lQAOO4d*PxW^+E4Z9tWK%I4XN4PtVujF8o0 z#}O;2D3@{Y7)~ACJ_j4#h9A4bOzvN~51r<;hp|_rO4&q!iXSCIcj~-5EIj|W+dp;B ztYp^(>%%?Z9R$6S73t^Zg!Y&D1kaLJ`};V?s{C86m#2CVlqrWoVATxPzZC??vxH(} zMNYC>d{Z`P#NE|yv0+Kcy19%E(+1&giM#V#@7#F=3?%hV11kNc?O_H#gba6Bo@Jga zGKv(wh8XFxIBiu*>n>* zVW~4GblU&+b7j31=gRoyo1S!)Bl7_FkVqf@1JJk|%Z#{@lTPf}#(z~R-|$3_dFpKB zq}k3^gHh&HkS5(|N(SOoEIL-pl^TEB@uDv!4JWU~ygG0DH6L|}IkGbRZq7Rlml4HC zUdYT&2F$!SLwAt#X6X)Pr}9n+Fbyj2wCA1&)4f8deg-q9>@UsB-lOa@^@OG_2`%8o zG1CeabUC7&qAiK@MkGTw^7uS;t|#VYdq>OGy5q8)QC7X!Z>pSfcXl6asiJ%QPZ}D~ z{_R}(Z<@|FWN$R#VHjU#w7hrEOd-LX3o!nrw`BI~HU727-&X!={QqbD|8NqHg#StA m`Qz5)iT{6*t^yZU(_M|IW#nM#o|#n?ZI&~ep}4P#q5mJP$)FAZ literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.vbproj b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.vbproj new file mode 100644 index 0000000..03387c2 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.vbproj @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.vbproj.user b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.vbproj.user new file mode 100644 index 0000000..9715303 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceAdmin.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceListener.vb b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceListener.vb new file mode 100644 index 0000000..2dcaa2e --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/ServiceListener.vb @@ -0,0 +1,92 @@ +Option Strict On + +Imports System.Threading +Imports System.Net + +Public Class ServiceListener + + Private ListenThread As Thread = Nothing + Private ThreadExit As Boolean = False + Private Clients As ArrayList = New ArrayList + + Public Sub New() + + End Sub + + Public Sub Start() + + If Me.ListenThread Is Nothing Then + Me.ThreadExit = False + Me.ListenThread = New Thread(New ThreadStart(AddressOf ListeningThread)) + Me.ListenThread.Start() + Else + Throw New InvalidOperationException("Listener thread already started") + End If + + End Sub + + Private Sub ListeningThread() + Dim MyTcpListener As Sockets.TcpListener = Nothing + Dim LocalAddress As Net.IPAddress = IPAddress.Any + Dim ThisClient As Client = Nothing, LoopCounter As Int32 + + Try + MyTcpListener = New Sockets.TcpListener(LocalAddress, 5005) + MyTcpListener.Start() + Trace.WriteLine("Listening thread starting on " & MyTcpListener.LocalEndpoint.ToString) + + While Me.ThreadExit = False + Thread.Sleep(500) + If MyTcpListener.Pending = True Then + Trace.WriteLine(Environment.NewLine & "Connecting new client") + ThisClient = New Client(MyTcpListener.AcceptSocket()) + Clients.Add(ThisClient) + ThisClient.Start() + Else + For LoopCounter = Me.Clients.Count - 1 To 0 Step -1 + ThisClient = DirectCast(Clients(LoopCounter), Client) + If ThisClient.IsConnected = False Then + Trace.WriteLine("Performing client cleanup") + ThisClient.Close() + Me.Clients.RemoveAt(LoopCounter) + End If + Next + End If + End While + + Catch Exc As Sockets.SocketException + Trace.WriteLine(Exc.Message) + + Finally + Trace.WriteLine("Listen thread ending...") + If Not (MyTcpListener Is Nothing) Then + MyTcpListener.Stop() + End If + Trace.WriteLine("Listen thread ended") + + End Try + + End Sub + + Public Sub Close() + Dim ThisClient As Client = Nothing, LoopCounter As Int32 + + Me.ThreadExit = True + 'Pause to process pending requests and do cleanup + Thread.Sleep(1000) + 'Time to die + If Me.ListenThread.IsAlive Then + Me.ListenThread.Abort() + Me.ListenThread = Nothing + End If + 'Dump any client still connected! + For LoopCounter = Me.Clients.Count - 1 To 0 Step -1 + ThisClient = DirectCast(Clients(LoopCounter), Client) + ThisClient.Close() + Me.Clients.RemoveAt(LoopCounter) + Next + Me.Clients = Nothing + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/error.html b/Source/VisualStudio2003/Chapter10/ServiceAdmin/error.html new file mode 100644 index 0000000..a64a784 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/error.html @@ -0,0 +1,16 @@ + + + + + + Couldn't find page + + + + +

    Ooops!

    + +

    Sorry - this page cannot be found

    + + diff --git a/Source/VisualStudio2003/Chapter10/ServiceAdmin/status.html b/Source/VisualStudio2003/Chapter10/ServiceAdmin/status.html new file mode 100644 index 0000000..d847698 --- /dev/null +++ b/Source/VisualStudio2003/Chapter10/ServiceAdmin/status.html @@ -0,0 +1,25 @@ + + + + + + Service administrator + + + + +

    Windows services on

    +

    #1#

    + + + + + + + +#2# +
    Service name
    Service description
    Service status
    + + + diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/FormInterop.frm b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/FormInterop.frm new file mode 100644 index 0000000..1d2038e --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/FormInterop.frm @@ -0,0 +1,42 @@ +VERSION 5.00 +Begin VB.Form FormInterop + Caption = "Interop debugging" + ClientHeight = 2544 + ClientLeft = 48 + ClientTop = 288 + ClientWidth = 3744 + LinkTopic = "Form1" + ScaleHeight = 2544 + ScaleWidth = 3744 + StartUpPosition = 2 'CenterScreen + Begin VB.CommandButton DebugTest + Caption = "Test debug of VB6 app calling VB .NET component" + Height = 1092 + Left = 720 + TabIndex = 0 + Top = 720 + Width = 2172 + End +End +Attribute VB_Name = "FormInterop" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Option Explicit + +Private Sub DebugTest_Click() +Dim InteropTest As InteropDemo.MathClass +Set InteropTest = New InteropDemo.MathClass + +Me.DebugTest.Caption = "Result = " & CStr(InteropTest.AddTwoNumbers(1.1, 2.2)) + +Set InteropTest = Nothing + +End Sub + +Private Sub Form_Load() + +Me.Caption = "Test interop debugging" + +End Sub diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/AssemblyInfo.vb new file mode 100644 index 0000000..b8889fb --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropClass.vb b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropClass.vb new file mode 100644 index 0000000..510e7b9 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropClass.vb @@ -0,0 +1,20 @@ +Option Strict On +Imports System.Runtime.InteropServices + +Public Interface IMathClass + Function AddTwoNumbers(ByVal FirstNumber As Double, _ + ByVal SecondNumber As Double) As Double +End Interface + + _ +Public Class MathClass : Implements IMathClass + + Public Sub New() + End Sub + + Public Function AddTwoNumbers(ByVal FirstNumber As Double, ByVal SecondNumber As Double) As Double Implements IMathClass.AddTwoNumbers + 'Return the result to VB6 + Return FirstNumber + SecondNumber + End Function + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln new file mode 100644 index 0000000..43f6f17 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InteropDemoBetter", "InteropDemoBetter.vbproj", "{5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.ActiveCfg = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.Build.0 = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.ActiveCfg = Release|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln.old b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln.old new file mode 100644 index 0000000..41538ff --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InteropDemoBetter", "InteropDemoBetter.vbproj", "{5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.ActiveCfg = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.Build.0 = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.ActiveCfg = Release|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.suo b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.suo new file mode 100644 index 0000000000000000000000000000000000000000..2ac2e9ac7034d4aa99619a9663d970bb1776b24f GIT binary patch literal 7680 zcmeHLOKenC82+aeDG24EAfn(EL4m-eycGn~&J2ilT4)QcWH$4-9R{Xzn|ZV}zT%F! za*1xV3k^|Y;!ZI>5)&hCU}M~9qKSztjE}g`jUB)5+;e)T)9Lh1+h9oeCuio8J6%U$m2pwT7~p;e->ve# zF3q7O$L*Y*k7s#5oo>?kK;;SkQyb!7O1fnbaY;P1flxzySd$pb^C7cfc4XAMjjlw=4?m^{0R^%jA#0>1!LLFtJIh>rofd~_behV z*C*mX@v9O3#LJy}S!$htjnnv1-+tJ$2>YKyZ??0CO91~Tc~b_xY~2g^G?@dBEJX`9K?GGe&BjmrO%(lGiC(!kf2Tb zzw3Se{EufJa|Tj9{-zcT!zQ##Eee7^YnSC{e*K?VVRn`{lZF09M>oy}p>-OgJbTQO zTHKjOG>(7ku+&){Al=A5&cg$E&dn6#wK=<^o1j1K$ur%r{ubu`hDHj)^+(ld>G@r^ zLjOvyW3^Y?H{DEub6Zs1wvfJgSY;FoxnfXy;OERD_|?Id7bY`hzY8E-PK9R^<^RQ2BVC>wu`scu<%^yeJKlE+# z^4}LXs-v;BtM~iQeqSDab?fENo8Daek17-M*PdzLe);^fSH64em7a-@-rY^6ThMB! zi5(EJh#%8O6j!YOL$EAuUr=9s5-P%Y*6zWxc77P}RNx(x%}%s56i(vlHGWg5%}gXi z2Gid^hWGPWN#vA*T!niMiD6?z_ygb($hGnR?*5n}bg^^-FG!E#to)`N1>wSUppZ8BM5lix^iEub#J(j9ArL; zfESPa+F;`>XzUb1{T)~Xp_#|{J%1|ef0N@d4;}_K(Ejuz_q3ty>XZ5Y+erRFz`CNB zJ&heA*En|3Ml~k@OwGQgKPKui&y`RAqx3TzWx`WxzwLKz?V7GLXq)3 OzxH1!zGj{I@c$1qOo4j< literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj new file mode 100644 index 0000000..20d6404 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj.user b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj.user new file mode 100644 index 0000000..04da67b --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/GoodComVersioning/InteropDemoBetter.vbproj.user @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.exe b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.exe new file mode 100644 index 0000000000000000000000000000000000000000..5f251c4b742143c434dc5f9151090e16e27ddfd2 GIT binary patch literal 20542 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 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.pdb b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.pdb new file mode 100644 index 0000000000000000000000000000000000000000..747fe6ef50694e85e7a725695e0148ec90e3f896 GIT binary patch literal 74752 zcmeHQe{57oexC)Cm|%!Q3^9b{Hi>gFiDTAlW7a-H)?VYYk)61}aa^^LS@0Sb*1MbC zH609G_7y(9r5nu!u0Y-okU<4QeMt~7u1Q-EEfDvE> z7y(9r5nu!u0Y-okU<4!rHJ`a03yzPhe*$j-P+HR+itOu(3`E76NMJCSkgo?I?uT$7 zJ%U8XV=B=((fD8l7=c-d0KNUwh^Rhvyy|QAZ)}(4pLc0{-22m+ih?U}L zu}VB6o)zB`PVt<0Uc4Zx#EatF;w4cnn#IfF6;UHz6}4iGaEUr-s}~JoEv#K9Jfcag z7T*yq;wkZ@SSFS$$(%6)jKFvhFz0_w-ud4VjSs2?!J7VJ6E+14umJedXMDZ;)tw<7 zPwb6YGBg5C4=Lg8TCxh)t^grX5=9mN)_^{n&M*SgxoqH?mk(s~_H9LIj+ zC6xb`_8mA5Eut-mW0he=bF*BSwgwZ)K3_PrYu^&FaNfeja;s8O)xFL|<WUw;1Mxw$bBIzY?^lrdd!)1Q@4q2YU*bp~Bdx+U$%*Sx6|P0qxDGkd?lLgHi?j-x z=xP?9y+6gq{ zI$vlfP%U=?>oH!Ji>0C+JAyXs3HV?H7=c0v)Fy)ml3*Ie+D6wEx!6%|98Mv2)KWlD z)Lo-n1s4+WP;MMvET^^cM4a~dCB%mc$w#?yctN50PivdL{u^XIWds<3X+q#b%t5;L z{~zWv9hE<$@;6ofrQ%z!%HOCQ+c-WL0Y-okU<4QeMt~7`Xb_;S+C$UXIo44; zuA8v$D(|E19D|X&!w4_}i~u9R2+T+X==Zi6X&4*D2rvRuh5-FUHD$tCFeAVSFanIg z14E#N*Y^j8Ju7Ae7y(9r5nu!u0Y+dZBGAeE!xihX8$>Hs?Au2_4$O zxJ&|yEP@eW1Q-EEfDvE>7y(9r5nu!u0Y-okU<4QeMt~7u1Q>zh5m+u3BBF;77ZLo! zAs+4P>qDfkEdr6Wtoj?Ep?+JNck9OOc(|?WhY|10s&CtB)?Y-tGpl}MT0O-N5` zaCEn(os{j$EU9R-C74Xvzeo4i*OdrGY+dcTO`v~o-vGj&4c4XFL?o@WuMchBiYE~z z&g#P%#5!__$1Ocxm#fax>T1J_=bC;A@siW%K3A*9W79tYIB9fGQ^&dno9>l;gnYut zLgDq`U)Xe)^hHYlI-k$g?t^@d@haIq4P%9dEra4QIm8nhN2~YAKt%W9P-Y)GIy@cd zqt-#+(Hed<&=ZKFXW`T@d6uW?=nw6W_YKy&L!fC{eDI6W%~Rv<@2s(4A-=^Lm3nNw zC-ocS&cNz`q%G05`MMA~3qve59_C58@R!zWsYQfa3nweqWz}mL;Vr#JoJFsvc8?2 z1bfdHOM;k#;JNBg~*V)xx5Y$?U2ai-X7+EFnB>~c<%4K;=yk8y6| zQOr5rKNrI{QJ&s0yON`BF5)p+eY&23*X@k5siy@0Ou{Ui=jC~5CZBn}Y65M{ z_Iy5h2vq0sMMEAMS>P=|pA0Lzr$I+Cc5a^`c8q0fe-ZY@^6(tYL3=Mp-C?8dm~lRq zU0h!r0w)YCKQYdWYklwD7ie=iN4sk|>I%ucRYV*5=YWOe6ict1Bw1CEOjhNnn<@6P9gM(SMxeTgxz|tx&;4TLodzBEYvY4%-#v*K zZ7)JrKX_tA@R_(AEWrO>0lFz`vd#}b0G*R%`%IH_Y?feoVwTuB)BMZ!6pz3sMUJsA zisU2B7stU{yrt92dHDhK;hNHUD?_(~d{&69$Bd);661<0qcgaf-Ti_(<$H5my z{V?pQM%^f43zVT;3jU+uy9WN_h?8*wb!Wj72G1vuSpq(Kr?nrn_Yixe0WlxWLsmE5 zQSc-01U-y2jPpu7ucG(<=$(`s;C&CWddr14h;$ism5_H5yw%hOT{S~m|B69kEtpPHQqJKxgcOAA=;+($2s{(BVJLIb-CG=h-V>;!XL1!d zAHn%2I6r_?1Dm&_ZV%~4o0G^}(C!jwx2Uh+J%aO-&`smvHgs2kuM>Pu*j9nQU4o8o z(5q4BN89b-9|f%e_MJhQ;=Z_G*9h9u{a7c?Z$s`5jxzVm4N0rGMr z7j#pJ?*-A$FhrT9Kn<=?1$ zwX*9SC?&mjl-(CpeVyW4tnlekb}vx*9cA}2)vu7U@07+zwOg(D-&OW~soK4$^!`-g z`(uUQiwcJo%AOvTpHleWRD7#d{%a+FqiT0S<-b(@_&=(s{WU%A3sp-29@5Al)XPydg>H^Na;VN_&-&8Z>s*EQvG{J^=q+` z^S;XKl)vvNJwH+SeWdE&QF`9i{Zn>-uIQgD+`duuZz{bD6+RAC|Dh_st?WFd?0!?# zUr_Z6VFz6o(qc~`u2X}@j#YF>_AwR9C=d=04uw&tV=U2k1M|$-S8c8CjYjOMtC{i< z`>Ne#w|7aOq+(ae*jX;0O~0Fi-eJ(Ivgl16CjDF%z18J2^xu-cG4(ff5M9SP+bJ
    ds%+V`Z^`g)QxjzC*ib4)n$=oG1=BS84%{ISH_D3UC3S0? z{z1|fS~0p1jZBY+>TG?UIs?xi>b|Ivr2A51_QjH_B30S89+7PqSyaU1+Kh3k+i#Wa zv*LjvqE};swvE08MvOD7uM|fPGP*;Fq?WPDv>^=!PU)RyN*S_1Jv9f%JICgehx1<^I z$0SPjcvHT$^cueH&(`T#YuHqiV;t8R{oZ5tJIf2Ue)>jS#v=4}$-rqEw{F>fg^8Pm zT4x~A9}dPfHpg?!`6gow(*9M+N0c<%w>zZ#tT80R(`nfh&qBt@%kY{WLkA`ONz+D* zvYzPvpsi;(o5vSOBr*GJA5lC8he(f2M^W;$p8wS{$c{7=Y#DHkWoue&#myewmrFTt zYR3TAbh@`n8)Jw|NOWxjT?ZT@3ojYZPs=!vC8O1~)>ywsbBviL7_QfuZMLtl!rJ3| zrL5O$6Gi@ur|hP6(YPid?jNQf{I6|VBHJ3{Uj-o4^fcUz*{A8=9DQ;d@+oeJL*SZe z$MF zTVvGfUq+Ng+sAMZ`ck3Cb6StIKDDk|>vE2DHEm9$@XRwOES}Vy(DT1a+L9}NBt>ns zZH`I4RJ_ZS&2iLgA5e@3dHq%qN68vZ8#Zam3fS>XCTVr3-*4pZVo}A;%!aHl6(Q}QAaa`{Ph8l~ibR9Cj zW*a7t#!CTu{+Jo=!xGy^=q}butVNh5Ly2VH0G3j12R+M5TmL&cni{aqX`DC7@qzuAoMAC} zt=2Z2l{h}r*B1{4!d{QJeqdn0v&%mET`rgAJ(t1T09q!mz8>s9f@gjL`_6%Iawrk( z*S0_e>d}v&+(-3=v9Ehpl$KMyg*SYTOQj0WOK<{ji*DUxq|s?Bm7-hM$uv4$22*rv zFJ{v_I^L;>HcPBB0>CymXGDhuUGvlP z9O7S|#-F+yf&WU&p9h_eOyA>fB`-an-*Wl*e*AV@&I22ldUs>J>9;aDK5cqyqp#ld zi!+DocQwU5Q}Hxs*@ ze%9aY$7+OETDo@11p(NGEha&#y&b|IfAek77#cFX**a79;@xY+7 zBNPrM{5_#v@n|ACkaTVfC58fF=a%G9e<%unGsGpjkVofZBjAWdJKu~k-bjg zosZl;?%lJ`v(H|3c84PSf^p}|h$;P9?M;$J2bOZka-F4fedNA{(S_W#-7V;M-`kJ7Q+sIYM`gKPHuup)%PiCLfwKlbUa`XaUT)DUo)A9K zp1$!X0emn5jKBjy;9n2B9P~_;cK-|L0SV@Q8D_M+Wu`I?Jl2zmZe(dL)A5*?S5Eir zc%*~hY99sXFlM)PJi4uQ^TyY|*OOJ>7LA63fymFq{G|)0x989fHv9gJ@agolE%p7fTAh27D}ZdpmZURk$jODM8C9F(<|j8?0@Jvy{At$rT# zLAJ8Omi-nUWR!|U_?;e-l$>XQ20aIzuQ0$VAR=2sfk^V}n^fk55t!`=jQRX(ws(x} zX9O65f(Y>Sf4<=Bf5BnG409BL8vORZ;P}XT+ILf0LqFAaMFyf`O(ZZFOvoSf=!ZV~ zZHrzGphMpf&^giQ!1ID6vSHlk>-&EXZV+zVaa;Ecc&;!E`muNS;CIT6cn;vj^MI%D z&D{#TZ}K#LSAGWXO?*o@#dCO<>IG3HUc@_bFNtQc8uu8lh#K*#s1(8UKMzzF0=06+1I{YW=3Z{_npy#Jz~ z{{`_v&@uHs3_btr_TqaX*s&NpkG0` xO>|%d*dSiRd@ZyB(CjX>0?;a9tpLl^{BITXE(9Np03*N%FanGKBaj<`{|EhkY90Up literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.vbp b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.vbp new file mode 100644 index 0000000..181c660 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.vbp @@ -0,0 +1,36 @@ +Type=Exe +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\WINNT\System32\stdole2.tlb#OLE Automation +Form=FormInterop.frm +IconForm="FormInterop" +Startup="FormInterop" +HelpFile="" +Title="InteropDebug" +ExeName32="InteropDebug.exe" +Command32="" +Name="InteropDebug" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="Sleek Software Ltd" +CompilationType=0 +OptimizationType=2 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=-1 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.vbw b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.vbw new file mode 100644 index 0000000..7ce665e --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDebug.vbw @@ -0,0 +1 @@ +FormInterop = 138, 138, 915, 786, Z, 92, 92, 869, 740, C diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/AssemblyInfo.vb new file mode 100644 index 0000000..b8889fb --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropClass.vb b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropClass.vb new file mode 100644 index 0000000..8468909 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropClass.vb @@ -0,0 +1,17 @@ +Option Strict On +Imports System.Runtime.InteropServices + + _ +Public Class MathClass + + Public Sub New() + End Sub + + Public Function AddTwoNumbers(ByVal FirstNumber As Double, ByVal SecondNumber As Double) As Double + + 'Return the result to VB6 + Return FirstNumber + SecondNumber + + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln new file mode 100644 index 0000000..de2af6c --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InteropDemo", "InteropDemo.vbproj", "{5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.ActiveCfg = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.Build.0 = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.ActiveCfg = Release|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln.old b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln.old new file mode 100644 index 0000000..5188e56 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InteropDemo", "InteropDemo.vbproj", "{5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.ActiveCfg = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Debug.Build.0 = Debug|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.ActiveCfg = Release|.NET + {5FC95C63-9DE4-46B7-B2F0-05E1EBD85DD3}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.suo b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.suo new file mode 100644 index 0000000000000000000000000000000000000000..cd3a04eca88da93e1e79852dae8062043547193d GIT binary patch literal 7680 zcmeHLO>9(E6h2dm6odjQh$#3(P&6=>e+9v`GlQa?7TZFrna%ul7?{p$W~MC_HPIDu zp%^!4OtcFVqsGLYkf;lzQ8%zLZZy%vL>4CMN;h`=zWdV|rt|Zrtr`-};F75`hPpxN;HH3HHLe) z4KXh z!>X_wOJ|bKU^3<$c5@?Y_|mJMmId6AQ8$~+7SziXgXwI-oyeEiTOS(;cXP7#KqfsJ zbECP0)0fVs*tO)*WHy&l6aT|LXGfcRiZD?hdBOa zw1DiF2qd~P2ARa32#|r8I0pF{wU#lgD-DjF(t+PDa0KK8-i~6O#LOM|aa2t9DjZE? zCn@#351cM`F^c~zc!~58U|$x^;!hC$dCZ?u963njoQ;qW_~Rp15F=<|xHKgCtz|0T zG1r)YR9aJre{hhdu;bt)0W zOU7r$%RJgJ*6Lj4EzVW`;vkasz^@0Ccf@5Mt{hDtpwzSfnN-?V2D=%C{0P=gPmjzz z{~v3qw7(E?AfgX3g*K6`YkiE>I{#o4@oIm}y=?wfDW9iI{4K`?u-7EWSNYc(aCnu^ zwf^kWQ&!3k8w+P1JZRS93bU~4v<>o^J25BnDt|S22h4QTxAw0r>^xIu<=XzOFIr60 z*j-x9e#mD|M%g4YZQTp8lKx7nv_);9+AlPRzzV8)kme*0v9FTm(^olHqvr^4sTa6& z47d=I=T#K!L|+)utp`o_bSs`tR2u!JX8>nSECwai|2p}mHMt0&RxEC95nuN?t0np5 zmv<( z7nBF_6qF!sA&mHwQU1n^BdU;T3?67LK;)px&qWSkVi6-6;`U(Ia~6#yKZhl_@b@v; zfwru2n?H(o%n0fsL5J}_ZGGPCkFk$A1F4>TTMGuE6Y8ZJ`5~XDv>eT={Szzf$r5KW z*uUMQ_OoH^I)z@w9{Z-6bmkGw*I#Qf)zij7dXascgat6p)$;M`l6CLKImmY~^b0eo zAErN{qGieMdKLPYTOF&t>b9vf1@gA3x@{qC^MJ}I7IH?v^uf-VMewUbQl6d34E%`6 zUFx)%`*ndQfjyV}?qNJF>`F?J$NMUnZ*{_7X_Mnve*mjykwfhhiAr-G@Q4kJU6(KZ zF?4p*h0q84zm1>&^YjK48rysNzyI{N<>8mMod2xltu=qCGBNk{Y+5;8JS||J)I<(aa$J6GNFo+A7ll}Vvz}xg<2C-4*Z(%hVIDjR zOQ8Pg6FS;ZJM{_jXL4V!@;773H_f!i;H8urRUVj_$+_$q)|bv|wR!pF`?ue@?f36~ zUZxGB%N|}E3mCR-T_hKqre_8z#e1{>K=g + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.vbproj.user b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.vbproj.user new file mode 100644 index 0000000..04da67b --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb6UsingVb7Component/InteropDemo/InteropDemo.vbproj.user @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/AssemblyInfo.vb new file mode 100644 index 0000000..b160da1 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.dll b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.dll new file mode 100644 index 0000000000000000000000000000000000000000..fc98996ff9671925b04d3ccb87b077df28a7f73e GIT binary patch literal 32864 zcmeHw4_KVlneTy2lq3*9QKMp=C~>1k%KQO=nIQz22reXZ10kryKr%C#!Qqd?jExq0 zMpa|)I8kJ)-c9YfN+?xafIYbx&P7L6tXwo z{;iE{Y~9lxOqd;HKH}qQ3%j#p(fehzc1bXZSXnVmtlV$beZ6D<1=aY-Zzr$JAmH--d=>G zyVC75f170Q{fA`x+o1c(j`j94pHH@b_HUBxlPLSrU#8oShtur`uS>UYLtXd0lx}~8 zL9X4&cBSRycLMYr-y~=F#K;Dg!hW}fWp22OWhMjCkpA)AER%A7ijdM@&K1)yBc$}q zr^WP-5K{WXJTbji!!oZ$I>pE`KMlwLgtwGtkl(@mF7D@Xe=GO!GKb!k1?w{s9p1)Dc4EK+6-^hIj_oul($$bm=Q@O9_zK{D2+^^>T6!$Z@ z-^l$D?)Pwi6Zglt-^=|J?&olSmirUj-^P74_pRKoY zNMVK)PTVHucS)gM3YW4){D2f%r0~+MB7RH?T~e4Wg|oMa`9~4fm*sEHzVn`lIu!X_ zOlmz_7kL?m*E=_&k1xaGFhALYfZTb2<9f6XVEj6kc?9Wa0Rw>N0r5_@lh_WiDHfNc zI;uB`W2@m#^l!20*${9k7M4kaH0uU2U#^GJRIc%6shpH}8%5_L z9zxFbtdQM@zEudwV_H_mbojfUX%Ne2-Rw?Qz;cmuCo2M!vtrhW7in(R&JM$GX01%k zb}|?0?*f#fSLwmG7japBs%HpwI$SrgK?y&F^gjdM2Ydjy1XxElha=esvsk7F_I(QA z0}!6v)2NGU4-#un=jXI+YzruCZoJ@MLvxl>773fh~1m;n#!|7&_;vX!KtIDQoKvk`OZ z48jG#5&(mmR}eQvMW!s8_wP0R?$W;xIWoRdn8NPWJ$@>F9l0kiKYoqa9G742YVPcW z^qU{7`^9}z-_QK=A{+Y7`d>U#Ufj5^YS*s1#@Z)4J+@Yzwo&<3y-`OB*O%?ty9?nk z>_lmr>(&9rkUk5T*%P(rjPoYUgW_b5c2ObD6Dn0Q;+RU{GJs2Em`UKW5GQ^QR8;A- z2(Jf}yKT)L8?4hIF02*hj2$Dp!BIPs8$o&sFdJ955$jPUfKFe|D)NpmAhBV>lN?@f z(3&;Aj0q?_6J7u>YWw&)%bcFp<_^Y)-)V{8qLSZIlpn2yN`4!`?*W^q!uEvokgdGA zgX~UxQn7ZDT+2#6D^WhQwkr8-68VTNV`+BTJRY05&Et03Iyt{OiQgq9KNS`qNl#j{ zmHbF9QBR4PB-gOSCq-JffM&-tqI_r%pyZQ={92pKcF42)U<-VrC;gTrK3PgW*-<{U zr%>{t{R`||<^l(p$>Vj~_Bq?E?VllraKuxOu|qafD|v2>@}&KWk|*`c3drWMQLhns z^hi9mDS7ClJZSHu~cP3i!dTvxg$hZt{tm~Od8scGzZHp}L&>ir z%8&M^N`BJV5oOvVb}r&m2|BWoN6Duv%7^y5N>UO^E*9O z2&c{UxDJ9qOhv|I?IE|#)&{&ZMllvz<@k<69_JJCsO1kuQl)k6JDna&^I;pxrLt1^ zqDx|b8rkm?Mp~YMyAiFcaJ2D;yEASbyCW`5n$=-FwMuL1j@_^5zG(km=HI5G4>tYa z3-x6?3gq+Q0|%Zs*j$aJrOH~~j3(e|OkuS)&kn2AZL@QwtF1DwO61GSnBDGn_wFZbZo7*nzX%`57Q<&} zN3`Buw$IRd$!T|Vcy`U<@z;pfV~vJMo8h#MiPlO{sT?c*-O9DSWZf1KQN2+ah$>(KThq z)1{=Ch)$KXB|?`Bx|Dc2iC;?6-4VJqpv#JBk-^D(SBm2i3cBO@QnK|{lvM%raXd;vqry09aI9R9C&XoRU;g65a{lbE z!r{xYQ>$XfBUsD%R}lx({{YtuS+_y{F@$pf72;M&etKq<_xz-nvN{>RfPE)D2ak|a zWv$q$;oSjNLkb(whZyGHla#lw&034EP|96STN}nlwaxCKbX|J~1#F+w>T&QG-UHd3 zhaEhZ@U#)BY;Lob(Giae?=C_S8fA?5Q=QV!Y5WA2f zsDBv_2hBtFZ%!~_BjTZ&(KR(=Jv&m)n8#>$A`=f1@vl*9&^&1W=1wO33*r%CzikvX zoei2#hRi3=@U09*N~upkrjwzX)L>-_k7NWZQ~kD+AU|zsNrHG56toD>{gzmd3rC5q zc|2&Ib&z4h-qV5&C=kt9gl5DXS$N-hVO?L%jIa~QH~VT%3nq$0RYyfxp_-W>!b_o= zC2NqDM0ViON51n$2D_qJ$1PYDgyahf!)9E;usJYn`s?P5z=UUW*qbUm{~HJ&82eo~ zEKH(&h)08gDIhM~P6Rnof-lDrgijHf@Yb&*ES^?S%px!BRfoOV65X$&bPq-8%!^^~ zV)ztM3l}d&INcwm2%JV<%Uu$exj$$(uo8v(dQ1;ZxKY zQYGf7s6A0S^WsO?*7HYX3x%LX(I&4@@Q^iqDq6*sXf`*PEPSf4KdLN?BkBu`LtYD+ z&bt^LX4ygBNPe*?yKigBcF?;+nte`D>j^^wS$Gi93)lKjP{=}@RWLA&g#QGwg(j5f z3rxVb2%ke4$F=uhh;PQ|^)IL}#y0fzQKnFjyuLmvB>XX=Z^jP!oDip4ZPcqjV$_eJ zn+mBvSB!e~s-xaPYlUzIguy@uS}$Zy#VjDW$@J!FVHz1B^K{TGgm|`poc3_cd$*We zODT)PgT0;5O{AQNV}k()*j>oH3>D%TAr>^B?lUh~Lgv#nwVw`KHof~krb>VJIP1Qp zWs`$8q=fg53%Oi8EAfNHDa7o%5HyeVnWw>Ej2MiC`;S3q;xX#)9%bFPIVkNo%Gr#C zy`#dgW+($Ptt10-#tWHQCiY!IP4t~GC7+%i4BEU z*XsK}jnm3P#bdQ1R4BlGXf;U7S;#y{LJdk<9rJe|Q))FB_8t?S0qbC(S`vpsXoV$o zpwB!B1_Q)kAZ)QvL-qT+`-y=?(q|y-?H6`%29**63a_qDQoKGDR6JH6LWKg{hd#Z1 z=2?i-OXBoO`tWk8w6ei4BE}*8X$mNudN;q2+Vt2|-V>snAoYG}gdc#E zj6)4hU6}@Hi%NJ7X#Zr^pF8Gp@OnWLnZ;82Y8Hhr@G>)?jVrfSc$k;l6gR7-hH4g9 zo6=IQJf*eh8wA7qiU}=m)d?+R&fxpQIZW)S!Yv;_Z&*?VDfm2gmaHB!3-_8A(tR(X zk&sxt*F2Z*`ywS|+omdQYo79VPqFTs6jt?4315UPn6ECV{I+p!O!H}ONiU|gS&Pt% zY{##0D1G5prLAU#!^og*-T{PhR>=s}%&umYR3@Z>`igtJmcj->{VxjBlwQF!d~W~J z5(z#fETcroJQXz0P&0?UGr|(zHBSjYlyhJ$nqaSHt(h2WP5Qehas_S&Q{CoY!X_u?X$J`zJFjf(wz*GBWXO!ZVLqggtWRZbWq7 zF)XLQ@a^B6vj_VY!KcrB3?pU4(vmFXaJtm=*8`Lhm`Fb=pc}R%JtTYx`RqZn?@Ztb zMrJawAufbsts(E z3yAt(BcFAv(f9d+EE1d|tng>3FBq6alqMAlSxZKP@TWh9il<2G(4`Y_j@z-%rDa?L z`o5ZR!G`esPe{+?hlCrE_=I|1k0LQjO^^t&dJ-xW;Qk-1=U+piVBj=W0zE0@dVX#G z3VK$7p7iWSsOT2xGX`LIpD9En7#ROB9DbMk^Dm4duIOOsLmOq{4V?HSCnkUXg<&5LuCelh)-QOxBi z7o-0fzQ-5aj3ni47TfNy-(Q0(w_gt;ut_N>W83)cbF1jjadG-{T#Ww8Hbx&S=XH_( zT$R~K`zCV?hGDGki=;a}mI|%l4dq1L3($kb^?W+Sf)Y8nuk-#@KTlQ2;8{PVoMCjTGWD~#&7B4-gU1=`Y&-@A#{vR`_FM486k@M z9LJFrB-~oZTAC)YGx{yE{F9BeX{dxSf9^0Cu@%0Z(uGLJO_v{V>Wnx0`e?xuZUjZ_ zJEQp5!zt{18p=$+2-l0>#zHLa95_pnJ}E&Y);)ndAK>$VA;7DEw*Wr``~t87*jU2Y zU4Q~W1)v_#0_Xxf3m5>5044!5fcF8*fDZxJZO3nP0R@0kKqJ5n@By9!yaX5n{5@b6 zumJd1fU1D4uBJ&MY;q~31|Qu1h@fRfM)^Zlwasj`apTrp?3Pn zgdJ$Mwj8i`c$(?BRy?OuoDE8t=xL-(6MtsOxmcY~9B3`jD`{{(7&(s=YjWFKH8Mrq ziJ?^6YG;vA{`{LCex4|uJ<2-p+BF3*iNr_DkDk-YJlqFbMKV~S(;3yf-0@ha=P{Hv z*PD0M9jL9^^~VQLdQbF}_X;PNT$(B^KWVLSxpsQnaK_!<#!rl8>F{9^H!-J`PKYHr zqt@kTy^7lR;IkBbju6pEI!#46NdCCn6D#X~^V-}`R<(I>DBOIA3h}zkM-JIKJmRqw zPN*aDpdF$q*bY|VO(&MxX%Wjo4NgVp;L;g4uie#-E-2R!dloHW<Id+pnAkQl z1~rN(u@8ze@aC0zCABDtEZSE*{gzVlxpsM#(yq$WX&l$Ldg*YFmsXy+msiQXy}ZhH zgr5U)8pT;R=_Wh*`~Bt8=x_9C?w>;XEI0lq zNQt955-wqZgar~7NLV0YfrJGT7D!kiVS$7N5*A2UAYp-o1rioWSRi46gar~7NLV0Y zfrJGT7D!kiVS$7N5*A2UAYp<3It$3>>&ZAHU!TN$4fv)7--P>00T~c$D?*Y^rlYg; zB&2b0zbd}x3izQ_@O0nLICzm$@~89^d2sRgv%smFQ9r(b8>J5c;Q9}V_kPIfVWd}5 zqWKx@0IR}Z1;TQ+o7LbO<~>O7Vs+eqfL)8&L%^C@H85o&Thu{c)6}zCl&eSH9>l6p zei!Gr3pai3=9I6gKKM}lI)N-hP7cKsi3xFITm?_n)fHfG0NV&rld zm8#>ninXy$k+O0*jQAf7l3+Qy1I^03 z>=1I4e8d_kpCt6Ky#UgdK7ZQA)}ySfeLZS(10U5nEXYN#?^`ZYnFwNt{G0U71HNY~jKm=}04MH!Nm`9c{qb(T{AL zZ>J<1R}dbJxA=RZYHD}Z5r<94qwzv+2LR2=9rY{vxK2v)`GoqtAYO2>TUXPr%BAummmS_+ZCU$VK9jyG9IR{3A%s;3fmopX?^rO+*w= z!bk!e$);c`;kRr~;&YFjmh0dIaUS(-h{5j&T)hsuKO@#r-Lh*!mK-Nua{S|jWarAb zGW~IB;zM?j`60^V?6c2WoPRfyITFU5WSQ(CIY0g$PJAuOUHn~WR*6siJvU?vDnM5( zkelE>+bP>7er!-S(Z}CoL>CosJ_zNqVmgU8M-#^wVH~I{a>(ef#!N zxsT(jQTF4|&47+p6(ueGKunpAkAs}gCGmJ=dJ#0eaeS5e6z{)6J@S~1r>At+Rd~u} zQWd;&6mdEKlY|{tDNkc^>?$;$q`uQ}I+m`&JB=N0in;#}eFMdKyQLP|zJ5T?#ASeT z|K3n|LqLI!&|lBiKfB7kPm#W+Vt3Tj9VxO7DpvXz@?9x}OJnywAl>aGUVEbGr`NI~ zopgsvgx@vn$u#jkm1uvymSuHGcdIDq?pYDPbT zSi^qyChmdRhnt1|JIx8VAfz^Z?GT8=D;h&<-J%CJ&OzGAc-^Y2oACV)wlZ~bU zmjG%Bk7&XrERe9kf0hL>snAwSrAg7GYO*xhnjFnGjb3BaRA{O-b(#iEqvoK-p=r~2 zG*4-KnrAh=n&&jfG%sp~HGicU)%=a-wB`-Xl;*pdS~ z8QL4Q+1fj_TeZ1by|!3es@E@_X`o^ZWA$@{i>Y<`3tOsFPtdMD%w<(U8F9`DcV}JP_$fhv1p~JvDj7I zQS2!`THI6IU;IMxNbxJhv&CnN7m9ybyi)x8;%tN3u+@-nC^eW3E<=amh#_F;H#~0` zGmIN13~w9G8s-g`49u8fyuqk8ZZTSnb;d@c)95iiX&f*fGY%PFF^(HwGcFmIjVs2r zrVP^!CcUZ9RBEa*HJJ9Bx=cP(kLh{Skm-bJ!Zc}`Hk~sqn$DXtO0r6_OYSbwmlTyW zlr)xDOCB%jDtWqOuwYv9yJ!28_676Qu)}iGZwH~zBpmtO{sXeP*(lT9^ zZmZ6ytJ5{=I&??Saz5Rcbbo<%8`YiCeM|S2?w@osXt!BI2i^q$nir+0xGt?QLGV~ZeZ+Ox0 zb;C~#_rP+G8m+L~|1f^j`0qxwDHnFCFzqu1O*5wIk`pBxw&!mD%kAIaPA@tvQ1Pz3 zs=S%Ja9*9}Nlm}zF5Vj-)b7{5sNJZ`*4?4g>dd-lb@}=({r`kKL;7#%FX~nIv%+5$ zUn)*ETxZx~up8FXB9(9n3nVO%ut35B2@51Fkg!0)0tpKwERe9k|ECt%Ri?oc67JG? z=y4OhyTku8U~#t}b~m@GcRF3R&c+(&A$NOcyWOL%cXoQ4UFuqo*XnF1D*ADJXQSfn Ob|fzTy1v7Dko{jXU}hHp literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.pdb b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.pdb new file mode 100644 index 0000000000000000000000000000000000000000..1707568f526fbdcf7c9e19044b94aa1df85e0130 GIT binary patch literal 91136 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 z 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 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbp b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbp new file mode 100644 index 0000000..dff22ba --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbp @@ -0,0 +1,39 @@ +Type=OleDll +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINNT\System32\stdole2.tlb#OLE Automation +Class=ComPrinting; ComPrinting.cls +Startup="(None)" +HelpFile="" +Title="ComPrintUtils" +ExeName32="ComPrintUtils.dll" +Command32="" +Name="ComPrintUtils" +HelpContextID="0" +CompatibleMode="2" +CompatibleEXE32="Compatibility\ComPrintUtils.dll" +VersionCompatible32="1" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="Sleek Software Ltd" +CompilationType=0 +OptimizationType=2 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=-1 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=1 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 +ThreadingModel=1 +DebugStartupOption=0 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbw b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbw new file mode 100644 index 0000000..a6718a9 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrintUtils.vbw @@ -0,0 +1 @@ +ComPrinting = 23, 23, 800, 671, Z diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrinting.cls b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrinting.cls new file mode 100644 index 0000000..1321832 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/ComPrinting.cls @@ -0,0 +1,259 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True + Persistable = 0 'NotPersistable + DataBindingBehavior = 0 'vbNone + DataSourceBehavior = 0 'vbNone + MTSTransactionMode = 0 'NotAnMTSObject +END +Attribute VB_Name = "ComPrinting" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = True +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = True +Option Explicit +Option Base 0 + +Private Type PALETTEENTRY + peRed As Byte + peGreen As Byte + peBlue As Byte + peFlags As Byte +End Type + +Private Type LOGPALETTE + palVersion As Integer + palNumEntries As Integer + palPalEntry(255) As PALETTEENTRY ' Enough for 256 colors. +End Type + +Private Type GUID + Data1 As Long + Data2 As Integer + Data3 As Integer + Data4(7) As Byte +End Type + +Private Const RASTERCAPS As Long = 38 +Private Const RC_PALETTE As Long = &H100 +Private Const SIZEPALETTE As Long = 104 + +Private Type RECT + Left As Long + Top As Long + Right As Long + Bottom As Long +End Type + +Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Long) As Long +Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Long, _ + ByVal nWidth As Long, _ + ByVal nHeight As Long) As Long +Private Declare Function GetDeviceCaps Lib "GDI32" (ByVal hDC As Long, ByVal iCapability As Long) As Long +Private Declare Function GetSystemPaletteEntries Lib "GDI32" (ByVal hDC As Long, _ + ByVal wStartIndex As Long, ByVal wNumEntries As Long, _ + lpPaletteEntries As PALETTEENTRY) As Long +Private Declare Function CreatePalette Lib "GDI32" (lpLogPalette As LOGPALETTE) As Long +Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal hObject As Long) As Long +Private Declare Function BitBlt Lib "GDI32" (ByVal hDCDest As Long, ByVal XDest As Long, _ + ByVal YDest As Long, ByVal nWidth As Long, _ + ByVal nHeight As Long, ByVal hDCSrc As Long, _ + ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop As Long) As Long +Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Long) As Long +Private Declare Function GetForegroundWindow Lib "USER32" () As Long +Private Declare Function SelectPalette Lib "GDI32" (ByVal hDC As Long, ByVal hPalette As Long, _ + ByVal bForceBackground As Long) As Long +Private Declare Function RealizePalette Lib "GDI32" (ByVal hDC As Long) As Long +Private Declare Function GetWindowDC Lib "USER32" (ByVal hWnd As Long) As Long +Private Declare Function GetDC Lib "USER32" (ByVal hWnd As Long) As Long +Private Declare Function GetWindowRect Lib "USER32" (ByVal hWnd As Long, lpRect As RECT) As Long +Private Declare Function ReleaseDC Lib "USER32" (ByVal hWnd As Long, ByVal hDC As Long) As Long +Private Declare Function GetDesktopWindow Lib "USER32" () As Long + +Private Type PicBmp + Size As Long + Type As Long + hBmp As Long + hPal As Long + Reserved As Long +End Type + +Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" _ + (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, _ + IPic As IPicture) As Long + +Public Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture +'Creates a bitmap type picture object from a bitmap and palette. +Dim r As Long, Pic As PicBmp, IPic As IPicture, IID_IDispatch As GUID + +'Fill in with IDispatch Interface ID. +With IID_IDispatch + .Data1 = &H20400 + .Data4(0) = &HC0 + .Data4(7) = &H46 +End With + +'Fill Pic with necessary parts. +With Pic + .Size = Len(Pic) ' Length of structure. + .Type = vbPicTypeBitmap ' Type of Picture (bitmap). + .hBmp = hBmp ' Handle to bitmap. + .hPal = hPal ' Handle to palette (may be null). +End With + +'Create picture object. +r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic) + +'Return the new Picture object. +Set CreateBitmapPicture = IPic + +End Function + +Public Function CaptureWindow(ByVal hWndSrc As Long, ByVal Client As Boolean, _ + ByVal LeftSrc As Long, ByVal TopSrc As Long, _ + ByVal WidthSrc As Long, ByVal HeightSrc As Long) As Picture +'Captures any portion of a window. +Dim hDCMemory As Long, hBmp As Long, hBmpPrev As Long, r As Long +Dim hDCSrc As Long, hPal As Long, hPalPrev As Long, RasterCapsScrn As Long +Dim HasPaletteScrn As Long, PaletteSizeScrn As Long, LogPal As LOGPALETTE + +'Depending on the value of Client, get the proper device context. +If Client Then + hDCSrc = GetDC(hWndSrc) 'Get device context for client area. +Else + hDCSrc = GetWindowDC(hWndSrc) 'Get device context for entire window. +End If + +'Create a memory device context for the copy process. +hDCMemory = CreateCompatibleDC(hDCSrc) +'Create a bitmap and place it in the memory DC. +hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc) +hBmpPrev = SelectObject(hDCMemory, hBmp) + +'Get screen properties. +RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS) 'Raster capabilities. +HasPaletteScrn = RasterCapsScrn And RC_PALETTE 'Palette support. +PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE) 'Size of palette. + +'If the screen has a palette make a copy and realize it. +If HasPaletteScrn And (PaletteSizeScrn = 256) Then + 'Create a copy of the system palette. + LogPal.palVersion = &H300 + LogPal.palNumEntries = 256 + r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0)) + hPal = CreatePalette(LogPal) + ' Select the new palette into the memory DC and realize it. + hPalPrev = SelectPalette(hDCMemory, hPal, 0) + r = RealizePalette(hDCMemory) +End If + +'Copy the on-screen image into the memory DC. +r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy) + +'Remove the new copy of the on-screen image. +hBmp = SelectObject(hDCMemory, hBmpPrev) + +'If the screen has a palette get back the palette that was selected in previously. +If HasPaletteScrn And (PaletteSizeScrn = 256) Then + hPal = SelectPalette(hDCMemory, hPalPrev, 0) +End If + +'Release the device context resources back to the system. +r = DeleteDC(hDCMemory) +r = ReleaseDC(hWndSrc, hDCSrc) + +'Call CreateBitmapPicture to create a picture object from the +'bitmap and palette handles. Then return the resulting picture object. +Set CaptureWindow = CreateBitmapPicture(hBmp, hPal) + +End Function + +Public Function CaptureScreen() As Picture +'Captures the entire screen. +Dim hWndScreen As Long + +' Get a handle to the desktop window. +hWndScreen = GetDesktopWindow() + +' Call CaptureWindow to capture the entire desktop give the handle +' and return the resulting Picture object. + +Set CaptureScreen = CaptureWindow(hWndScreen, False, 0, 0, _ + Screen.Width \ Screen.TwipsPerPixelX, _ + Screen.Height \ Screen.TwipsPerPixelY) + +End Function + +Public Function CaptureForm(ByVal WindowHandle As Long) As Picture +'Captures an entire form including title bar and border. +Dim r As Long, RectActive As RECT + +'Get the dimensions of the window. +r = GetWindowRect(WindowHandle, RectActive) + +'Call CaptureWindow to capture the active window given its +'handle and return the Resulting Picture object. +Set CaptureForm = CaptureWindow(WindowHandle, False, 0, 0, _ + RectActive.Right - RectActive.Left, _ + RectActive.Bottom - RectActive.Top) + +End Function + +Public Function CaptureActiveWindow() As Picture +'Captures the currently active window on the screen. +Dim hWndActive As Long, r As Long, RectActive As RECT + +'Get a handle to the active/foreground window. +hWndActive = GetForegroundWindow() + +'Get the dimensions of the window. +r = GetWindowRect(hWndActive, RectActive) + +'Call CaptureWindow to capture the active window given its +'handle and return the Resulting Picture object. +Set CaptureActiveWindow = CaptureWindow(hWndActive, False, 0, 0, _ + RectActive.Right - RectActive.Left, _ + RectActive.Bottom - RectActive.Top) + +End Function + +Public Sub PrintPictureToFitPage(ByRef Pic As Picture) +'Prints a Picture object as big as possible. +Const vbHiMetric As Integer = 8 +Dim PicRatio As Double, PrnWidth As Double, PrnHeight As Double +Dim PrnRatio As Double, PrnPicWidth As Double, PrnPicHeight As Double + +'Determine if picture should be printed in landscape or portrait +'and set the orientation. +If Pic.Height >= Pic.Width Then + Printer.Orientation = vbPRORPortrait 'Taller than wide. +Else + Printer.Orientation = vbPRORLandscape 'Wider than tall. +End If + +'Calculate device independent Width-to-Height ratio for picture. +PicRatio = Pic.Width / Pic.Height + +'Calculate the dimentions of the printable area in HiMetric. +With Printer + + 'Calculate device independent Width to Height ratio for printer. + PrnWidth = .ScaleX(.ScaleWidth, .ScaleMode, vbHiMetric) + PrnHeight = .ScaleY(.ScaleHeight, .ScaleMode, vbHiMetric) + PrnRatio = PrnWidth / PrnHeight + + 'Scale the output to the printable area. + If PicRatio >= PrnRatio Then + PrnPicWidth = .ScaleX(PrnWidth, vbHiMetric, .ScaleMode) + PrnPicHeight = .ScaleY(PrnWidth / PicRatio, vbHiMetric, .ScaleMode) + Else + PrnPicHeight = .ScaleY(PrnHeight, vbHiMetric, .ScaleMode) + PrnPicWidth = .ScaleX(PrnHeight * PicRatio, vbHiMetric, .ScaleMode) + End If + +End With + +'Print the picture using the PaintPicture method. +Printer.PaintPicture Pic, 0, 0, PrnPicWidth, PrnPicHeight + +End Sub diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/Compatibility/ComPrintUtils.dll b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/ComPrinting/Compatibility/ComPrintUtils.dll new file mode 100644 index 0000000000000000000000000000000000000000..82452cc63252427329513538731340524df4c247 GIT binary patch literal 32878 zcmeHQe_T}8mA@#OQ87S6T1-eBEp|;}Eb{}3FoP%zN)~h?M6toj$PCU*h94PbEJ>xE zbet^n8EM%p*(I$}+z;u}gzkql*wQW8kc3pSr74?|t|r*9mTjNaSem+t*>yAfJ@>sg z^Jc`DZnyi{KjtRq-h0kH_uO;Nz3<*T?>?@TpYLJ|8Dq(SaG0@Sq!fyI{L#@kif>%` z4>z)*B|lj;oK*3XRn>M!tGdPAyx(nURM%UYnwmZ8eKxh*+oX0hsY|z4sT-TEw)M-G zFU^)jzkSbZZ+-Kw-VPZuKlk??-vIuu{@Xlt>%YU(R(&5&cR1?p#2c@f*~C~yQZoDd zJr5e?vKe;cs%1%wMPqVAYTqZ2rUA?xPv?2yWPcKXQXYJWL4V>bV+%L|2>$00Pes&M z%-GYQmKqpaOT~4J9Z8`~Txelz9UMJ_x><2W^PzQUR80lopPr9FqOJGX+C0eLsS$Zu zv6Lc_gBn_`w^}?F5H3?^n*oq3`2ZO)6f-uu-ref12g+@zLx%V$RfJ-AbiLc=Y6hd5 zr4aAz>lAH*8b&poUL;M&Q(PN&a}E?&i>K?XY=-_ooh|U zoNpKhoOc?IIU7;-b`jEz1J10k4>;d59&?5!k2-Js@M-6ol4H*N!K2PSkeB0r#)sK3AcJI?Tf&p3B~ZNT|TbIZ_C=NRfW#;|d;+^Ei#i zwLI?UaR-kxc|6SH!#q~;IGe{)JRaroIv%TeY~}G*9=mv4%Huj7_wsm<#{)d>@^>PY-sr3@X>M$> zATqlhO`iKa4p%F4G%=o8ZzaAiky(1r!`RQW?b+_fN4Ir+wy$WFKl^@?(kt;q61>zf zLV+rq`+&_|<(1_-n)b8hOLy8nzui6R{q{@6e`Bl={_ESTEqDvXM$|Mu5LSw5&+TGb zA*CuQ9k@-TyQFljl+I*H^`x{|O6P7B>4Q>gmr}KqPTnGxcSvbI(w&=gSIw=wGhz;9 zz8r%sWlJJ2!|;0NlNjT3Fc|J9e-KbO2e99S-T@4Mf~B_se-zLScpMNPWIu`h5R0)m zl-j7s6rZj9Ph)(GUC(+!Q<+&hJ){{oi{)}Vgj2nm6(YSx!s{fyS_MvhlETth2WW#B zTqGm&t-uXGf9+@VKcPH`s2Cq&O!>de5=|vGJKApp6k}BBQQCpLtUodLqRr9gKE-+@ z`Z(}60A~Te1zZ6vA)h0V?ng3Mx(EJ!7~lgCox&ro>|}Z%&b@!50@;Mo87a9lLxId? zDv%FXD3F!6lDtcBp6v6{Z0Jw(7~b)bzZ=rgF48+$E!)IOSOHQqbF*f)AF+isGBqn> z4(4Ju){3%9HbH>iiz8d}%<~VU8Pi9HU z$a5q)c>(g6CJ@p}icp5D&qP!MK-i%V75S2&kmr@>P zJhsK=DYYGN)Z0odE#xoKYgCeRK`G}_R1U3&N;#MkNlw*6tsYyW+2XQ!JT_C4$L+AS za(ODOqh#l0r98}CvYoWfD&>)0qMed3Nv|47PO`MtfXt4kMCH)Bt(3DIl{LE?xxBS_M#w*FmGW|;@@Su;lt=p9S7q8k1B^x;d=FW+{qAOOlXaJ)$=duy z)`mKVB)NK}TtifDPn=xxyXdc2zfVeXij{Jc6Ubx6RfBxfDpZSxI(_Qg&NZHtkQ9vX`RX4vY&+t2i)7MlpEE zM+cQM4n<|qURNmt%;GcL`hcgoMe2M>pF@(Y4yCNFs4Ut)D`nC1((JO~{8^`6Z*^gY zWDGkTw%uiu9!Ez#4czi3tHUilPm_=_E49(?QIXq^|ej9jGSTSNTB(cAa z?B|IhEx(|B5+a&_a4}1slf75ZY{B(%Q%kduFB@wWVO0&4XDp)<=UMVx0K(Z=Xq+Q4}Ox$%k?s^ zD6fhpOkP%ofsPs#j#eUxv}l_ZR+&~V%H?%TZg;bLJAT_WxG)_>Ib|);cDLES zNNXmqzp2Huy`iDih88)#)op9_x;!OzTm1u&5z&KmQ{p9-R+{c3<;cSqq6}oj;lz~_ zY4??D%F!rqV~efH=7ujf(?r@TGC>gib|QHr*q2c{Af+`(>!du<l!^ zmz=aF!nXi?LOh=&PnC2>gl{4EF2(byjJ)0Cq`M=0$>5ud=ab}RC9R6^C4q14>Nq=8 z3sneQM}{EpO({>GK`a7{OTJd2?kw8Lh?7wao@6{nHTKIl;aBqdiKgF#@}8dTQZ^^kM=)OKcWyr!wYd?y zI`lhMP)dE6)A|7eRJNTZ4!2>gE?wYrqQ5jFk~7$i5^%F814c*?E;v{7yI= zH1#(8V3Y~#kq=c4F035t*rYmX8loMI%zT8HZ{o~H8h%j5gd`=i-!_PrP6bT^A=AJ~ zzWt$0F^vi6G!Uvx32s&KOj>Yjir+Q>_7Sr)3F?_q(JbuyfbbM?)E*%E=(oE1}8@)*vmRZ0{HD zfAys_c1^bqo3SbgtIsPOn|2MyX2Y?mFPPE-qn=e^Z;Ej5`%peG^q=9dFpK&jo(%@Z zK{&sX80OxKFuWYc5I#X{!Z&^&;W)0~m_k|Ds}6g!B)*rTd=EwWOtWF{Z1@Cm3*(m} zl6FNo0wXAMenyfq7L}rl@|dPWrs*}bXa)n5#BP_^ACIypE7)grqmQ)D5Pxd-==-Nq zUlZi{}c>)s< zBXPVJI@8n)l9DQ&PE@ztRU|s zzu1-Sw>h)y^lp%5pA*!3!l*zZk05*g2LDr(vJe*)4DwZf~KKP(*y(zk$|CaR}X9^8H4`zLDqhoop8IAix~=g2ZbBBm^w)e zrRX>^`Xj75`KvgqYN>jxRYVE}cnqrsI!)71YJij)kgV$WxA!Zp8VGy)g*J!|25Lwi ztfCZFO$SYVou+XJ=pzAr;Vz$KRjPXnzBm6By2Llz7I+VgHETP?$n9y?OozOz2G`>Ha#>Ac?{094Nn#Z!C1)s-Gk=H{e;V#oms_$FqBp|bQnWj^H zPY@#eHbv=M)40EVoV9;S;Z^Ur@B`?A`RaVK-!{yhX&T|4^kQ0@G7AGJw*L%=&gXAc z`f5t}3lz{c?<+{-ypk5GoSM%oDNMK<+}GUWIrD3T;(t}RruZ7J;d49fFN3CWAq^r! zrtzR@lDawUofJm+MtEF!53+a(yhRi2^}ID1ti^l)6{Pkz7D#7EX^z&MkX|eLi{%2g*|4$Ef+Q;qkFY*F7?S5 z-#^_D?3{(1PE!w_lzy{wfl$i%Qc_VllpviYK(1s^-0jMFa zgkr5Cos=u^t*9b0Nh|O;7-$xZFk%k9Tv42Hivi)Q`rfkgw1Nq&Vd-sMvamRv33$E6yWh6ZRby6P%tn;jlfPyxt*__xrUt%@ROZS zB2^3vjG6mE;bW!-nP6b}!*KX59-nz~5P8J_!x&mGGvCFT2RJjuXP)e%I6zhWMx2Ua zL#CQOLB#Xv;S>ExvHL_UY=??x_RPLL)4x15a2Y>*6+`b;l=;U}t~;t;0bh)_dwDxo zkwO6~z`pK}990&yhwU{r0&i1_`C>R2m_UxETKq&nt}`%=*esa9?PPX3r3{}S5`Q*- zKP~zBb!1NOkscy?Jqq451uxuuQs(VNrXd)pgZEDIZ5cguC;8G(FIi9W<&$VM$p87R z*v==~^PEz8(5}M!V_DY@v#^D?Uu+gWgUp#dSUoy0J4iFcLSeP2 z9`sIC=#8>U$=kbh>+v^a{jix@j&nw=*6XzEu7F_)uW zjQuBhABufOn({u2?RWU^r;y5h(vJ*$Qq23EtdRToozwH!&uMY?b6Sl3%09*ztLJTz z{oItPNdGS26g-Bpw$GC7^s`jxglrfm+Mb6IEUpJMls}%C0t9d~UqohJGZ%C9+oD4h z!}i@%WO}Tbzu>g|DBnW6vYTP%LEaY3ydRk}dnOcS5(Q?Sdz|;z*#DrvR&ohgZ!bfS zc?~gg1>2$u!jL;SttN(cGpFT8X;&HY960=AFyt|0Vhte*@2|1x%GpTI9Ko3RLwjZ$ zmjr|U44HWia{bHI1F(kEYNE=+$Wl(rkJ4f%8T8CqaBzcOMCQyM}2Q{x=*x;&XiAIJpE*JYNYW;l;}f4lryHOGf%3a#>qe?VmzrJO`Lg>anfbX&P2NI zic>`jC^s!Vs2R7u6Dbtn@gKe7{PyRx;&f9ZSaB%jQ~bp@uJ-<$oEGc-A90$(`{-;d;<9GfVF^pz-GV>KrNsFKq3C`TKATe z*EiD#DQvIB>fGDV;<50f_V}|w>EteY8c8+iOf>$?l1s5V4(x5r(<^y!J{UQV6kBrJ z8Z|OU+=-zid%m;CsC@q257$9Ddz5Y9t!wh&5=o9&9zCa(Ww`e?ifr&gE55ar`Ah5% zw0a%@X4+}mR=u~XeA}PzMeQBYQ{HQwU~+BBwfv;D)a5GkHsOrBxrv_`%i7`NB<^C) zE1eKadPcp=&w3TDOP?=9G?Y$LQ4g9w=*HocQrCOEHuppP`>O^^Jw}VzQ>M0hTZ>0L zmcj{jL?84+6oc>J72b7H|C+^mFoSbZpG#-lymePIhM?R+>{+x#l~0>xukUTtX~n*g zDQHn7iDOXIfp@PoDyc_FWzoOl>9>T*=h`LZO1~;kr*T~0=%vFwUR!zQUQ#ZP_L6d2 z8$So+Jc_e!vP};1_xY2>(Z9i`xxXLyFkl?;51(f2Yk)pL8{jNx?*fuH;duv8O`H|S zewW8T0>OAGu{7P+}#{u||n}5ztl>3_SMUs+6 zZ6rd%0|^f#Jdp4}!UG8pBs`GtK*9qF4k}WH zwd0#Rx@E~nm|S0`cU*(sI}e@i`xz!72ueAGk5hyYPd^2k+Jg4+h1?+OQ|PJ}?-G&m zKH!&C(egC57x(;>A^0Ki9m>PNU2Cpx2ZEc`bpiL|1Gq5bk z5pM#s;yy3By-O)4{uZz3ZC$u8iY-N5S?8T-*$qphHqyOJIb2)1?~iz6+ljBCq`(rN>7(=9BNZ8I$!zsbxw&`Ec!MC2`I4=oq(TZxY68(79c>FyN;-<_Amdsw1;D)vvM@|`Ty_GQ?-gx&L8 z*@c^jzCv@tEl8=)C{Ly`VDe}|vMf}UyG9QgKSq{wwa-N=F zIZr;8^YmO%UfEVQW-7U@HP|CADWx4kEKd$Jm3i*KZe&U6LO#Ed{xsjj^V5D)=D(ZE z#Ep@0GP7~Zk<6nZp5#Rl9(o?dwQgY@-Je8vH_^RJbmtP?3q|uI%}+Ep6a(lPr}>Bi z`JH?;0k{HCOLSxtA>o092mVwZph*Rro@9+mlcLGcWNETB>oj_eK~t)!&{S(`G_{(2 z8oQ=RCqh3^l6^f3~Iio8PU9?8P~j~nbN$enbG`8b3ya2=CbBP zO|o{WHck6UZI*VmcCB{3R=|*&8x(VHsZdy01yP&(ITdObCZ`D`md-eVL zA^os^R6nUdrJvCY`Z@h&eR8fUw&xxPJ)GN>+nw8!dnC6nw?B6vcQAJ- zHzO}APo1|mZ(UwaUTMBLzdFAz|6u;%{NDWj{Neo3{EQ8m8?rX2H)L;EyJ2L**nY6~m{9R-IAx(kjM3=}+DFj+8FFkNu2;8MW{1?s}=!gYlk3QG&i3+;uj zLQml%g@+6OvT(3)sBon4)xxR5(}i<|mkO^GE-_>nRv3y6rG^T_ZiCg}F!UIX82Sv) z8b%B+8fFZ$h6{!d49UhN#qdBwaze}1c8m7(AW}@%Z+HCaRI&BX6FJEiWR%`9(u`X?& zc33;1ozY&>s&rX8z0ROB>uPkhx;ov%y04(`x^$20zM=b;?it-6`YuJErq9r4>a+A} z{aU>q{btrz>+O1%zD56I{YCvNxzo9;^S0!*ZFpfrW`VJwy5La3V+B10{RKZPc&9*L z_<8uUsqoA2F~Agm<00A2ib02majxv%7h}+tR2mbGU4+wUv%~cXMlVgGas7(dxCh)Kwm@ j)zM5`^vCn9wTidfl;{6OjKk&dJQOJr|EaYW>pu41$E(7p literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/FormInterop.resx b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/FormInterop.resx new file mode 100644 index 0000000..0a2c16a --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/FormInterop.resx @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + Form1 + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/FormInterop.vb b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/FormInterop.vb new file mode 100644 index 0000000..99f4c07 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/FormInterop.vb @@ -0,0 +1,67 @@ +Option Strict On + +Public Class Form1 + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents cmdTest As System.Windows.Forms.Button + Private Sub InitializeComponent() + Me.cmdTest = New System.Windows.Forms.Button() + Me.SuspendLayout() + ' + 'cmdTest + ' + Me.cmdTest.Location = New System.Drawing.Point(64, 104) + Me.cmdTest.Name = "cmdTest" + Me.cmdTest.Size = New System.Drawing.Size(152, 80) + Me.cmdTest.TabIndex = 0 + Me.cmdTest.Text = "Test debug of VB .NET app calling VB6 component" + ' + 'Form1 + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(292, 272) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.cmdTest}) + Me.Name = "Form1" + Me.Text = "Interop debugging" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub cmdTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdTest.Click + Dim DebugTest As New ComPrintUtils.ComPrinting() + DebugTest.PrintPictureToFitPage(DebugTest.CaptureForm(Me.Handle.ToInt32)) + System.Runtime.InteropServices.Marshal.ReleaseComObject(DebugTest) + DebugTest = Nothing + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.sln b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.sln new file mode 100644 index 0000000..ac3e57d --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InteropDebug", "InteropDebug.vbproj", "{BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Debug.ActiveCfg = Debug|.NET + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Debug.Build.0 = Debug|.NET + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Release.ActiveCfg = Release|.NET + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.sln.old b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.sln.old new file mode 100644 index 0000000..27f661e --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InteropDebug", "InteropDebug.vbproj", "{BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Debug.ActiveCfg = Debug|.NET + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Debug.Build.0 = Debug|.NET + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Release.ActiveCfg = Release|.NET + {BB1951AD-EA5D-4FCC-B2EE-DADFBB15129F}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.suo b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.suo new file mode 100644 index 0000000000000000000000000000000000000000..8dab2d51d4d4934fcb71ec8f06e3007f1d1ed6f1 GIT binary patch literal 8704 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 SXSi0)SwF*lF}l5Og#W)4r`m4- literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj new file mode 100644 index 0000000..fa18a59 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj.user b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj.user new file mode 100644 index 0000000..19b27d4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/InteropDebug.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/obj/Debug/InteropDebug.Form1.resources b/Source/VisualStudio2003/Chapter11/Vb7UsingVb6Component/obj/Debug/InteropDebug.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..0c0f38286f0b1dc1743c3aa8711631e7f1e604a0 GIT binary patch literal 643 zcmb_Yy-EW?5S|Djf)*BnSb2zza4dJ6F{Zd8B-m&q$g3#$2zItU zfQ3)sGw2(rvv_J@VROTN?99%$GxN>!)7xVU0PYC8$wC_xY>HZ1m81UgrkEC}d{5|H zs*-2=FVj|r3;h0?p!sF{-YF{0Wfg}kU{MqVEbzUdEsa$eS7?n&OW&K=tmOF-E@tuy zt2pcR(r(_}5Bt#`1_ymNQ+tHb#-58W?JpS%cd5z6j0e znhZvCUf*wTqK$`p5(t}w7m~Za0|qXEg9ZjCkb(eodDza$Enr5WCJKWwNQya}6A%== vb{wyLD3u6X;8yoR=5A-JZjZ-JifFsiTmS6MaXQy&X>mS>Wj6z?0jzui`5C`t literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter12/SqlDebug/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter12/SqlDebug/AssemblyInfo.vb new file mode 100644 index 0000000..d837e52 --- /dev/null +++ b/Source/VisualStudio2003/Chapter12/SqlDebug/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.resx b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.resx new file mode 100644 index 0000000..7923464 --- /dev/null +++ b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.resx @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + SqlDebug + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.sln b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.sln new file mode 100644 index 0000000..1cd9d7c --- /dev/null +++ b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SqlDebug", "SqlDebug.vbproj", "{25E00B17-05B1-4234-AC07-5C21C167C48C}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Debug.ActiveCfg = Debug|.NET + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Debug.Build.0 = Debug|.NET + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Release.ActiveCfg = Release|.NET + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.sln.old b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.sln.old new file mode 100644 index 0000000..22ed41b --- /dev/null +++ b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SqlDebug", "SqlDebug.vbproj", "{25E00B17-05B1-4234-AC07-5C21C167C48C}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Debug.ActiveCfg = Debug|.NET + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Debug.Build.0 = Debug|.NET + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Release.ActiveCfg = Release|.NET + {25E00B17-05B1-4234-AC07-5C21C167C48C}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.suo b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.suo new file mode 100644 index 0000000000000000000000000000000000000000..c14bd86a24f0c766b13054e396955b29f89f7f80 GIT binary patch literal 8192 zcmeHLTWl0n82-1dQV( zf6jmY+c{S*um0)6$LoKV3fLp{a&=~@-0Go6P$nu^B~ph1|F6!>%s5056mP-}B!Pc0 z*9LbFx!1P<8-YuJOM%OQ%Ye55R{)!U+;8GdxbY=0BsQL+7&0I^eDgAm9S#p`p)pzt zv%aB9_bYFu&)ZF3Me0%iB^3*BMB-AA6EY|ne2a1vZws@~^n%l@>ia>di>yX1^_BCe z+OVR6I!@RRPLx1a5_q4MVa5F2{fkKCd6%TwSPlc*fRs%@E6 z{EOIye)WIKl}ELiY<2n5F2nNo`fHZy$GIokuIUFT&#f*^+dsEV`+${h9c8ck>F-+5 z?gFj@-VIz2ya#wMa0757kZle3yUG2M<_Dxdf;QWL&A=95E3ggN4%B@8`rf1kOW+Ta zUcPokPG*vpVcNN3-p(qMZHUH;aSpp|G&X1qCy!YZ>UTvn6VKXdV<43&+Icou z6|)nWtYwT?31hFFpHSVGmi;X=?TJY{XXT2ja>Ym{m$FY4O3fSg9f=KcuqHE`nM~O6 ze99Qg{F&pu!wCZ_`BVDTUg{)uH5bTTiky)XGn1JV9~@>}$$N$G|^WbdN# zi!c929O)CXSjjkek73^Q@ME+8BLD9^oY^r>)CR6ADC@i!TG>F?`G>v?kW%k;a;d?p zN1&XU*<2@)!Pm5w%V)p5d+Hnfk2aE4C+j0GAlPn~0oA`Bp|=~UWg93gH%k|4JMnHt zxHLg$?RJzpP-_BrfMTM4C-dJJVrdo{l2Mu)SK2uR52`I#WVgz%MS9Ui#AU6rfJLyz z1kS=bQt(c+m=fQE%6ogcGFvZiqvsZd4JI-F3D>iDecmBuqZzfbYLTGLJ%2C{4C{aI zKwF+K2toYySul#VaeaQ!;`%?HO~UeL?A4mVIFrTtb+mK*>^Sx^4J!SYuJPl}Gf7>9 znHkSTVfiywJ>weKL1baap+WSO)qK1^XNS762LFE_`MZNU(S^Fwh**AYb+cFYT;ma2 zWC(i7_{duWOU}$jhZgweezjZ7-TKjnE}>+1yRP|6N|{6WSx{5@U~kl^lbFAWS@V!W z>C+RH#_WY{hmjxS?v;ywj=r+#(}53rzDu6_>+}W{)0++q|M2CoARWrv-E6PcvMssOlFXYRYey zulyD&9p)uo`G@PT<;Qa)eH~9-%xtE`fCZJuh5~B5yJ~>r*B2hU`0JXd54_RxLF0wr zcK>L@n>jv(t%G*c+2K}j;mupCicij&F9qICeBwzYrF6w9i}|2+(!$o=LW z1hbNA=T1E@-hU{;yDv=-`aXb4eg1aZRnuO-QM_%vWxuwH7VJ>`x;fWm22_`39_&ym zT}%sHR04^?8I@);cW+mjdpAnWQ0{Kz@Fq&_c%q87Q+9&V2^z2E`hcc9s_OaQh4NX9 zwpVS-1g6{G(b?76wS5OKxG!B_>vV+UCuKhxTYKr=vNO`$x7PRlu!C_dk#@KcSPT23 z>hXlZZ>+gi^-i+`pCXf2QHP7#XysI_)dpwcI~-U=V%(RykfR|6I3*TKX@x LkLJzqLdW_SRylR% literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vb b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vb new file mode 100644 index 0000000..a145ff1 --- /dev/null +++ b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vb @@ -0,0 +1,147 @@ +Option Strict On +Imports System.Data.SqlClient + +Public Class SqlDebug + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents ConnectionQuery As System.Windows.Forms.Button + Friend WithEvents ConnectionDestroy As System.Windows.Forms.Button + Friend WithEvents ConnectionCreate As System.Windows.Forms.Button + Friend WithEvents ValueToInsert As System.Windows.Forms.TextBox + Private Sub InitializeComponent() + Me.ConnectionQuery = New System.Windows.Forms.Button() + Me.ConnectionDestroy = New System.Windows.Forms.Button() + Me.ConnectionCreate = New System.Windows.Forms.Button() + Me.ValueToInsert = New System.Windows.Forms.TextBox() + Me.SuspendLayout() + ' + 'ConnectionQuery + ' + Me.ConnectionQuery.Location = New System.Drawing.Point(16, 96) + Me.ConnectionQuery.Name = "ConnectionQuery" + Me.ConnectionQuery.Size = New System.Drawing.Size(152, 40) + Me.ConnectionQuery.TabIndex = 0 + Me.ConnectionQuery.Text = "Insert new row" + ' + 'ConnectionDestroy + ' + Me.ConnectionDestroy.Location = New System.Drawing.Point(16, 168) + Me.ConnectionDestroy.Name = "ConnectionDestroy" + Me.ConnectionDestroy.Size = New System.Drawing.Size(152, 40) + Me.ConnectionDestroy.TabIndex = 1 + Me.ConnectionDestroy.Text = "Destroy connection" + ' + 'ConnectionCreate + ' + Me.ConnectionCreate.Location = New System.Drawing.Point(16, 24) + Me.ConnectionCreate.Name = "ConnectionCreate" + Me.ConnectionCreate.Size = New System.Drawing.Size(152, 40) + Me.ConnectionCreate.TabIndex = 2 + Me.ConnectionCreate.Text = "Create connection" + ' + 'ValueToInsert + ' + Me.ValueToInsert.Location = New System.Drawing.Point(184, 104) + Me.ValueToInsert.Name = "ValueToInsert" + Me.ValueToInsert.Size = New System.Drawing.Size(80, 22) + Me.ValueToInsert.TabIndex = 3 + Me.ValueToInsert.Text = "" + ' + 'SqlDebug + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(292, 272) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.ValueToInsert, Me.ConnectionCreate, Me.ConnectionDestroy, Me.ConnectionQuery}) + Me.Name = "SqlDebug" + Me.Text = "SQL Debugging" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private m_DatabaseConnection As SqlConnection + + Private Sub ConnectionCreation(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectionCreate.Click + Dim ConnectionString As String, ConnectStatus As String + + 'Setup database connection + ConnectionString = "Initial Catalog = pubs;" + ConnectionString += "Data Source = CHEETAH;" + ConnectionString += "Integrated Security = SSPI;" + ConnectionString += "Pooling = 'false'" + + 'Attempt database connection + Try + m_DatabaseConnection = New SqlConnection(ConnectionString) + ConnectStatus = "Connected" + Catch objException As Exception + ConnectStatus = "Not connected: " & objException.ToString + m_DatabaseConnection.Close() + m_DatabaseConnection.Dispose() + Finally + Me.Text = ConnectStatus + End Try + + End Sub + + Private Sub ConnectionTest(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectionQuery.Click + Dim QuerySql As String, QueryResult As New DataSet() + Dim QueryTest As New SqlDataAdapter() + + 'Check that we have a valid number + If Len(Trim$(Me.ValueToInsert.Text)) = 0 Then + MsgBox("You should enter a number before adding new row", MsgBoxStyle.Information Or MsgBoxStyle.OKOnly, "Ooops") + Me.ValueToInsert.Focus() + Exit Sub + End If + + 'Setup and perform database query + QuerySql = "EXEC sp_DebugExample " & Me.ValueToInsert.Text + Try + QueryTest.SelectCommand = New SqlCommand(QuerySql, m_DatabaseConnection) + QueryTest.Fill(QueryResult) + Catch objException As Exception + MsgBox(objException.ToString) + Finally + QueryTest.Dispose() + End Try + End Sub + + Private Sub ConnectionDestruction(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectionDestroy.Click + + m_DatabaseConnection.Close() + m_DatabaseConnection.Dispose() + Me.Text = "Not connected" + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vbproj b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vbproj new file mode 100644 index 0000000..0eacba7 --- /dev/null +++ b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vbproj @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vbproj.user b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vbproj.user new file mode 100644 index 0000000..e2b755e --- /dev/null +++ b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.zip b/Source/VisualStudio2003/Chapter12/SqlDebug/SqlDebug.zip new file mode 100644 index 0000000000000000000000000000000000000000..32072d05a8aebf5d8dfdd07e2a7cac874f9d45a9 GIT binary patch literal 8273 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 0 +BEGIN + INSERT DebugError + (RowsInserted, ErrorNumber, ProblemValue) + VALUES (@rowcount, @error, @Keycolumn) +END +GO + diff --git a/Source/VisualStudio2003/Chapter12/SqlScripts/Original sp_DebugExample.sql b/Source/VisualStudio2003/Chapter12/SqlScripts/Original sp_DebugExample.sql new file mode 100644 index 0000000..1470a43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter12/SqlScripts/Original sp_DebugExample.sql @@ -0,0 +1,17 @@ +USE PUBS +GO + +/* Create original example stored procedure */ +CREATE PROCEDURE sp_DebugExample + @KeyColumn int +AS + +INSERT DebugTest VALUES(@KeyColumn) + +IF @@error <> 0 +BEGIN + INSERT DebugError + (RowsInserted, ErrorNumber, ProblemValue) + VALUES (@@rowcount, @@error, @Keycolumn) +END +GO diff --git a/Source/VisualStudio2003/Chapter12/SqlScripts/tb_DebugTest.sql b/Source/VisualStudio2003/Chapter12/SqlScripts/tb_DebugTest.sql new file mode 100644 index 0000000..940a9c3 --- /dev/null +++ b/Source/VisualStudio2003/Chapter12/SqlScripts/tb_DebugTest.sql @@ -0,0 +1,20 @@ +USE pubs +GO + +/* Build the first table */ +CREATE TABLE DebugTest +( +Id int NOT NULL IDENTITY (1,1), +KeyPrimary int NOT NULL PRIMARY KEY CHECK (KeyPrimary > 0) +) +GO + +/* Build the second table */ +CREATE TABLE DebugError +( +Id int NOT NULL IDENTITY (1,1), +RowsInserted int NOT NULL, +ErrorNumber int NOT NULL, +ProblemValue int NOT NULL +) +GO diff --git a/Source/VisualStudio2003/Chapter13/CustomException/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter13/CustomException/AssemblyInfo.vb new file mode 100644 index 0000000..04c890e --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/CustomException/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter13/CustomException/CustomException.sln b/Source/VisualStudio2003/Chapter13/CustomException/CustomException.sln new file mode 100644 index 0000000..df8b4da --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/CustomException/CustomException.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomException", "CustomException.vbproj", "{97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Debug.ActiveCfg = Debug|.NET + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Debug.Build.0 = Debug|.NET + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Release.ActiveCfg = Release|.NET + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter13/CustomException/CustomException.sln.old b/Source/VisualStudio2003/Chapter13/CustomException/CustomException.sln.old new file mode 100644 index 0000000..8af6a60 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/CustomException/CustomException.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomException", "CustomException.vbproj", "{97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Debug.ActiveCfg = Debug|.NET + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Debug.Build.0 = Debug|.NET + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Release.ActiveCfg = Release|.NET + {97B3CFC4-AB0D-4A30-AE92-31925ACAAF8C}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter13/CustomException/CustomException.suo b/Source/VisualStudio2003/Chapter13/CustomException/CustomException.suo new file mode 100644 index 0000000000000000000000000000000000000000..0703d1d26d38ac276eddba14789f934cdeb13061 GIT binary patch literal 8192 zcmeHMU2GIp6h8e?%3lE$L=+tn6p3w0!N`wb+Swvt7qBh1n!apzr)A6TPTk!?v0!52 zgYk(c15eUK6Qjn&_@X50gNczRcrm_cqEGr@qCV-1tlxKM?#|Bc>@w3<4N33j%-nnD z&OPUzd(L;xoxO2=-H&r0Z~959%0X$7o2BJ)XGMP#>LgXxiZr9b_RUhMRl> z4g3vRTire6Uf%&~11$qB2dx6F0IdYA2DO8@-=w8-`)go8Z2XF1NT1|z&&xUNaQLzT z7NfO58);N7URn8$-TqZm3kT7dP=+KS1vxGKlE%F#CvmkPh3+pn!|GnQN^=u&i1tc3 z>JF@WKpST{0#4LGM#gZRkwL}%45Ue-cI#q*KYd~iC@gGA8) zw*ho7Xd~!8&?eCRpa(#kK^*%K?gr>#&=$}mAog!_@2p2Dntzmcmd2J!znk3Q`4{^9 znwWJaowN+o&K2`^M!9TjEKy8w+7%=5eq%6s%F3$d>R39Fu_uhaRJv&AIbdzv9!qB| zW7rxq4%zvvdVRUCwZgQsQ+CeE71hJl!|7bgK3njHw;mpf_j9s#Gn1YgvlIE0F_6wp zuxr_~R?f;NGOX8@rrNGZJ$#>2o3c+v;mNj4!*7Wlqws8E+B6U@gC|AQQs}XzTe|Su zg%PHl!qX`{Bj)XN`=%8V+L8q(XLf^X*Vj=wBaeh+_Qkf8uB6W~H=!XY8>r-^u> zeaSCfaErdGpOEVqG&6x8xeh}gMXdRhl17iJe+T}Sc~ge^BfTfY%X{2rHGiV61sP6b zS8Qm5F|kn$+K%;e52CD}Io3=a{iAc^{zGcbDW4@b znoRSjKEv`S@3&mTt>zzx_OsAD^N?Xz7F!qvgUb`{`WctP@@K3ba;Kxd9q-F2Kjr!} z%J!UiJc)V|BTVIe9O<`+eJ+3UW(k(k-@6V?+8|2|^Cn^cS$F2jHJ`vUdZhOKARTmp zKjSiEbXfj(VJvN+vM~PVKn{*MYoEX_Bp{g~o>oSYt1vfWu2KMvLpsBUbcPS>4C$0( zz_B5Phe>$~cfMUzNcQ@F#F3bi!Ai!#dlYgLp-0PYk^ff?N4jccuiTx+b>?r?Wg&gl zbN!obVj)UOT{p`1)>m6#%B9j{&C=3;QG1De{`0$Mzd?JX&FS0PG%I^yOug#;LonOj z(jh%an!Dgq9cc9+n0BeYK8)-}Z5IM8Yfs{t3F?7a@1ZZo;eQ$BWsK4ZWu4Q&e~kbl z2ULD6vL6$RxU4aui7DpI8gE{Jccg%Be!j<5Mo`I>h~*!nWpmJpW7`l5qRZ9@fAm=_ z2AxnZL8TM;L+nuC7ZU&O#(2H6%$PFJzs5KRXUBmt6X+%W=qEwkMS%Zh-eK{NvFat) zL5?H)n1lro>*`^AFlVRtL9Czap&f?h{~*SmaO0ne)$;^gP#9{#7NSXk^RLi`c@_)H zzcT--;}*&`_sc=dy13RpfH=qa$~9YZz8oDofz7>Yx0(C(Vhka{^Sh@PT@o+z2rmVr zY!6}wZSoA{Hz73-8T39{fH&uU_;wim(RXfK{bS^fEuZy$xbNHKr9Wpj&(St^fE-g` zn5D{k01H#7G5mUNv0FjXwf19!-+%Gjs`#7RE`8bj_WHl3@w()%9qoDi(&TgReRt)x zft#PcuQK)U6L({Z%LXoSNWkUlG+Q2IXZ4=V?IX8s9bH#sw%W_&6i- z3FWEHdfDSlpDyP{%zrNPW5QwRfJdnuluw2PC#G#+8FlT?8$7=y)#;6j_D*m72Bc4K zTtMyVjh0${dSfo9mum%{-dx9rurj+tMy}JQ1dH&_c=gtPuJPK>ErK1*Dq$jAsK29u z`dhGeLP??Z7iw_8pmI*pEC+Q?u_%H4{4FfM6CO2&O=luK2_OtI!TG3==0~s0VBQ40 zq}B)>&ga2%R=RZ_;n*Bs;`x`Se>xSyYMb^@Wm=o{co}O>UnNw{{H~e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/CustomException/CustomException.vbproj.user b/Source/VisualStudio2003/Chapter13/CustomException/CustomException.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/CustomException/CustomException.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/CustomException/Test.vb b/Source/VisualStudio2003/Chapter13/CustomException/Test.vb new file mode 100644 index 0000000..4f60c1d --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/CustomException/Test.vb @@ -0,0 +1,40 @@ +Option Strict On + +Module Test + + Sub Main() + + Try + UserDetailsLoad("MarkPearce") + Catch Exc As UserLoadException + Console.WriteLine(Exc.Message) + Finally + Console.ReadLine() + End Try + + End Sub + + Function UserDetailsLoad(ByVal UserId As String) As Collection + Dim HelpfulMessage As String + Dim FileStream As System.IO.StreamReader + + 'First try to open the specified file + Try + FileStream = New System.IO.StreamReader(UserId & ".data") + + Catch Exc As System.IO.FileNotFoundException + 'The specified file didn't exist, but this exception won't mean + 'much to a caller who doesn't know how this method is implemented + UserDetailsLoad = Nothing + HelpfulMessage = "User details for '" & UserId & "' cannot be located" + Throw New UserLoadException(HelpfulMessage, Exc, UserId) + + Finally + + End Try + + 'Code goes here to load and return user details + + End Function + +End Module diff --git a/Source/VisualStudio2003/Chapter13/CustomException/UserLoadException.vb b/Source/VisualStudio2003/Chapter13/CustomException/UserLoadException.vb new file mode 100644 index 0000000..c7ab814 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/CustomException/UserLoadException.vb @@ -0,0 +1,56 @@ +Option Strict On +Imports System.Runtime.Serialization + + _ +Public Class UserLoadException : Inherits System.ApplicationException + + Private m_UserId As String = "" + + Public Sub New() + MyBase.New() + End Sub + + Public Sub New(ByVal message As String) + MyBase.New(message) + End Sub + + Public Sub New(ByVal message As String, ByVal UserId As String) + MyBase.New(message) + m_UserId = UserId + End Sub + + Public Sub New(ByVal message As String, ByVal innerException As Exception) + MyBase.New(message, innerException) + End Sub + + Public Sub New(ByVal message As String, ByVal innerException As Exception, ByVal UserId As String) + MyBase.New(message, innerException) + m_UserId = UserId + End Sub + + 'To re-materialize exception and custom property at the receiving end + Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext) + MyBase.New(info, context) + m_UserId = info.GetString("UserId") + End Sub + + 'To de-materialize custom property at the sending end + Public Overrides Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As StreamingContext) + MyBase.GetObjectData(info, context) + info.AddValue("UserId", m_UserId) + End Sub + + 'To add custom property to standard exception message + Public Overrides ReadOnly Property Message() As String + Get + Return MyBase.Message & Environment.NewLine & "User id: " & m_UserId & Environment.NewLine + End Get + End Property + + ReadOnly Property UserId() As String + Get + UserId = m_UserId + End Get + End Property + +End Class diff --git a/Source/VisualStudio2003/Chapter13/HidingDetail/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter13/HidingDetail/AssemblyInfo.vb new file mode 100644 index 0000000..1a0cfa0 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/HidingDetail/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.sln b/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.sln new file mode 100644 index 0000000..87ff703 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HidingDetail", "HidingDetail.vbproj", "{FA9CA985-D2C2-466D-8503-B447C738F116}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {FA9CA985-D2C2-466D-8503-B447C738F116}.Debug.ActiveCfg = Debug|.NET + {FA9CA985-D2C2-466D-8503-B447C738F116}.Debug.Build.0 = Debug|.NET + {FA9CA985-D2C2-466D-8503-B447C738F116}.Release.ActiveCfg = Release|.NET + {FA9CA985-D2C2-466D-8503-B447C738F116}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.sln.old b/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.sln.old new file mode 100644 index 0000000..1179386 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HidingDetail", "HidingDetail.vbproj", "{FA9CA985-D2C2-466D-8503-B447C738F116}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {FA9CA985-D2C2-466D-8503-B447C738F116}.Debug.ActiveCfg = Debug|.NET + {FA9CA985-D2C2-466D-8503-B447C738F116}.Debug.Build.0 = Debug|.NET + {FA9CA985-D2C2-466D-8503-B447C738F116}.Release.ActiveCfg = Release|.NET + {FA9CA985-D2C2-466D-8503-B447C738F116}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.suo b/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.suo new file mode 100644 index 0000000000000000000000000000000000000000..0b6df73a6a82fb60e095595cbd8d2533a426969f GIT binary patch literal 7680 zcmeHLO>7%g5FRIiCZSDRAR!c5meQiqpQsIm{?S5er?e2KB}qv@xj6R5al7#b+i4pW z4oDmjC%B+;Dmfq!AOtt41RN?M;L>tHs1isZ4sbvMPH-XN``+%$t~XwH;|5Ss#(Lh} z_h#SBn>X{#yuEyB_4m^stocC#bU^B5X0}Og^!3MZ&!%XVNF8qYJTp5x>vW3Xc8RVd z3;YFL8{9qQUf+P$h_(!^3GF7dX0+vKE6}*tY)kb2ut1;K_?5(vZpq_XkSXkPbZUdg zXiLzKs?qyj{rINcaxqp9rbp;lpaDrqQBF#al8+ z$`}}+kCTo-5-niK2>#DVzmk3m+N5!Jbuy$bM!BoO8dW|q^F4R!Bl098EQ;h=gx?b;(ulg(H^NT9cXu=twkg6UAP)(ccZOGW8Vh%%KJ*BWmFnl>Z{EHzs0%3wG;hf zWx_m_OPfaA&X)?dr9!qLkt(G)ZSzpF$LLRwnd9nlMIx87?5xq9$(8H^8CE6jk(^~3 zgXV~F$S#bl*PF_on&bBPgq=6@B{jHWFqhBRr;8qY!{LEs4<~DhTe*o5J5|USeYt#= zUCSOd^JXDs@qRwV=65ZqhwqP~#bvJyBa&^IMBEZPh7sAsv`HYGg^?2OGU&0TQ?}!G zKRDtthS3R(5%YGazQf=lUtY361ruW_JXzqbMAxdnhd-26grqDaQ=4c=2>gi=FNh8F zz)Cs>`xwW%k5WfqnJj*kI*8SlV81b?jpho!5`S;OFflBueCDZJ-6@0eiMl3qIEh`c z)h?7^m2lbw`71F@*`#nzZ-h0La(!Hb^1G3P=sola`bxg4bdh`A{KI?}RX%Gwo&SRJ z52-b0$~+nDp`_*0o>Apf_N%Vr2IVKQ_HnG6b;zKri!IE8m1!&1&)mh@G^%{=*MK`6 z?d?Qg9=mP{*KaA`bMo;C+^4}2S9?KDR!N>VduzzQtQB;vl)$`c`2V;&vwzLUFvf_i z<_X)~{b!Djy8fHNOCRtPZJ0-MaLieI7Q2vwW`@ry!>CnQ8?ja?qK!g3qYUYcGORPC zLwZqL4k$cK%Pw5`c1hvc3;&WtVv2>8j6(J>^d>?N&pnI$w|Y3*RmOM!9);Z#`+{^W zeZjf@$!B6AD5L({<;w=M9K-i`Nn$PUJ067grLC}WmRDes&F z0&4^i*{|wjk$spz#1)N+pg`@Sq2P0fjttPPT<%eY{(h-Mta2W$n}bf|ZA30uxNg<( zN1w$KunFx_i8_Ek`a3~X{9(Sf;1FfLIrX@#SxqKdq}l{yI#t#m#?ltez*}qQX!UzOXPYaQ=-k1~^^R z_516ukg!m`xlayY*2VSqKIA#(SFYKVXXmm*2eA2|+HKZ;2f;%~@Z#>FMc2fuJfdsC zEZc?LL7zMY{o~M@hYUs^cfp%;A7VR-{g`(zU-*6K#q}R`zq|MA^tnIItexg&Zboxl zfoYZ|>jErH;Ew6n3kzbJ$d#7f{%=3|b$RlojpshCJKy@}Bs!(=#baIfojdXPTi?9? zeBaE6Z!1rUK5-|e$Qk%cLIW;W7e|9CFsThob~qm^ihg+p%6S$Ld4;0p7qskg-ptLF zJuIlM@H;`+=||)uM(5KL2G3t5j!^j^hHk#p1#KLmOg!Dusr|i z%MDpkFS%f9drefgMI6nftI1YIE(+Z*tTj%DY>@#BX;b#!sSR{L~yBYTl@S zI)0+^2l+mme)z)Atxxs7*6~i`^e_9r3yv>6SGRzN*UtAB@BBXnaOOAhkPm0>v^f7S a*#EcUUDjZWMLPDP`u}3d)$?4>^8W@hVlYqu literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.vbproj b/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.vbproj new file mode 100644 index 0000000..6e096a1 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.vbproj.user b/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/HidingDetail/HidingDetail.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/HidingDetail/Test.vb b/Source/VisualStudio2003/Chapter13/HidingDetail/Test.vb new file mode 100644 index 0000000..f1c2274 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/HidingDetail/Test.vb @@ -0,0 +1,40 @@ +Option Strict On + +Module Test + + Sub Main() + + Try + UserDetailsLoad("MarkPearce") + Catch Exc As Exception + Console.WriteLine(Exc.Message) + Finally + Console.ReadLine() + End Try + + End Sub + + Function UserDetailsLoad(ByVal UserId As String) As Collection + Dim HelpfulMessage As String + Dim FileStream As System.IO.StreamReader + + 'First try to open the specified file + Try + FileStream = New System.IO.StreamReader(UserId & ".data") + + Catch Exc As System.IO.FileNotFoundException + 'The specified file didn't exist, but this exception won't mean + 'much to a caller who doesn't know how this method is implemented + UserDetailsLoad = Nothing + HelpfulMessage = "User details for '" & UserId & "' cannot be located" + Throw New System.ArgumentException(HelpfulMessage, Exc) + + Finally + + End Try + + 'Code goes here to load and return user details + + End Function + +End Module \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter13/MoveFileWrapper/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter13/MoveFileWrapper/AssemblyInfo.vb new file mode 100644 index 0000000..95fb311 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/MoveFileWrapper/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter13/MoveFileWrapper/ExceptionWrapper.vb b/Source/VisualStudio2003/Chapter13/MoveFileWrapper/ExceptionWrapper.vb new file mode 100644 index 0000000..3b8ddbb --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/MoveFileWrapper/ExceptionWrapper.vb @@ -0,0 +1,89 @@ +Option Strict On +Imports System.IO + +Module ExceptionWrapper + + Sub Main() + Dim WrapperNo As Boolean = False, WrapperYes As Boolean = True + + 'MOVE commands producing good exception information + TestMove("C:\Demo\Source.txt", "C:\Demo\Destination.txt", WrapperNo, "Destination is read-only") + TestMove("C:\Demo\Source.txt", "", WrapperNo, "Destination is empty") + TestMove("C:\Demo\Source.txt", Nothing, WrapperNo, "Destination is nothing") + TestMove("C:\Demo\Source.txt", "C:\Dem\Destination.txt", WrapperNo, "Wrong destination folder") + TestMove("C:\Demo\SourceX.txt", "C:\Demo\Destination.txt", WrapperNo, "Source doesn't exist") + + 'MOVE commands producing bad exception information + TestMove("C:\Demo\Source.txt", "C:\Demo\*.txt", WrapperNo, "Wildcard in destination") + TestMove("C:\Demo\Sou9(E6h2dmwAdCvHZ7N8KINZBlx zS+!%RfwoQRfh20ckrDi#l>sIF3}%x?>BeM9LyU6Qplek5#LSO0>mGRlGLw>!6Iit; zlS+OOyKq!}PiuWto5>EWpK=XV>ldsK;x)^}aqbDrOvC_FCJu04xn0Bo`hOb|+o^Zc z&*W=Sw+`uEr1ePmA#FgqAL#+4jY#bKAaV=oA*9VntlOeZZYpU%4Hi9sbY$3R}Lq8t%3Bool~E!iEPU8#;mSPw&>;AVRh0Q z$vU<*WRF|nB&%-Z5kc5=i^ZuE7K521y9d}KJKXXkUZ=HoH)wKRrIU{o4B3y^Rl zZYBIlU{nDz$8ZjCHqnp}_!A>u(28h*dU`c8`myOisUy(L7=DyGgtZni`*AfJ)2n(; z{Jk5^#IUIH8SmVqS%&2kb#2VyH1zF38$1)0(dqu-Y#ZdSLM3IB!tIs58E2i<4Pp6R zXrcAcCb*|=P3aDFFl(4yC9bsK&oUXeoOTKN<5<05eq>X^}k-eYqXak z+?<=+)*!Low~UtLvtQnu{s!N}O{{B>L$ULKk`C!m<9EvwC_g59QI|lOr8r96C_O3r z5K6PuiBgB^(}g^N?+)3=y+}g;j?ywu>6AjJDIl=10FlEAA4LvgxQG@F23)$rD5%PaGzLp!kf zC~Ez)|0w#Ay4#K@Fvs=f2Bt)d`};<@*Kc=xsb>z{lOqd%21u7yA5E}l^0QslUR+JQgh%6mXm z{A0YvF(jTd4*bt7$6xX&7B_}kM!u%S?;rjL{?B7?RQWusUeW+{9MR_l5P&CcHH;6- z41RA~g#1ll(4x=3I95+zD5x091{Tye3%q~CXnAB8b^XEkyOv??0nhCg{%T($@OZ!z zWk6oWT1p;(I{{5?VL;0o|1y)EKlXUM;|ft4O{CqA!Sg_^(K3u5&s)5IrPb|=j#9dP z@eRk^z6!9Sg|{!>GQzhn#vb%+S|D{Zt!yxO`_daHXvF<>_zE#W7OZ`yzO~OR0S26} z*Y~+T>hD-Z{oR~)qORZQZ?WtDdiJTyzpj0;@16EbO|!op{z+}dP5zl!tRNQbgVC_1 zPOGBAA{SV}dr%7XIarCS?2Ip`#41Lvyjjd(Oa@=U*p8!uR!OcUyR_gGyj7WqlfCP( z#zn5##1XzzI%@v@?Vphl_mFW2Po--24l^&lKXcuNOnt31I#P#1_O837RSRdcSt2~_f!}t8ClhR>}m F|6hN|jkW*) literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj b/Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj new file mode 100644 index 0000000..729e3eb --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj.user b/Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj.user new file mode 100644 index 0000000..29c78d4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/MoveFileWrapper/MoveFileWrapper.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/AssemblyInfo.vb new file mode 100644 index 0000000..257341e --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln new file mode 100644 index 0000000..4b9ab73 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RealisticUnhandledExcFilter", "RealisticUnhandledExcFilter.vbproj", "{BB7379C0-225C-4404-8EF1-70A4A099FE5D}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.ActiveCfg = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.Build.0 = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.ActiveCfg = Release|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln.old b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln.old new file mode 100644 index 0000000..1d226b2 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RealisticUnhandledExcFilter", "RealisticUnhandledExcFilter.vbproj", "{BB7379C0-225C-4404-8EF1-70A4A099FE5D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.ActiveCfg = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.Build.0 = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.ActiveCfg = Release|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.suo b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.suo new file mode 100644 index 0000000000000000000000000000000000000000..ed85be5c593cfeee81bef833c186a3ce8086bc8f GIT binary patch literal 8192 zcmeHLU2GIp6h6BxQV1YD^#|MjtfMCr$iMO!P(S_uZM>nVp?&r%MST>6zTQ zGxzVDd+s^kJ@;O`u;hoab1QxnAMKO|ximgcuJe>f@Xe%Xu}Bmj{J%6lK5iF^;B%I) zAr1ToSsR@-oP(U}Jr`*nQWMgAqy_3Rv_JqbQ{u2q*X|_BeC5b$X6rX>HM!newXvj`XKW1snsT^ z-)vd62L6n5h3hBU#iE3HJeM|&xK$_@t-NyC#zd-|;;{4kl3hkm`mi~qeitTksl1gn zc4u;BtH=h6lh!~kZyJZp0i)9@4yo?*D*oojt)XG7U>3@%a^ay|A!D5=xy>6N=}mTV zu;zF^H#}gaiW#FjSIDwx?!#umET;1Ot|t1z&jz%J%VE?GqmGEPUX^v@n>}niB>EfxBC%Zo{qv~J0IN@;yc2E6 zpT66vWUyoikA;>75S2Z$ihmZp4C%%i>j;#~414 zfPX3uq!rP+0vq`X>9e|ss5=0;vUte(5Tq_+Zin$V74~xs;@?fkse`cm8Sk(U$Jk@TPaM+omd&2;2oAfu317=rX$OyC=$iJK zQd*@==kc$J>sLUs{m8b(EY>209)_}XT7C&WlSKctvdt3u4?-HF!qbcjUo)gt_QKM8 zl|QCsGjjGWBlmjlmE}mA&SNHn;N6c|5Fz>}{;#GSe)}V)5NEtdrq?Jahy6upPfL-) z+8^V@m*_MgKmVk%EejeN0T$S@SV9yEru&`vhjB?*{*0A+o#E(jHu@G|Yk7~Q*%omG z@}$usu6&U#D-mHE_;U{=Z;~_Yq}h$AB?gh`6KUWd5t$=<=e!?vj7WpL)9x+UN1_q> zpv^rTe_|ikj6^%Mt&{#xA2ELP)8&-;$GVdL#9~lJy_d@ujb;PPb9{VVR2sTY>s68u zetPZ1XZY`HVp&w4j68!4vO_kj{##)lF@(u&csAj?MK8l0`(ZVa{t#g)x22({GZ?*7Jrwa-%}1i?L+i=1Rls(qZY;o zbGA!Y)xqCD*KeIcU&}J`@7%T_H}yn zpOY)cC|mR1p6@>VV?px8wWA+JUs?LE+OLbBKiYoJ=#j@>|K`=_x-Y%=hPujGht{=@ zDE{E`X`bzCHD>HV9OO9wH_Kb_n%-f^?fg!#7gzhw;|8Ozv^u>po^(%dy!p|mH^#ix zr#JHOpWf`#gZK2tGgsy5%~Yp1+PD^&d#@7^K?XbK9|@(Zz6+casXkS4{sV#YzcRC9 zM3;qL8Fge3^=SEd^GIK34ceY@h9wq| ztJb5I$Brv%Mg2}^WUK4IUoZaYduDzA+yh^w4tNK_U1=%_F#iec4Lkq4A-DJbxdd%f z=iJeY>Q=_P67F1szQ~`^S-tqL^}Pq{Fo>Dc4yHrPu>Ryt>kK>pR + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.vbproj.user b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.vbproj.user new file mode 100644 index 0000000..9715303 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/RealisticUnhandledExcFilter.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/Startup.vb b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/Startup.vb new file mode 100644 index 0000000..990f64b --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/RealisticUnhandledExcFilter/Startup.vb @@ -0,0 +1,70 @@ +Option Strict On +Imports System +Imports Microsoft.Win32 + +Module Startup + + Sub Main() + + 'Before running this program within the IDE, please use the Debug...Exceptions menu + 'item to ensure that the program continues in the face of an unhandled exception. + + 'Register the unhandled exception filter with the AppDomain. + 'This means that UnhandledExceptionFilter will be called whenever + 'a managed unhandled exception occurs. + AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionFilter + + 'Here's where the normal application code should appear. + 'In this case, deliberately create an exception so that + 'we can test the unhandled exception filter. + Dim objTest As Object + objTest.ToString() + + End Sub + + Private Sub UnhandledExceptionFilter(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) + 'This method will be called by any unhandled managed exception + Dim MessageFriendly As String, MessageDetail As String + + 'Log detailed exception message if no debugger is attached to this process + If Debugger.IsAttached = False Then + MessageDetail = "An unhandled exception occurred!" + Environment.NewLine + MessageDetail += e.ExceptionObject.ToString + Environment.NewLine + MessageDetail += "Application user was '" + Environment.UserName + "'." + Environment.NewLine + If e.IsTerminating = True Then + MessageDetail += "CLR will terminate this process (exception was on main thread)." + Else + MessageDetail += "CLR won't terminate this process (exception wasn't on main thread)." + End If + 'Write message to the Windows event Application log + Dim LogWriter As New EventLog("Application", ".", System.AppDomain.CurrentDomain.FriendlyName) + LogWriter.WriteEntry(MessageDetail, EventLogEntryType.Warning) + LogWriter.Close() + LogWriter.Dispose() + End If + +#If Debug = True Then + 'Launch the debugger if DEBUG build, no debugger already attached + 'and this is an interactive process (user is present) + If (Environment.UserInteractive = True) And (Debugger.IsAttached = False) Then + Debugger.Launch() + End If +#Else + 'If RELEASE build and this is an interactive process (user is present), + 'then show user either a warning or a critical message + If Environment.UserInteractive = True Then + MessageFriendly = "Unfortunately, this application hit an problem." + Environment.NewLine + If e.IsTerminating = True Then + MessageFriendly += "It will close now, but you can restart it." + Environment.NewLine + MessageFriendly += "Please contact application support and ask them to look in the event log." + MsgBox(MessageFriendly, MsgBoxStyle.Critical Or MsgBoxStyle.OKOnly, "Sorry for the inconvenience") + Else + MessageFriendly += "Please save your work asap before restarting the application." + MsgBox(MessageFriendly, MsgBoxStyle.Exclamation Or MsgBoxStyle.OKOnly, "Sorry for the inconvenience") + End If + End If +#End If + + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/AssemblyInfo.vb new file mode 100644 index 0000000..257341e --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/Startup.vb b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/Startup.vb new file mode 100644 index 0000000..491f61e --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/Startup.vb @@ -0,0 +1,86 @@ +Option Strict On +Imports System +Imports Microsoft.Win32 + +Module Startup + + Sub Main() + + 'Before running this program within the IDE, please use the Debug...Exceptions menu + 'item to ensure that the program continues in the face of an unhandled exception. + + 'Register the unhandled exception filter with the AppDomain. + 'This means that UnhandledExceptionFilter will be called whenever + 'a managed unhandled exception occurs. + AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionFilter + + 'Here's where the normal application code should appear. + 'In this case, deliberately create an exception so that + 'we can test the unhandled exception filter. + Dim objTest As Object + objTest.ToString() + + End Sub + + Sub UnhandledExceptionFilter(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) + 'This method will be called by any unhandled managed exception + 'Using DEBUG or RELEASE config + Dim JitDebugSetting As Object, RegKey As RegistryKey = Registry.LocalMachine + RegKey = RegKey.OpenSubKey("Software\Microsoft\.NetFramework") + JitDebugSetting = RegKey.GetValue("DbgJitDebugLaunchSetting") + RegKey.Close() + +#If Debug Then + Console.WriteLine("DEBUG configuration") + +#Else + Console.WriteLine("RELEASE configuration") +#End If + 'Who is user? + Console.WriteLine("User: " + Environment.UserName) + 'Is debugger attached? + Console.WriteLine("Debugger attached? " + Debugger.IsAttached.ToString) + 'Is there an end-user to show a message to? + Console.WriteLine("End-user present? " + Environment.UserInteractive.ToString) + 'Is this a CLS-compliant exception? + Console.WriteLine("CLS-compliant exception? " + ((TypeOf e.ExceptionObject Is Exception).ToString)) + 'What's the CLR going to do with the process? + If e.IsTerminating = True Then + Console.WriteLine("CLR will terminate this process") + Else + Console.WriteLine("CLR won't terminate this process") + End If + 'What's the CLR going to do about debugging? + If Debugger.IsAttached = True Then + Console.WriteLine("CLR didn't talk to user or spawn a debugger") + Else + 'If process is terminating, debugger checks registry for action. + 'Otherwise, CLR will deal with only the offending thread. + If e.IsTerminating = True Then + If JitDebugSetting Is Nothing Then + Console.WriteLine("No JIT debug setting in registry") + Else + Console.WriteLine("JIT debug setting: " + JitDebugSetting.ToString) + Select Case JitDebugSetting + Case 0 + Console.WriteLine("CLR asked user whether to spawn a debugger") + Case 1 + Console.WriteLine("CLR didn't talk to user or spawn a debugger") + Case 2 + Console.WriteLine("CLR spawned debugger and asked user about debugging") + Case Else + Console.WriteLine("JIT debug setting is invalid!") + End Select + End If + Else + Console.WriteLine("CLR didn't talk to user or spawn a debugger") + End If + End If + 'Write exception to console + Console.WriteLine(Environment.NewLine + "Exception text:") + Console.WriteLine(e.ExceptionObject.ToString) + Console.ReadLine() + + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln new file mode 100644 index 0000000..2bcd53e --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "UnhandledExcFilter", "UnhandledExcFilter.vbproj", "{BB7379C0-225C-4404-8EF1-70A4A099FE5D}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.ActiveCfg = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.Build.0 = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.ActiveCfg = Release|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln.old b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln.old new file mode 100644 index 0000000..eb2eb9a --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "UnhandledExcFilter", "UnhandledExcFilter.vbproj", "{BB7379C0-225C-4404-8EF1-70A4A099FE5D}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.ActiveCfg = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Debug.Build.0 = Debug|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.ActiveCfg = Release|.NET + {BB7379C0-225C-4404-8EF1-70A4A099FE5D}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.suo b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.suo new file mode 100644 index 0000000000000000000000000000000000000000..c75b60c3e514120a86ead25055d16c1660680d4d GIT binary patch literal 7680 zcmeHMU2GIp6h7M)X^|FCK}5k3fz+SYQm8-?wB2n5>;kq0YSNf&cc;sg?M}111sc?7 z;)C(Y_+aXb+6NP(#>5w+Bx0h*s4;<<`17ENK53#+e9{-G-*;zbXZB~7*=^O3a3*(W z=FYkIoO|v$-#z#4h4ZU^n0tHOk5WW?rCu)0H_0`g`VgL36s;7g!vo(h&CkzUl_Ge& zN>`8t{)Vm%_8cz3o%6jEr3s}GWf{tHlxtBq&&~Gz3L4^7RV!FvP)uAo(WFn(xMySr zGaQ`O$dY`_(^o3d#dFyY&6bZs^<<(`frcd}SvesCV&I;WBly*!g;Srk*nEFCNnHp~ zq_82M)bB~u#PQ@ucS1g6#xb!UpSRwNm-{hN z&Ol1W@OwI-RJS(`@>}q_0ww79iP>-2T~HU|IOl}VEF2H-v=MQj4TbT~DP#OQ@@RMR zU1#5&_PpPSy0s`bp{zr>8RZs~^(Y%qZbc#AZMbhlx!r!>Y~T6KkGyjHc&^q5v%tkL zXSjBvU#y7eCyltSh0Sy>W2RKdHbi2%7`t6I5*^Tn;>Yz#_1YXUVktAJ^(Bm)nIXf< zs5xe&bnTcvruCbdN!7fm;B8shoSZV#dOD{*HXk$63G-CeWpCIw935b1E#Z_gHD<;# z32o3wCt0=hK|QT!VkthC5@TT@#P%FUSh{5t(QC>y-ia8aKo(-!G!QO@FF8CVP-9A` zbl};%rrQM}R-9O@ljy`UH^qGc1}1c&CONDEz3TmxjmNgYk{j?(<$?4fdRz%Z znF_|QQ%%$zgI-Bolza?Y=P=sic)J|-vk%~39(#kzXTEcTtw6DSj#`HfCtwK^mZH5X z>Cp=O4WTc}CfVIqyfM#u!saNJZ_Tx?e1g7`t|(n(OAX^^e)qL4pPowpE0y)d$1g>` z?C5;p`J=zB{iWxfySAXk0r+to7BW;D%Y(}Iz_p^d2d*1K@GP$LI(*Pe^x-s$6-SmY zCLt*XKF#)hdc-K!YOcui)hx<5`qBy_O)H2sP1@xkJbhTjV_bIN&el2HMV|hTB+{o- z7|A$fk3w%E#AyEg|J0+{|A;a~9xsx?NWKLB3(=oeqXhMT=7}#bXh6mCqslW(SZD@V zVCiBCQK&rK4f&MIydlUfPOG(G9jOa3)-3744l}5e44~C1b68-k{gRJ?H0J>!g0*IcJvS{hwYv^(o#*8d+B- z`$A{1K=#TGV!7;sdvqX8?!?uF=Qi1ns{^G?b^?6*v9z}VdOD;Bbv?N6!qty2UG&8$ z=ASFOp^z)4&}kY7>v*8Z9+jVq>_&4DTQstT9Sac+-+LVBm_T$fJ8|V6Qt0lL%H2gF zkE5Fv9pr7qTC}*j?UucZ++#a(ARV^m3eSD!WBJvg9oXEfB7wO_FL>w@uHEljbWL33 z3$6u`vq#~PAt#}K7+N#QrS*xzg`*2%ze@Py?8PI>E;009O6|ZOMoBgJ!?nVREUq&t z_`id37S4_%7MQtm{dc~U%4QAlKQB8d{;om0M{R&QgzR$y5y)J_597;AwrV$E{KQk@ zKv4M_c)vvB*-^xe7Nmq(x7Jo`c2%d7uV>viU{13h=lPCWG5H?KT3cxcxRQ#mQxe z7~#k4-Qi$`+6h)VG?!)TaEOUtu*Oa0qqsDF9@e;ji>uum^GSF2#*-gs_r{F1boWLX z#k)7|unKo?y4twU+Y7MIvcLh$yMsB~^aBVGH zJGX7`y4U?*gOgDemD}kA@8FZU`_KNo`jLY#w!hIh_v@bT-Imqtp4?W|J~`_+^WZ6X zDD7{ZeljCqzFV1yKg?%&1{f6oHi7p^6cWRkQt1sm>u~h3@(RDK-)hU>jWyuE7yq1d zX6O8Q2+>O$@C<^h(&aS3`19Bsbo>l#@A-2UxfN~B6+NR)WxO-tj + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj.user b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj.user new file mode 100644 index 0000000..9715303 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExcFilter/UnhandledExcFilter.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/AssemblyInfo.vb new file mode 100644 index 0000000..a28d0fc --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/AssemblyInfo.vb @@ -0,0 +1,31 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/TestForm.resx b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/TestForm.resx new file mode 100644 index 0000000..aa5dcd4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/TestForm.resx @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + TestForm + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/TestForm.vb b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/TestForm.vb new file mode 100644 index 0000000..7440978 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/TestForm.vb @@ -0,0 +1,63 @@ +Public Class TestForm + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents FireException As System.Windows.Forms.Button + Private Sub InitializeComponent() + Me.FireException = New System.Windows.Forms.Button() + Me.SuspendLayout() + ' + 'FireException + ' + Me.FireException.Location = New System.Drawing.Point(48, 136) + Me.FireException.Name = "FireException" + Me.FireException.Size = New System.Drawing.Size(184, 56) + Me.FireException.TabIndex = 0 + Me.FireException.Text = "&Fire exception" + ' + 'TestForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(292, 272) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.FireException}) + Me.Name = "TestForm" + Me.Text = "WinForms exception demo" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub FireException_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FireException.Click + Dim objTest As Object + objTest.GetType() + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptions.vb b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptions.vb new file mode 100644 index 0000000..2deab31 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptions.vb @@ -0,0 +1,41 @@ +Option Strict On +Imports System +Imports System.Windows.Forms + +Module UnhandledExceptions + + _ + Sub Main() + + 'First register the unhandled exception filter with the AppDomain. + 'This is useful to handle certain situations: + '1: An exception is thrown on a non-window thread or before first window launched. + '2: If a debugger is attached, unhandled exception will still reach here. + '3: If app config file specifies JIT debugging, unhandled exception still reaches here. + '4: Exceptions that are not CLS-compliant will still only be caught here. + AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionFilter + + 'In a Windows Form app, if a managed exception occurs and a debugger + 'isn't attached, the CLR will display an exception warning dialog. + 'If we want to override this dialog, we need to register a delegate + 'so that our method will be called instead. + AddHandler Application.ThreadException, AddressOf OverrideClrDialog + + 'Normal application code goes here + 'In this case, click on the form button to trigger an unhandled exception + Application.Run(New TestForm()) + + End Sub + + Private Sub UnhandledExceptionFilter(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) + 'This method deals with anything not handled by OverrideClrDialog + MsgBox(e.ExceptionObject.ToString, MsgBoxStyle.OKOnly, "UnhandledExceptionFilter: " + e.IsTerminating.ToString) + End Sub + + Private Sub OverrideClrDialog(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs) + 'This method will be called by any unhandled managed exception + 'assuming that a debugger isn't attached + MsgBox(e.Exception.ToString, MsgBoxStyle.OKOnly, "OverrideClrDialog") + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln new file mode 100644 index 0000000..eaabe86 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "UnhandledExceptionsWinForms", "UnhandledExceptionsWinForms.vbproj", "{F2494349-133A-4CA8-A2E6-0F4422E9219F}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Debug.ActiveCfg = Debug|.NET + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Debug.Build.0 = Debug|.NET + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Release.ActiveCfg = Release|.NET + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln.old b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln.old new file mode 100644 index 0000000..f6e2f33 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.sln.old @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "UnhandledExceptionsWinForms", "UnhandledExceptionsWinForms.vbproj", "{F2494349-133A-4CA8-A2E6-0F4422E9219F}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Debug.ActiveCfg = Debug|.NET + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Debug.Build.0 = Debug|.NET + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Release.ActiveCfg = Release|.NET + {F2494349-133A-4CA8-A2E6-0F4422E9219F}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.suo b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.suo new file mode 100644 index 0000000000000000000000000000000000000000..b84e31e82576a2fef001891c412e529a88613225 GIT binary patch literal 9216 zcmeHMTWnNS6y1Fw1);nI5e2Wvqlz?r@n{jGowf?LfNi0b^k+J~EmNj*o9RFy6r;uu zV~inw82nNCVPZs0Ow=HWn5Z#oG&Cf}A2s@=iAMBGf26K;&OMzwj}Eu(RITAm&OOh& z_rB-sz4kt5MlUbCZ!*S*67y`KYjcZES2zcZ#5TBh8`} z_zSWYx_dYWCHH$S@;u}sUHQVr1?)lPPuU#&fo{~cd>isA(af8drl0+r!arXJ{}nz3`#7<|Yy= z4n)EOT~098ZMB4>z3iI%pdGbi!3gW=iMBAE#P^>>4oHo3!g?J!2J9eWbOKq3X~%$Y z5sbu9>qd_w6;g&@C1wQV2u24mM#L#seFuR*?2Te}1pVDW<`aq{=kfihw4;nlBkJT& z+ig@bIMR2kDS{fbsS%N1g+~~KWPyEmZ9Vt_~p-d=N4q9RQ~*G z8!{ZlN;qnj<5}e>0e@m4<0QZQ8D~9*%#_MMeXp~x!Uh-riPe7j(^oFYBX>#BD=)7v zK7OhGN?FD3=MVk5^5@!jHxZThLXSgOp|H|ftwGfFgk~BF^cATT>e1H<&7z;Tp@XGT ziyoc0e^F#@M_Lzq!6}G&7PLF8Y+(>K(~LT0a6reA9?-IqEX_)?H49w!LDSomJ%(f( zO1>RODe}}m#F083!I$)acPHc~LUfL||4lhk^^Yq}7raWc9|%YIo;>#KjRX={242?x#VbX8hxYCwTMU4v<~(`o)BgPAO*40 zR?mbqHQ-NOCvPT~Y}R5KMu|a8^`IL9{t=N$Un9Hz<^vdGL~2k!!BxM@XBp5}bJowq z$iy}775z37^-yak?O|$(@ndS5PG2gmnQYIIJZfUM;;~XbFSHAwo?~Mh@};2ZjM*i5 z|HoH`K1I8uh<*7okar5IQXy5uazz0p*R(_t68Z9c)zYh%-uRB$jJrdsFyqw4X6%1N z?J}c;phBl(z*M7wB0H6TV^m&+`7UdzMynFJS~jcLp%Qqy8SMbd?Wom4zy{fhS{a0` z!mmR0RO4BWw;JU%(6JlVmCSd)!gDWIdbs2{MmB97oLeOH5V@3XhwRER#ZtsTw(=xA zb=opK?j1^j&2`EW7<<%V4pkzt?)T?hk_7Vkmx9PytMDi+$02_JQZvZq>QfUFG0fIkv>$@aWDqJ!0|v6jG-r#&e0&6K`J3>4_0z z`ss<5ntFQT2`BmVWT%~;hCn$A%VCt!ahWzHpr1H_O@_t*u#z^^4@pRs3lTv(2>i%= zc2n%sT}o&siumB9k`v9hywlNo*q(9Qn zwhUqkDbp~1r{LxSaDC;n1?4u>Hmj1obeQGXIQDJFFMxHUn=HfXm7!Iw#@VKOJ&gq} zuc)lrvXz%w<1xaW4DFHe(FiPpUwB~aS@68FqyQ%U4P!mQU*Wo)?gCvZdKw%Rqkw*3PZ5g;L0QZOjzSELRW55 zKfa*6f;L%F_?V8{OS0SK;n`r5Si{-3CmJE62w)P`&c6naVesC`()7K|KYaA9HKG$Rgm*==4z$@eadF0F}tIJ)HR zIytv)@9HZY_O4Byq^&=v{HKz>Gq=XW4C5I(fzQzlYpR9!d;gfr_-#tdmZ}u#_S286 yuo=VC#EDVgzbEehP6A%}pJXKKXW{;D(*BQUY2HEQDjDDF*Z<{;uc0%W`Tq^Gab!#Y literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj new file mode 100644 index 0000000..7a9a435 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj.user b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj.user new file mode 100644 index 0000000..7136437 --- /dev/null +++ b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/UnhandledExceptionsWinForms.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/obj/Debug/UnhandledExceptionsWinForms.TestForm.resources b/Source/VisualStudio2003/Chapter13/UnhandledExceptionWinForms/obj/Debug/UnhandledExceptionsWinForms.TestForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..f15a35395cb5a8db59a723a7926cb8149cba3103 GIT binary patch literal 658 zcmb_Yy-EW?5S|EPPzwtiE3dE-j^)A`V~Q(6Vj7KvB-lx~pNTHs-pc+2)A<;p;G_5e z7CwTtmA-*Gt5FLJn;Ulcc6Pt{`R4KA^}YfCcjVi{nKmfc0JXF#Mg4OdV4R`yJ)u*n za-QhFOj{T(@H=&g=9lez$EY-yMO0$}3&S8_f$z0#ZmhznKx9xcG literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter14/ThreadDeadlock/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/AssemblyInfo.vb new file mode 100644 index 0000000..41e5ba2 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadDeadlock/DeadlockTest.vb b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/DeadlockTest.vb new file mode 100644 index 0000000..86abc9c --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/DeadlockTest.vb @@ -0,0 +1,130 @@ +Option Strict On +Imports System.Threading + +Module DeadlockTest + + Sub Main() + Dim TransferTest As New Bank(2, 10000) + 'Console.ReadLine() + End Sub + +End Module + +Class Bank + + Private m_AccountOne As New Account(1000000) + Private m_AccountTwo As New Account(1000000) + + Public Sub New(ByVal NumberOfCashiers As Integer, ByVal NumberOfTransfers As Integer) + Dim EachWorker As Integer, NewThread As Thread, Worker As Cashier + + 'Show starting conditions + Console.WriteLine("{0} cashiers are performing {1} transfers each.", _ + NumberOfCashiers.ToString, NumberOfTransfers.ToString) + + 'Start specified number of worker threads + For EachWorker = 1 To NumberOfCashiers + Worker = New Cashier(Me, NumberOfTransfers) + NewThread = New Thread(AddressOf Worker.TransferMoney) + NewThread.Name = "Cashier" & EachWorker.ToString + NewThread.Start() + Next EachWorker + + End Sub + + Public ReadOnly Property AccountOne() As Account + Get + AccountOne = m_AccountOne + End Get + End Property + + Public ReadOnly Property AccountTwo() As Account + Get + AccountTwo = m_AccountTwo + End Get + End Property + +End Class + +Class Cashier + Private m_Bank As Bank, m_WorkerId As Integer + Private m_NumberOfTransfers As Integer + + Public Sub New(ByVal AnyBank As Bank, ByVal NumberOfTransfers As Integer) + m_Bank = AnyBank + m_NumberOfTransfers = NumberOfTransfers + End Sub + + Public Sub TransferMoney() + Dim CurrentTransfer As Integer + + With m_Bank + + For CurrentTransfer = 1 To m_NumberOfTransfers + + If TrueOrFalse() = True Then + SyncLock (.AccountOne) + 'Thread.Sleep(0) + SyncLock (.AccountTwo) + .AccountOne.CreditBalance(100) + .AccountTwo.DebitBalance(100) + Console.WriteLine("{0}: Transfer {1}", _ + Thread.CurrentThread.Name, CurrentTransfer.ToString) + End SyncLock + End SyncLock + Else + SyncLock (.AccountTwo) + 'Thread.Sleep(0) + SyncLock (.AccountOne) + .AccountOne.DebitBalance(100) + .AccountTwo.CreditBalance(100) + Console.WriteLine("{0}: Transfer {1}", _ + Thread.CurrentThread.Name, CurrentTransfer.ToString) + End SyncLock + End SyncLock + End If + Next CurrentTransfer + + End With + + End Sub + + Private Function TrueOrFalse() As Boolean + Randomize() + Dim Test As Single = (Int((2 * Rnd()) + 1)) + Return CBool(Test = 1) + End Function + +End Class + +Class Account + + Private m_AccountBalance As Decimal = 0 + + Public Sub New(ByVal StartingBalance As Decimal) + m_AccountBalance = StartingBalance + End Sub + + Public ReadOnly Property AccountBalance() As Decimal + Get + AccountBalance = m_AccountBalance + End Get + End Property + + Public ReadOnly Property HasSufficientBalance(ByVal AmountToTransfer As Decimal) As Boolean + Get + HasSufficientBalance = CBool(m_AccountBalance >= AmountToTransfer) + End Get + End Property + + Public Function DebitBalance(ByVal AmountToDebit As Decimal) As Decimal + m_AccountBalance -= AmountToDebit + Return m_AccountBalance + End Function + + Public Function CreditBalance(ByVal AmountToCredit As Decimal) As Decimal + m_AccountBalance += AmountToCredit + Return m_AccountBalance + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.sln b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.sln new file mode 100644 index 0000000..8476d3b --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThreadDeadlock", "ThreadDeadlock.vbproj", "{7864B20A-722A-41F1-BE06-6DCD4C444FED}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {7864B20A-722A-41F1-BE06-6DCD4C444FED}.Debug.ActiveCfg = Debug|.NET + {7864B20A-722A-41F1-BE06-6DCD4C444FED}.Debug.Build.0 = Debug|.NET + {7864B20A-722A-41F1-BE06-6DCD4C444FED}.Release.ActiveCfg = Release|.NET + {7864B20A-722A-41F1-BE06-6DCD4C444FED}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.suo b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.suo new file mode 100644 index 0000000000000000000000000000000000000000..32b5f88a2f1b3b3817214c805a46d6b361591f49 GIT binary patch literal 7680 zcmeHMO>9(E6h5ylQjqeaf{21o1O%j$wv>V(NIPu>?ErQPMbpi6=Cz&jI&U&FZ6QFS zJLAHQ8(c{fO^knui3`Dq3lpPmU}IeP6I~dMF+o?lvGx1zdw1r|v@`Px)kwmfoOgfU zJ?Gwg&UemzbM5M?AEw@4_oI}g15zu~GfU(SU%P=aNu`w{H7Kw?Ju@@oHj1ElJKaJ% z@Hb?w^UiP)a-R2MP(5e~Xc=fJ=uQyNxxveCp(WlHwZabcii2NHOzDyo@{F9p2?tMW zWKrJcsVkMzG3TRSe`@&DsKuazR4All;ONMx90vCxl)B`!+Y#`&1}NlTUclD`@TF3p z#3U=Hq(_p-b8;L{3o_~UY?TQ&NsU3fq0LZ^D#KMbF_ZSibXZPER3g&p?L=B}&*2n0 z)Xq$L^0=dCKeuE3v|ny#Q2u_rW|_n@(Kx_5*Q5Ki{quZj|I0xueEoO%%BxXc1G*Qq z7IYtI9q4|Lo^J!n4}wh4L!gbIhe4Y_n?YMZ9J>|yHn04sm$UtLTDTqfZ0d>2zpQ@t z$g82Z>!*I({~fk@Ug`HRy~K?t>g|e7Ya$u9%&?QnWgJ_XTwP}@7vr=`PeyvoXne#P zQ`LsfWXyJk&8|c;=VUlwWyBdw+LqaG4Vv9fW=y@lq^Pzu?2M(Il$FY<&W8SED&b6K z3&ZOU^+kF(+48WROb~eWnwnVvy(BqXKLSOpIX9xQt;W(LIZv z6AJ0ZF@uc}1^nS`S@aEKB>6?va{?`trd$I47>on8MwT1rZ>J6G`eCey9>|tKJWmJY zs^2Dt)ELC_RUpbx=qX>KyzhD4T=gJ!Xc#}Px*z+J!-_{xtA_oY0{ru956YkZ;+``6 ziTXU%Q#f}Ad+(l_H+YV0E7nh6Lf%Ys44Ku$7_ZN3HM~3tZf4#aTi5|tTY~5tr=b6! z=XUkj_3Fb|OANYaN;g(ws~x3gQlsegv!EgHF-vqZinej+w<}Xfjvy-N!>AT%!f&V2 z;kfKZ&UtdkMPB~Tc~ehptZoQW3}7v^+JSui|09trr^W_sQ_*RZ>ObQz+B;E)`=6>} z1zSA*rxysSf7DkJQz?IHN(yK1M?!bx+)wZ~$d@rnQ2vzl1H+xKJpVH|OJY(P;P=GQ z>nCp}ueoAIyeen^5$ydKxH1m!_x8dOMuBsu9p3sGj|JsVtkm{D*Q~`JqOvveed1|p zx|z1pxvJG~h8M9|rM2>9-B2ym2ythP7)I^$UWdv){`rl`&wDnLQ_V%=EWl@vw80^F zC{SvbMzplx$5Ja?bvLLHy)=dB{&BlbHSTJ20ZwfAr4xgdIn5w&19D;IAsTkmj_U^_PDKy(YY|u9| z*B6BG0)3H=BlPC%h5qqApp-wL{@;!9ylXI(Mks!rKL(zRNGc&wlc)dl;ZNK9CU5`6 zTj}So?}D9b!(vL_(nkpV>HByu3Tl53V64VJ;+zd{r`PE2^AJ`&j8^xkTpTXt?ABrb z`MnRye?4A(P8$uw#M$~Z0KKEO=rEC2-u3By*JWf$_@C^f2_t&M1HhN7@-4}M{U0F9_M!P=TodrbAS-iq>hEUvj_XX~!E zKr$@C7tHHd-u?bYWgwPDur;8ns4(ZgDsCg>jV1OhKN9`+%JpTDmo{Jc zq~^8Ne<^6oeDPHKwhNjc31q{rWq%{{9_>)o~B_ p4TMoixqFA^!~J(TyHDL-Dc^xk9sg7s7qoA_{DaOLblk1X{~uHCVygfE literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj new file mode 100644 index 0000000..7416afb --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj.user b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadDeadlock/ThreadDeadlock.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadGui/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter14/ThreadGui/AssemblyInfo.vb new file mode 100644 index 0000000..55bb850 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadGui/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadGui/Calc.vb b/Source/VisualStudio2003/Chapter14/ThreadGui/Calc.vb new file mode 100644 index 0000000..d3f2f26 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadGui/Calc.vb @@ -0,0 +1,46 @@ +Option Strict On + +Public Class Calc + + Private m_NumberToAccumulate As Int32 = 0 + Private m_NumberReached As Int32 = 0 + Private m_RunningTotal As Decimal = 0 + + Public Sub New(ByVal NumberToAccumulate As Int32) + m_NumberToAccumulate = NumberToAccumulate + End Sub + + Public Property NumberToAccumulate() As Int32 + Get + Return m_NumberToAccumulate + End Get + Set(ByVal NewValue As Int32) + m_NumberToAccumulate = NewValue + m_NumberReached = 0 + m_RunningTotal = 0 + End Set + End Property + + Public ReadOnly Property NumberReached() As Int32 + Get + Return m_NumberReached + End Get + End Property + + Public Function Accumulate(ByVal ShowProgressInterval As Int32) As Decimal + Dim LoopCounter As Int32 + + For LoopCounter = m_NumberReached To (m_NumberReached + ShowProgressInterval - 1) + If m_NumberReached <= m_NumberToAccumulate Then + m_RunningTotal += LoopCounter + m_NumberReached += 1 + Else + Exit For + End If + Next LoopCounter + + Return m_RunningTotal + + End Function + +End Class diff --git a/Source/VisualStudio2003/Chapter14/ThreadGui/MainForm.resx b/Source/VisualStudio2003/Chapter14/ThreadGui/MainForm.resx new file mode 100644 index 0000000..621c721 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadGui/MainForm.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Assembly + + + Assembly + + + Assembly + + + False + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + Assembly + + + False + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + True + + + Assembly + + + MainForm + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter14/ThreadGui/MainForm.vb b/Source/VisualStudio2003/Chapter14/ThreadGui/MainForm.vb new file mode 100644 index 0000000..c566e05 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadGui/MainForm.vb @@ -0,0 +1,220 @@ +Option Strict On +Imports System.Threading +Imports System.Runtime.Remoting.Messaging + +Public Class MainForm : Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents cmdCalc As System.Windows.Forms.Button + Friend WithEvents lblResult As System.Windows.Forms.Label + Friend WithEvents txtNumber As System.Windows.Forms.TextBox + Friend WithEvents cmdCancel As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents txtInterval As System.Windows.Forms.TextBox + Private Sub InitializeComponent() + Me.cmdCalc = New System.Windows.Forms.Button + Me.txtNumber = New System.Windows.Forms.TextBox + Me.lblResult = New System.Windows.Forms.Label + Me.cmdCancel = New System.Windows.Forms.Button + Me.Label1 = New System.Windows.Forms.Label + Me.Label2 = New System.Windows.Forms.Label + Me.txtInterval = New System.Windows.Forms.TextBox + Me.SuspendLayout() + ' + 'cmdCalc + ' + Me.cmdCalc.Location = New System.Drawing.Point(160, 8) + Me.cmdCalc.Name = "cmdCalc" + Me.cmdCalc.Size = New System.Drawing.Size(144, 40) + Me.cmdCalc.TabIndex = 0 + Me.cmdCalc.Text = "Accumulate" + ' + 'txtNumber + ' + Me.txtNumber.Location = New System.Drawing.Point(24, 24) + Me.txtNumber.Name = "txtNumber" + Me.txtNumber.Size = New System.Drawing.Size(112, 22) + Me.txtNumber.TabIndex = 1 + Me.txtNumber.Text = "10000" + ' + 'lblResult + ' + Me.lblResult.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.lblResult.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.lblResult.Location = New System.Drawing.Point(16, 128) + Me.lblResult.Name = "lblResult" + Me.lblResult.Size = New System.Drawing.Size(288, 40) + Me.lblResult.TabIndex = 2 + Me.lblResult.Text = "Result is shown here" + ' + 'cmdCancel + ' + Me.cmdCancel.Enabled = False + Me.cmdCancel.Location = New System.Drawing.Point(160, 64) + Me.cmdCancel.Name = "cmdCancel" + Me.cmdCancel.Size = New System.Drawing.Size(144, 40) + Me.cmdCancel.TabIndex = 3 + Me.cmdCancel.Text = "Cancel" + ' + 'Label1 + ' + Me.Label1.Location = New System.Drawing.Point(24, 8) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(88, 16) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "Number" + ' + 'Label2 + ' + Me.Label2.Location = New System.Drawing.Point(24, 64) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(120, 16) + Me.Label2.TabIndex = 6 + Me.Label2.Text = "Display interval" + ' + 'txtInterval + ' + Me.txtInterval.Location = New System.Drawing.Point(24, 80) + Me.txtInterval.Name = "txtInterval" + Me.txtInterval.Size = New System.Drawing.Size(112, 22) + Me.txtInterval.TabIndex = 5 + Me.txtInterval.Text = "100" + ' + 'MainForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(320, 212) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.txtInterval) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.cmdCancel) + Me.Controls.Add(Me.lblResult) + Me.Controls.Add(Me.txtNumber) + Me.Controls.Add(Me.cmdCalc) + Me.Name = "MainForm" + Me.Text = "GUI multithreading" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Delegate Sub CalcDelegate(ByVal AnyNumber As Int32) + Private Delegate Sub ProgressDelegate(ByVal CurrentTotal As Decimal, ByVal NumberReached As Int32, ByRef CancelRequest As Boolean) + Private m_CancelRequested As Boolean = False + + Private Sub ButtonCalc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCalc.Click + + 'Init calculation + Me.cmdCalc.Enabled = False + Me.cmdCancel.Enabled = True + m_CancelRequested = False + + 'Use asynch delegate to launch new thread from the thread pool + Dim CalcAccumulation As CalcDelegate = New CalcDelegate(AddressOf CalculateAccumulation) + CalcAccumulation.BeginInvoke(Convert.ToInt32(Me.txtNumber.Text), AddressOf CalcComplete, Nothing) + + End Sub + + Private Sub ButtonCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancel.Click + + 'Request has been cancelled + m_CancelRequested = True + + End Sub + + Private Sub CalculateAccumulation(ByVal NumberToAccumulate As Int32) + Dim CalcObject As New Calc(NumberToAccumulate), CurrentTotal As Decimal = 0 + Dim CancelRequested As Boolean = False + + With CalcObject + + Do While .NumberReached <= NumberToAccumulate + CurrentTotal = .Accumulate(Convert.ToInt32(Me.txtInterval.Text)) + ShowProgress(CurrentTotal, .NumberReached, CancelRequested) + 'Throw New ApplicationException("Test exception") + If CancelRequested = True Then + Exit Do + End If + Loop + + End With + + End Sub + + Private Sub ShowProgress(ByVal CurrentAccumulation As Decimal, ByVal NumberReached As Int32, ByRef CancelRequest As Boolean) + + If Me.InvokeRequired = True Then + + 'Transfer to GUI thread to show progress + Dim CancelRequested As Object = False + Dim SP As ProgressDelegate = New ProgressDelegate(AddressOf ShowProgress) + Dim Arguments() As Object = New Object() {CurrentAccumulation, NumberReached, CancelRequested} + Me.Invoke(SP, Arguments) + CancelRequest = DirectCast(CancelRequested, Boolean) + + Else + + 'We're on the GUI thread, so just show progress + With Me.lblResult + .Text = "Number reached: " & NumberReached.ToString + .Text += Environment.NewLine + .Text += "Accumulated total: " & CurrentAccumulation.ToString + End With + + 'Pause for a short time to allow user to read display + Thread.CurrentThread.Sleep(100) + + 'Return any cancellation request + CancelRequest = m_CancelRequested + + End If + + End Sub + + Private Sub CalcComplete(ByVal CalcResult As System.IAsyncResult) + Dim Result As AsyncResult = CType(CalcResult, AsyncResult) + Dim OriginalDelegate As CalcDelegate = CType(Result.AsyncDelegate, CalcDelegate) + + 'Called when asynch thread completes + Me.cmdCalc.Enabled = True + Me.cmdCancel.Enabled = False + + Try + 'Find out if anything dodgy happened in the async thread + OriginalDelegate.EndInvoke(CalcResult) + Catch Exc As ApplicationException + MsgBox(Exc.Message, MsgBoxStyle.OKOnly, "Async thread exception") + End Try + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.sln b/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.sln new file mode 100644 index 0000000..a5bb0e6 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThreadGui", "ThreadGui.vbproj", "{DFCF340A-17A9-4859-8638-D4BDED3F4BD0}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DFCF340A-17A9-4859-8638-D4BDED3F4BD0}.Debug.ActiveCfg = Debug|.NET + {DFCF340A-17A9-4859-8638-D4BDED3F4BD0}.Debug.Build.0 = Debug|.NET + {DFCF340A-17A9-4859-8638-D4BDED3F4BD0}.Release.ActiveCfg = Release|.NET + {DFCF340A-17A9-4859-8638-D4BDED3F4BD0}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.suo b/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.suo new file mode 100644 index 0000000000000000000000000000000000000000..311a3859351af74ae6380f0a1f1afe3a483eaa20 GIT binary patch literal 8704 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 ftOm@q*dZ(E4L( literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.vbproj b/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.vbproj new file mode 100644 index 0000000..cd805b7 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.vbproj @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.vbproj.user b/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.vbproj.user new file mode 100644 index 0000000..0d75857 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadGui/ThreadGui.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadGui/obj/Debug/ThreadGui.MainForm.resources b/Source/VisualStudio2003/Chapter14/ThreadGui/obj/Debug/ThreadGui.MainForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..fb1fcff34a56cd02613ebb7250d08c57a224ff2d GIT binary patch literal 7011 zcmeHLYiJx*6h7N*_LVe!2}j3_C>+EtLb90O|z*;t**1XcQ-@l5oTu7 zrcxAZef$x{`f9a^h!jz%6-#PC!Cz9OSfs%}{b4H-5G;byVzK(&*_rI@Bc!AO6>`bV z%stQVoclVn=g(dJ(nUna(eF)+>IRcT158)*TAJyTZv#xoFs(f(>uFV!#FSnsnO6)^ zX0~dA8Aa*#;3G`aMOE3_5ekR8!{Kl!+#ZbNB_pq~tqRKsuB~F*$zy!%ttk0pQz+Q3Go240|;5f83q#W%ywrtWIH-C-C?0q7`8n1NNP%u z!~=qXNeNjK5mU12Y=`!^;XWMxHwkZD#yxeuz^X*G7Y`J*z zb@!n&Z~T~k<;`Dj9y|KY^PjyNNlM38P24yY`TWG`oohCaoqnq6?8$e=uKeEZn)qJt z`DOE-ul~4aLcNyE+@RL?6Yig{{pI=O(k}0vJ5MznX+7F<_5A9)CJr9%%%0A7oj7y( z{);cRJy^5KyZ!oj=*dIw<@#$iM89FRubW3ShW9Pl0zY7U0poQT^L7@!1O09AE}@UR ziL!Wpif0UcKl%~yUxH2mIy&A5(0Aj#8FE4JKLT$d`XKrkXji~%^%J$PB!h-Xgi?s2 z#3)MwG5?8l~;9AOhqNa&rMftDKf>As&xrMiK*T752v=8sg*>^d(H>^m(rL5#3R$ zQbN12JZr9&}+h?&J9B#Ra)9s2tiCfODbo(fT!f9kXLlML*AqmsR zdmT#4%9Wh1->So^C>N-7ejZ|7MKJ}=dCI2;pwuI@YKl$}4f8SQ)r2a6L?PNGnQL_b z5OixtO%LQJCCz#i?&w7|+gQ#;&Zd#C-k`XkXV5;HG=kmFx09drzYNewzfDduXvoGdsIlw2$daU^;YyPE^PwY2f? zhlQ9+VO19mafBtroKml_9BSvnpt)c# z%F?1NNC}3;BN(dI=yYQfn@e5U>pCAU}+mV0a}iQEP_-=Y>wHel2zN)js!9lLBvNiL#dPBio;I|j>Df!bnI z`>nk83x>foWs)AZQf$$i3YN>L%@(dQBR08Ay3vv@0TL)~{mL_<35TYb!FK8wG@WhJ zCr{j)sE#OEw!^gMk0uFg{G^0ysW>**0xqW?tsPN-$W>;TrzX_d# zci!sL-Ca`iQ&-MqeJ<;>^R+Q|!tkH2Z)Y#g + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadMonitor/FactorialCalc.vb b/Source/VisualStudio2003/Chapter14/ThreadMonitor/FactorialCalc.vb new file mode 100644 index 0000000..0831a03 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadMonitor/FactorialCalc.vb @@ -0,0 +1,18 @@ +Public Class FactorialCalc + + Public Event FactorialComplete(ByVal Factorial As Double, _ + ByVal TotalCalculations As Double) + + Public Shared Sub Factorial() + + Dim Working As Long = 1, FactorialResult As Double = 1 + Dim TotalCalcs As Long = 0 + Threading.Thread.Sleep(5000) + For Working = 1 To 20000000 + FactorialResult *= Working + TotalCalcs += 1 + Next Working + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter14/ThreadMonitor/MainForm.resx b/Source/VisualStudio2003/Chapter14/ThreadMonitor/MainForm.resx new file mode 100644 index 0000000..c285df5 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadMonitor/MainForm.resx @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + Assembly + + + 17, 17 + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + Assembly + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + MainForm + + + True + + + 80 + + + True + + + Assembly + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter14/ThreadMonitor/MainForm.vb b/Source/VisualStudio2003/Chapter14/ThreadMonitor/MainForm.vb new file mode 100644 index 0000000..56ff97b --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadMonitor/MainForm.vb @@ -0,0 +1,328 @@ +Option Strict On +Imports System.Threading +Imports System.Diagnostics + +Public Class MainForm : Inherits System.Windows.Forms.Form + + Private UserThreads As New Collection + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents ProcessList As System.Windows.Forms.ListBox + Friend WithEvents LabelThread As System.Windows.Forms.Label + Friend WithEvents LabelProcess As System.Windows.Forms.Label + Friend WithEvents ThreadList As System.Windows.Forms.ListView + Friend WithEvents LabelThreadName As System.Windows.Forms.Label + Friend WithEvents DisplayTimer As System.Windows.Forms.Timer + Friend WithEvents LaunchThread As System.Windows.Forms.Button + Friend WithEvents Splitter As System.Windows.Forms.Label + Friend WithEvents ManagedThreadList As System.Windows.Forms.ListView + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Me.ProcessList = New System.Windows.Forms.ListBox + Me.LabelThread = New System.Windows.Forms.Label + Me.LabelProcess = New System.Windows.Forms.Label + Me.ThreadList = New System.Windows.Forms.ListView + Me.LabelThreadName = New System.Windows.Forms.Label + Me.DisplayTimer = New System.Windows.Forms.Timer(Me.components) + Me.LaunchThread = New System.Windows.Forms.Button + Me.Splitter = New System.Windows.Forms.Label + Me.ManagedThreadList = New System.Windows.Forms.ListView + Me.SuspendLayout() + ' + 'ProcessList + ' + Me.ProcessList.ItemHeight = 16 + Me.ProcessList.Location = New System.Drawing.Point(16, 40) + Me.ProcessList.Name = "ProcessList" + Me.ProcessList.Size = New System.Drawing.Size(120, 292) + Me.ProcessList.Sorted = True + Me.ProcessList.TabIndex = 0 + ' + 'LabelThread + ' + Me.LabelThread.Location = New System.Drawing.Point(168, 8) + Me.LabelThread.Name = "LabelThread" + Me.LabelThread.Size = New System.Drawing.Size(168, 24) + Me.LabelThread.TabIndex = 2 + Me.LabelThread.Text = "Win32 threads in process:" + ' + 'LabelProcess + ' + Me.LabelProcess.Location = New System.Drawing.Point(16, 8) + Me.LabelProcess.Name = "LabelProcess" + Me.LabelProcess.Size = New System.Drawing.Size(96, 24) + Me.LabelProcess.TabIndex = 3 + Me.LabelProcess.Text = "Processes" + ' + 'ThreadList + ' + Me.ThreadList.Location = New System.Drawing.Point(176, 40) + Me.ThreadList.Name = "ThreadList" + Me.ThreadList.Size = New System.Drawing.Size(600, 296) + Me.ThreadList.TabIndex = 4 + Me.ThreadList.View = System.Windows.Forms.View.Details + ' + 'LabelThreadName + ' + Me.LabelThreadName.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.LabelThreadName.Location = New System.Drawing.Point(336, 8) + Me.LabelThreadName.Name = "LabelThreadName" + Me.LabelThreadName.Size = New System.Drawing.Size(128, 24) + Me.LabelThreadName.TabIndex = 5 + Me.LabelThreadName.Text = "Thread name" + ' + 'DisplayTimer + ' + Me.DisplayTimer.Interval = 1000 + ' + 'LaunchThread + ' + Me.LaunchThread.Location = New System.Drawing.Point(16, 384) + Me.LaunchThread.Name = "LaunchThread" + Me.LaunchThread.Size = New System.Drawing.Size(120, 40) + Me.LaunchThread.TabIndex = 6 + Me.LaunchThread.Text = "Launch thread" + ' + 'Splitter + ' + Me.Splitter.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.Splitter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Splitter.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.8!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Splitter.Location = New System.Drawing.Point(16, 360) + Me.Splitter.Name = "Splitter" + Me.Splitter.Size = New System.Drawing.Size(760, 3) + Me.Splitter.TabIndex = 7 + ' + 'ManagedThreadList + ' + Me.ManagedThreadList.Location = New System.Drawing.Point(176, 384) + Me.ManagedThreadList.Name = "ManagedThreadList" + Me.ManagedThreadList.Size = New System.Drawing.Size(600, 296) + Me.ManagedThreadList.TabIndex = 8 + Me.ManagedThreadList.View = System.Windows.Forms.View.Details + ' + 'MainForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(800, 700) + Me.Controls.Add(Me.ManagedThreadList) + Me.Controls.Add(Me.Splitter) + Me.Controls.Add(Me.LaunchThread) + Me.Controls.Add(Me.LabelThreadName) + Me.Controls.Add(Me.ThreadList) + Me.Controls.Add(Me.LabelProcess) + Me.Controls.Add(Me.LabelThread) + Me.Controls.Add(Me.ProcessList) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Thread monitor" + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + + 'Setup thread display + With Me.ThreadList + .Columns.Add("Id", 50, HorizontalAlignment.Right) + .Columns.Add("Priority", 100, HorizontalAlignment.Left) + .Columns.Add("State", 80, HorizontalAlignment.Left) + .Columns.Add("Wait reason", 120, HorizontalAlignment.Left) + .Columns.Add("Time in app", 100, HorizontalAlignment.Left) + .Columns.Add("Total time", 100, HorizontalAlignment.Left) + End With + + 'Setup managed thread display + With Me.ManagedThreadList + .Columns.Add("Id", 50, HorizontalAlignment.Right) + .Columns.Add("Name", 150, HorizontalAlignment.Left) + .Columns.Add("Priority", 100, HorizontalAlignment.Left) + .Columns.Add("State", 120, HorizontalAlignment.Left) + .Columns.Add("Background?", 100, HorizontalAlignment.Left) + .Columns.Add("Pooled?", 80, HorizontalAlignment.Left) + End With + + 'Show processes + UpdateProcessDisplay() + 'Show Win32 threads for first process + Me.ProcessList.SetSelected(0, True) + 'Set thread displays to update regularly + Me.DisplayTimer.Interval = 1000 + Me.DisplayTimer.Enabled = True + + End Sub + + Private Sub ProcessList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProcessList.SelectedIndexChanged + + 'Display threads for process chosen by end-user + UpdateWin32ThreadDisplay(DirectCast(ProcessList.SelectedItem, Process).Id) + + End Sub + + Private Sub LaunchThread_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LaunchThread.Click + + Dim TempThread As New Thread(New ThreadStart(AddressOf FactorialCalc.Factorial)) + 'User wants new thread - launch and add to collection + With TempThread + .Name = "User thread " & UserThreads.Count.ToString + .Priority = ThreadPriority.BelowNormal + UserThreads.Add(TempThread, .GetHashCode.ToString) + .Start() + End With + + End Sub + + Private Sub DisplayTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DisplayTimer.Tick + + 'Re-display threads for currently-selected process + UpdateUserThreadDisplay() + UpdateWin32ThreadDisplay(DirectCast(ProcessList.SelectedItem, Process).Id) + + End Sub + + Private Sub UpdateProcessDisplay() + Dim MachineProcesses() As Process + + 'Retrieve, store and display processes on this machine + MachineProcesses = Process.GetProcesses() + With Me.ProcessList + .DataSource = MachineProcesses + .DisplayMember = "ProcessName" + End With + + End Sub + + Private Sub UpdateWin32ThreadDisplay(ByVal SelectedProcessId As Integer) + Dim SelectedProcess As Process + Dim ThisThread As ProcessThread, LV_item As ListViewItem + + 'Get Win32 threads for this process and display them + SelectedProcess = Process.GetProcessById(SelectedProcessId) + LabelThreadName.Text = SelectedProcess.ProcessName + + With Me.ThreadList + .BeginUpdate() + .Items.Clear() + + 'Iterate through every Win32 thread in this process + For Each ThisThread In SelectedProcess.Threads + + Try + 'Add thread id + LV_item = New ListViewItem(ThisThread.Id.ToString) + 'Add thread details + With LV_item.SubItems + 'Thread priority + .Add(ThisThread.PriorityLevel.ToString) + 'Thread state + .Add(ThisThread.ThreadState.ToString) + 'Reason for thread wait + If ThisThread.ThreadState = Diagnostics.ThreadState.Wait Then + .Add(ThisThread.WaitReason.ToString) + Else + .Add(vbNullString) + End If + 'Thread time in app + .Add(ThisThread.UserProcessorTime.TotalMilliseconds.ToString) + 'Thread time in OS + .Add(ThisThread.TotalProcessorTime.TotalMilliseconds.ToString) + End With + 'Display the thread + .Items.Add(LV_item) + + Catch Exc As InvalidOperationException + 'Thread's disappeared - ignore + + End Try + + Next ThisThread + + .EndUpdate() + End With + + End Sub + + Private Sub UpdateUserThreadDisplay() + Dim ThisThread As Threading.Thread, LV_item As ListViewItem + + 'Iterate through managed threads for current process + With Me.ManagedThreadList + .BeginUpdate() + .Items.Clear() + + 'Iterate through every thread in this process + For Each ThisThread In UserThreads + + If ThisThread.IsAlive Then + + Try + 'Add thread id + LV_item = New ListViewItem(ThisThread.GetHashCode.ToString) + 'Add thread details + With LV_item.SubItems + 'Add thread name + .Add(ThisThread.Name) + 'Thread priority + .Add(ThisThread.Priority.ToString) + 'Thread state + .Add(ThisThread.ThreadState.ToString) + 'Thread is alive? + .Add(ThisThread.IsAlive.ToString) + 'Background thread? + .Add(ThisThread.IsBackground.ToString) + 'Threadpool thread? + .Add(ThisThread.IsThreadPoolThread.ToString) + End With + 'Display the thread + .Items.Add(LV_item) + + Catch Exc As Threading.ThreadStateException + 'Thread's disappeared - ignore + UserThreads.Remove(ThisThread.GetHashCode.ToString) + + End Try + + Else + + 'Thread's dead - remove from collection + UserThreads.Remove(ThisThread.GetHashCode.ToString) + + End If + + Next ThisThread + + .EndUpdate() + End With + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.sln b/Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.sln new file mode 100644 index 0000000..5159631 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThreadMonitor", "ThreadMonitor.vbproj", "{D7CF35FF-B087-4604-8B22-67DB44DC7B50}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {D7CF35FF-B087-4604-8B22-67DB44DC7B50}.Debug.ActiveCfg = Debug|.NET + {D7CF35FF-B087-4604-8B22-67DB44DC7B50}.Debug.Build.0 = Debug|.NET + {D7CF35FF-B087-4604-8B22-67DB44DC7B50}.Release.ActiveCfg = Release|.NET + {D7CF35FF-B087-4604-8B22-67DB44DC7B50}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.suo b/Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.suo new file mode 100644 index 0000000000000000000000000000000000000000..5171f36f8808718dd7c4e88e06d3bedaff9d012f GIT binary patch literal 8704 zcmeHMTWnNC7@lp5T%_C-Lx2Y5kvFfpPgCdMd<_~0dKG!TvPMGZb_q7i-47pdPjbEbQG_Tt&L8c}BRpPBj3 zf9C&Z=D*GC)hqL_U3h)TcfwV6iCS@Ebf&n?f%lA%#HmR=J5* z;19@JXYb)O)ZFjsfEj?9fZ2dqfZG9c0QCUw_guTaiKco>)DkPuEiC-P?r(z8!%I{TOUkB zlUCg5h$Zq?mIU)cR&OF{8i&kYqtnW!AZYde<+cTSwp!3dEFyD zp)L+KCy-2JdaYq$z#R?z)NK*uqxRi zf9@f3C$IcTyUQNU&7WSMnsXHUZei`!uGz#Ts=hR=X%hmhoLi! zfhP1t6~6iO{d2+3{mr{iAN+aok8N*m2)Za6MH^(zNL@=oa>{%Fkc9lS029EdPA#G? zCxB1e<1?bT$FGjRJrGVSLS_!ij#O3=$67`)7XucSfIQsM2x2WYnpsB<&<}|WmraC$ z8-&!9)PM!=h5S8eH48s}o1_i(A<9JLIC<1UJO}t^c~ei5m|Z`lh+r=C8j-QSSBc#E zSG-e|tzb2@hjE|zf>-@x?sFQz;^xntN@MMvo={PieuBTu|CpnA<9fkc-Z|PHp;CblDD@W|0j2m+N#p08?{#vN< z=;+!SQR}NcDG%(Et(rq7~Q%qzPNlZb7RR z*k=41fZ2*~+JS9B9YC)gU;4#K+Plgx(vUdm@Ra&wX2P%J@d>>)DaS{o?XbUvkg6K} zCq3g8i#tPc>imB2WJaQ6MkyQc+xA}#|3%>2#~_SSiN8Jz2C*`EK&jGb+aJ$Gl%W)j z8@C(?eg34rBoS@&9MwAaW7ctC8Nc)!_b93l`}gU)8L#~B#ivhd0~x81QZ|ZXaDf?! z!6W(z6oE-<488G5r2#SNv<+;RN_OeE;^;;2CI&~!zB*v5DXAniC6m}YhoLK zZGxH**NR^NHrIfjA8C&ty>0S6`z>gnl)K`vsQ&lX;$# zD{l+N(~S2nq@5wpP*W+}4w+?7<%o^Qn@y}WGjyu@$XIsR2(RA`tU5cigC>SK7uKD3 z4^t~iA#?C91+%0!X$}dPm6B)060@gX&Dk6N z`ttSJp=Vc}dAH_;g}=+xD*N%HZR^e)dF-XH&OhCKzo@c9x|IYgd?T45LWgrW~ zgu4BpCuP1ZM-~ zKeOWPj#svS*>~o* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.vbproj.user b/Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.vbproj.user new file mode 100644 index 0000000..29c78d4 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadMonitor/ThreadMonitor.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadMonitor/obj/Debug/ThreadMonitor.MainForm.resources b/Source/VisualStudio2003/Chapter14/ThreadMonitor/obj/Debug/ThreadMonitor.MainForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..f1a09c667290953a3c0d0cd7ea114f47948123ef GIT binary patch literal 8492 zcmeHMYiJx*6h6}=o82T$A9=J=YhyLFwd=BJOkYxI&0-r&(lr|&pf%pzy-CK-Bh1V; zO|V*oqO~d(3dOca5tZVbf+7fliVCd?7GFgK^@kQDRe$(H3hH-fXS%aHyJU%}_Qwv~ z%-nOobIy0qeVx1c?9{LCN<{Q5%BsYKX>m0&z)d}4q_}zUYk;#fH^ObInbHkKPMUsX zMzdsYObNHeGf72G-Nq*d z^_^VXlw7xtb)~x2c5LXpkw@2W5G>nKYEe|jf483IF%D^I}+_2?iyY<+|iNlin2~N=6Kqw z=t-u?lgz@PM4W->(T4Te?%EE=VFClAjm)<7dmZaNn$@{xwv9hfFe-6f)-b2@rL!|E z@h!3VffGIZ0-x-ERNeN{Q~N)D^3V^drw^b1>*$deo0h-4;@pLk-EW?F>-Na}I@^DV!h{cY)UiRvY{pKLs|^vI$! zkI!H7^WpcG{8@MNH78E4T%l|k4xihzuk+KhtJeOuxpw0dSMJ?hRdc%UmY+j+d_54l z>!Tg}?hZbG?EaI%9S^;LCHFg4+n#Eo@8%HQg!(tAAFIJ1Jnx`%pnQb({Q;tvtB88> zT?1?vzS|+2#QQYxhk!Ft22j3$odD#+c$;WD4ty)V*W!B)bYiH#fwzwLkHB4k&3@Fc z#`|DBQTST2Xq03aj8Kd?4HKgbDUkM&PHD6Zqi`~8mqb_QD;R)}(^fRg03QdVJb>Gf zK=UN5d{qeOg}z23aLMqO(;jeN?sd@%7AZ6;wgpB>d~s^W&b8PN+li($-GjzvZ(~37 zRWuz$Lz}lD0pEN&(g~d%YiyjD-HEidk+fha|(lqya8eiLp=RlWtiO8mQwc8k{S@;Qb0ec zb%1X!4tJ;7^yI#V5l<+*J$Mk*RmMPn07KDo40-9M=3|R2N6An88K|z$ zUnb>~-LL?&vXruy;8_5#F9r0Inzs=1BVlhaGPWlR@hoR^c^zt3`PIBcwl{&XAL6I5 z55TqF`Bi>Y+MBWI7gzOC`4F&`#bJIr7XT*0X+nSF5pVG{;25OdY~nG)grgvpt`Vk} zIjKyk99m#%cQGZyhlVI9I1px0z2xIpEs%|lH77^5mDM3zog}G#j!(<()!?N_r|jM} z`21dC&GHMY8?T+F6AyMk9d^GLOxmjPyycwH51=Jypsk}}dN;8Y~ z;3Bm^9m<&e4wD<(cX7jz(>#>QUV3_B4eF3=ifh$&O_``q>FO9WxJbc+7T;}&k6JCG zigyFd@j=|J?A8=hxRz#y2ryNNCnyD_5(INrmpb9d@4=wss=a7ye@0xYZq*Hy*@Uhu zii$bxa=7BYx*g(mrv&qdQKXO)(O)_dSZYh&=iR+!Y zFqJV3uB9e&q6K3dcW%wfNgBp~F4uhVBBzIi z9$WHy?h>5qNV6szQR|Zxg=edtRo0Xji5_N{tAd)Pg)&7LQK*P0kMrqkpQw#lEMMxd*X$3ObC%H(VX|6 zuL~e`p{jn?AHZoqL3e}$IQuDdgIf&=Qz2m}AkH+YJ42x zxj>*eze{(jHy51h_K!05jM*(sh!a43il$D)GJY+ogYpr`+8+xuk7pDr2qf_>GL18Xv8Z3 literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter14/ThreadSynch/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter14/ThreadSynch/AssemblyInfo.vb new file mode 100644 index 0000000..3054d09 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadSynch/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadSynch/CountMonitor.vb b/Source/VisualStudio2003/Chapter14/ThreadSynch/CountMonitor.vb new file mode 100644 index 0000000..1ccdc72 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadSynch/CountMonitor.vb @@ -0,0 +1,86 @@ +Option Strict On +Imports System.Threading + +Module CountMonitor + + Sub Main() + Dim CountTest As New CountCoordinator(5) + Console.ReadLine() + End Sub + +End Module + +Class CountCoordinator + + Private Const MAX_COUNT As Integer = 99 + Private m_Counter As Integer = 0 + + Public Sub New(ByVal NumberOfCounters As Integer) + Dim EachWorker As Integer, NewThread As Thread, Worker As CountWorker + + 'Show starting conditions + Console.WriteLine("Count started at {0} with max value of {1}.", _ + CStr(Me.CurrentCount), CStr(Me.MaxCount)) + Console.WriteLine("{0} worker threads are doing the counting.", _ + CStr(NumberOfCounters)) + 'Start specified number of worker threads + For EachWorker = 1 To NumberOfCounters + Worker = New CountWorker(Me, EachWorker) + NewThread = New Thread(AddressOf Worker.IncrementCount) + NewThread.Start() + Next EachWorker + + End Sub + + Public Property CurrentCount() As Integer + Get + Return m_Counter + End Get + Set(ByVal Value As Integer) + m_Counter = Value + End Set + End Property + + Public ReadOnly Property MaxCount() As Integer + Get + Return MAX_COUNT + End Get + End Property + +End Class + +Class CountWorker + Private m_Coordinator As CountCoordinator + Private m_WorkerId As Integer + + Public Sub New(ByVal Coordinator As CountCoordinator, ByVal WorkerId As Integer) + m_Coordinator = Coordinator + m_WorkerId = WorkerId + End Sub + + Public Sub IncrementCount() + + 'Increment shared counter until equal to maximum allowed + With m_Coordinator + + Do While .CurrentCount < .MaxCount + 'SyncLock (m_Coordinator) + Select Case .CurrentCount + Case Is < (.MaxCount - 10) + Thread.Sleep(0) + .CurrentCount += 10 + Case Is < .MaxCount + Thread.Sleep(0) + .CurrentCount += 1 + Case Else + End Select + 'End SyncLock + Console.WriteLine("Worker {0} current count {1}", _ + CStr(m_WorkerId), CStr(.CurrentCount)) + Loop + + End With + + End Sub + +End Class diff --git a/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.sln b/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.sln new file mode 100644 index 0000000..af0185a --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThreadSynch", "ThreadSynch.vbproj", "{970BC01E-8AA4-445D-B714-C5C376206C09}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {970BC01E-8AA4-445D-B714-C5C376206C09}.Debug.ActiveCfg = Debug|.NET + {970BC01E-8AA4-445D-B714-C5C376206C09}.Debug.Build.0 = Debug|.NET + {970BC01E-8AA4-445D-B714-C5C376206C09}.Release.ActiveCfg = Release|.NET + {970BC01E-8AA4-445D-B714-C5C376206C09}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.suo b/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.suo new file mode 100644 index 0000000000000000000000000000000000000000..4e20daa82dd00e8854f1382080e47a3a4dbcba8b GIT binary patch literal 7680 zcmeHMO>9(E6h6}yp-A~rK}5kPQUs(;3*}!>I#U$v@Y5EHrkm-^Ynd`LZ!$A&AwVKK zAIoB*wT=qbpsQpex--{l0tOo%d$inR$bais4S~d-w0% zbI!fzeCOOd*RC%4;o|!%ew4DbM;hhERI}XSYY(B!tkPnU1{7GoF*P-%8%0pOoo=BO z_!GP~xqCPVZ|?V82Tl

    %}cv>cN ziZ)Ljsg~YrI&$EvmQO>C81w`c3+XT@Ix;5vL45?J9yzHy0zQ`kh5S1a@G}8?sWc!l z$;%1pl_cH;If|zZo=khb#)NC6LCHg#As;n{t8QW@?TcwYC~*f;GK}X*=~vVzz)c*b z+Q|Za%CZDGD1GAgyYAG+p1CIm2iQh=Odsu^+hs6dAb}{2JI&q-e0K5iOFu7t_TVe+ zZ_T^-%kJ;6%yp$-!}Jn2pQu-hBKAZwZd+j|Q^+|fWpYiCSRuw~=O2sqTK)0kc3M?i zBFR|F8MS&6$%2#PfW=W~IGM7oL3`NR=j77r^X8J;{IHYGIvG1tP@OG<$xOnT%zML| zo*Ibua!5!~qUf_Ef?6Cirtt;QJ&&Ge z6w-}jh7?BZN4+1TBQ6qW6|Dlk?#4WhOuBejNvI9LU&amGM`~rIasGDNu&I0WBcPlI zZ=>Lp@&-df&<_#Mj76AvtG)g7Np%=2G>RXo4q{yjYE8*a?F9TS(he#=*Xtg4>T>#A zb?)v7?7M^2(7RTdk9ClrzN8-c8RH#vr!@MT1U0MZjcu%e)|Tq}=J7@ULC>xASbOzR z$P$C@S+Wn3q#zgdFN$&;Jq~IPd_H53Ql0Ea+c@-F^VAMrd!YB0Y?2QAHY**D%Qn0@ zPXTX{m;Q0u)RPpX8vz$XkcCz|RILAZIMRF?gupVDtY*3XG5#X@5OuiznHpBG*42M{ zfuQ}UOSo<`nG7cYf*FvN4%u{Z3nj&$}J!_3=-yPk!FpO0F7S4xN@AfS(Sy$S|Ir zFsL@!E_?CoLa7VCEpVu9=-;N?b{ocRLEen|Rs~~Q)t5WutemOf(%WSM>X%hOIfhYj z6(A&_8l?{10>si_EEuW{qovtq;LHfM3=-0+t`9eaV-p~xRe+G7z3ccQgU*x>sm;ku z`+~5-0*);8NIRi_JP#=452*ilV?56qOyv=ZU*`{lCL@AsNYvr#e?9bRdtVmqzjQ(U z^vzi?qLwYD_$`05gFa>9-AGXTdjMk%{xRZ9!P^-b^*WD0>QS`n4bwPWPFdGs|HZWr zN`ECjea;wIsrb|y9zOFRt^-6Kialp+^wA3t3ci3e51ldrX&i!$D`g>^Wz;qj*0f%q zfkvN(C20GhZP1=*C)-qO8|vMfx#_0nn1dV4 z>zCj8-koFSMXu6HER90Yl-fZ?E-?tnCCe70DUsc{O=a2zb_IgZ9(=UJ#3vCe`{^E1 z-rG-=-l23%sdaPgJaz7#P2P6No>`Z+4+z9alD9TCl*mMf?TEv=m7VfD)QvF-(Dv5- zv03NDiyVS;!6;=f0G!r70sh0_nukoTK0T2)=dKy0nEpNWYT?2DZ!ce85Ph-r{3i_; zmj0ojEqCR>-u36lo_^z-*Ut6b`0!12N+R<3Bl@Tuf|D781~XQ#gz@;OVp;|KBR!re zg5u937<hb)8yp?GN}Cew^bElf_$i%lww$BKuc5D)_!l1Lp4;4i_hZ#*1H1!aR8s2>g!ZR3 dPd|f*un~hy{1aq+tugh|uQgx2{kJmxzW@u^Onv|W literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.vbproj b/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.vbproj new file mode 100644 index 0000000..0f017c1 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.vbproj.user b/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.vbproj.user new file mode 100644 index 0000000..ae74d43 --- /dev/null +++ b/Source/VisualStudio2003/Chapter14/ThreadSynch/ThreadSynch.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/Heartbeat/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter15/Heartbeat/AssemblyInfo.vb new file mode 100644 index 0000000..83b7225 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/Heartbeat/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vb b/Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vb new file mode 100644 index 0000000..f4660be --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vb @@ -0,0 +1,20 @@ +Option Strict On + +Imports System +Imports System.Runtime.Remoting.Messaging + +Public Class Heartbeat : Inherits MarshalByRefObject + Public Event HeartbeatLocal(ByVal LocalComponent As String) + Public Event HeartbeatRemote(ByVal LocalMonitor As String, ByVal StatusReport As String) + + _ + Public Sub Heartbeat(ByVal LocalComponent As String) + RaiseEvent HeartbeatLocal(LocalComponent) + End Sub + + _ + Public Sub RemoteHeartbeat(ByVal LocalMonitor As String, ByVal StatusReport As String) + RaiseEvent HeartbeatRemote(LocalMonitor, StatusReport) + End Sub + +End Class \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vbproj b/Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vbproj new file mode 100644 index 0000000..cf52775 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vbproj @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vbproj.user b/Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vbproj.user new file mode 100644 index 0000000..9715303 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/Heartbeat/Heartbeat.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/HeartbeatClient/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter15/HeartbeatClient/AssemblyInfo.vb new file mode 100644 index 0000000..2c8b8da --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/HeartbeatClient/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vb b/Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vb new file mode 100644 index 0000000..435b7d7 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vb @@ -0,0 +1,48 @@ +Option Strict On + +Imports System +Imports System.Runtime.Remoting +Imports Monitoring +Imports System.Threading + +Module Client + Private Const MY_ID As String = "Client" + Private Delegate Sub HeartbeatThread(ByVal HeartbeatInterval As Int32) + Private m_StopHeartbeats As Boolean = False + + Sub Main() + + Console.WriteLine("Starting client") + Dim HT As New HeartbeatThread(AddressOf Heartbeats) + Dim ThreadResult As IAsyncResult = HT.BeginInvoke(2, Nothing, Nothing) + + Console.WriteLine("Press 'Enter' to terminate client...") + Console.ReadLine() + + Console.WriteLine("Terminating client") + m_StopHeartbeats = True + HT.EndInvoke(ThreadResult) + + End Sub + + Private Sub Heartbeats(ByVal HeartbeatInterval As Int32) + + 'Find local monitor + Console.WriteLine("Finding local monitor") + Dim Listener As New Heartbeat + Listener = CType(Activator.GetObject(GetType(Heartbeat), _ + "tcp://localhost:8080/Heartbeat.dll"), Heartbeat) + + 'Send regular heartbeats to local monitor + Do While m_StopHeartbeats = False + Listener.Heartbeat(MY_ID) + Console.WriteLine("Heartbeat sent to local monitor") + Thread.Sleep(HeartbeatInterval * 1000) + Loop + + 'Terminate heartbeat thread + Console.WriteLine("Stopping heartbeats") + + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vbproj b/Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vbproj new file mode 100644 index 0000000..fe77add --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vbproj @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vbproj.user b/Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vbproj.user new file mode 100644 index 0000000..100994d --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/HeartbeatClient/HeartbeatClient.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/HeartbeatMonitor.sln b/Source/VisualStudio2003/Chapter15/HeartbeatMonitor.sln new file mode 100644 index 0000000..6d6eadf --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/HeartbeatMonitor.sln @@ -0,0 +1,48 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LocalMonitor", "LocalMonitor\LocalMonitor.vbproj", "{0C431FCE-CEAA-4DD1-B39C-B7D208FEED47}" + ProjectSection(ProjectDependencies) = postProject + {938247CE-2129-436B-9133-48AF121B1E0A} = {938247CE-2129-436B-9133-48AF121B1E0A} + EndProjectSection +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Heartbeat", "Heartbeat\Heartbeat.vbproj", "{938247CE-2129-436B-9133-48AF121B1E0A}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HeartbeatClient", "HeartbeatClient\HeartbeatClient.vbproj", "{9CA4D5F1-4EE6-4EFC-AA25-37BDF22F2A06}" + ProjectSection(ProjectDependencies) = postProject + {938247CE-2129-436B-9133-48AF121B1E0A} = {938247CE-2129-436B-9133-48AF121B1E0A} + EndProjectSection +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RemoteMonitor", "RemoteMonitor\RemoteMonitor.vbproj", "{1F37FA75-2C1B-4BA3-A02D-2B2680C6EBE4}" + ProjectSection(ProjectDependencies) = postProject + {938247CE-2129-436B-9133-48AF121B1E0A} = {938247CE-2129-436B-9133-48AF121B1E0A} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {0C431FCE-CEAA-4DD1-B39C-B7D208FEED47}.Debug.ActiveCfg = Debug|.NET + {0C431FCE-CEAA-4DD1-B39C-B7D208FEED47}.Debug.Build.0 = Debug|.NET + {0C431FCE-CEAA-4DD1-B39C-B7D208FEED47}.Release.ActiveCfg = Release|.NET + {0C431FCE-CEAA-4DD1-B39C-B7D208FEED47}.Release.Build.0 = Release|.NET + {938247CE-2129-436B-9133-48AF121B1E0A}.Debug.ActiveCfg = Debug|.NET + {938247CE-2129-436B-9133-48AF121B1E0A}.Debug.Build.0 = Debug|.NET + {938247CE-2129-436B-9133-48AF121B1E0A}.Release.ActiveCfg = Release|.NET + {938247CE-2129-436B-9133-48AF121B1E0A}.Release.Build.0 = Release|.NET + {9CA4D5F1-4EE6-4EFC-AA25-37BDF22F2A06}.Debug.ActiveCfg = Debug|.NET + {9CA4D5F1-4EE6-4EFC-AA25-37BDF22F2A06}.Debug.Build.0 = Debug|.NET + {9CA4D5F1-4EE6-4EFC-AA25-37BDF22F2A06}.Release.ActiveCfg = Release|.NET + {9CA4D5F1-4EE6-4EFC-AA25-37BDF22F2A06}.Release.Build.0 = Release|.NET + {1F37FA75-2C1B-4BA3-A02D-2B2680C6EBE4}.Debug.ActiveCfg = Debug|.NET + {1F37FA75-2C1B-4BA3-A02D-2B2680C6EBE4}.Debug.Build.0 = Debug|.NET + {1F37FA75-2C1B-4BA3-A02D-2B2680C6EBE4}.Release.ActiveCfg = Release|.NET + {1F37FA75-2C1B-4BA3-A02D-2B2680C6EBE4}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source/VisualStudio2003/Chapter15/HeartbeatMonitor.suo b/Source/VisualStudio2003/Chapter15/HeartbeatMonitor.suo new file mode 100644 index 0000000000000000000000000000000000000000..adc7a9ff77e5833b8e7e9979db4bebb106733bc5 GIT binary patch literal 9728 zcmeHNOKe+36dgM${m@^4mQvdCNdKh?`88i!i0z~;#BE8^Ca789*iP#9#SV_srfMr- zgAfZgY|08MfrJ1dA+dl;6eJ{6*t8qO1|(R~MI~Sb8xqc$dE@tN=Q%I7L9Nt@?)%J) z=g!=@_uPBu<>rl=U#@(*@mG;o4u~o-JGWfi=cxDLnIy|vA^dpY`|RA@oT?N8kN3)5 zB!Pc0*J^7Im*CF*UJ6Hrv>LPu#Qk1_J5)f_SnqeylJ8B`A%T98!e2%h zqDLfgPmA-|QSW8FSdz7Q>QT{>-t^vUtH1G8q0=)DsGi5bF(pom!{9!Kryem=bcp=M z^*|xVa?ee2Lld*M7>J31PO zne5MUSey_8A}m5eNn%oR&tMki?65YR8cmpSV<4uW5ljBdS=j`MoSn7VgOZA z7;9QgU_7GxRNknD1Ajv3GllWT(US-`Ag^ap!`ZkM;E#{-0x^O5?bgp(Pn**3hk>;8 zK&BYQb;cuC{cB=~->2gculyOeeqs&5RgXeKNVeFFbQ`ya+x z54rFs>c=sMGh!0*NLafzFKb!33+v~4xONuzo^}gkykYxQJ`w-vd6gb2Uo?)nM4&r{ z=*3J-DG_QGHG*Dy3N!|-GIBK4$k9~;Xnh1;eGt8Dy*+^u+MtUZCxg2XZ~pJRX)7jH zH-=e^U@f$|k?i}OGb1%m%19UIZsGf7WiQrG+vS*E`4cY(9m5en@=G~&xfWHZzm?=gEJcZd zc2&Pz1vQwP+v*oSU)3wD*X7IK-amJ}Z#!4zzv;VxP%jxgAD)^4R{F@Ldg?A2 zqh7#IgLrC2bW27(V8AQck$nh%oKgTiI8i>ep^o_3j$d%1A@pk#mw>J@Xh$yJqtbd6 z*BWr{5{%~ExXxhC^n6Lo+{EY_>Gka6z=I5CK`dZT6-Q{nc3So)mEWWOGxgKCVt$0; z)cIrJ$%v#F5;a)-S7J=B`u`yM5`$QZ@z=Rv2$JEx&R6QepD`@+BCq^u`+EJvITQM$ z*Qn$?hEderN(C0%p%~aWU)V>)}rWQeKRq z0_a22r2eyX3FcsKnpm3t+X(J`7Ab zt{oQIEBiE}tr2$EfSQG^P_12AVI{eiw+oe=NjbYFe`vXP(EMrxdgX@Qk5&_Qf+}zfYg1c-{X);Lkm%RMD}QSN@gatH&va z|L_fF&ZQTmK=8Yzdw*s?Os;wnN3{V#>kxkhfu)SRT5#=_kr$J#CU9YE0Mv>|j5$;* zBCr6c#X}5M0~FR?xRPAU^TL&!Nh!O)-S392Gyga%ZEp;|K*d0`D|^hYf+(Kxqw?D) z`H80wFHr!Q>2R;AIarJ4LXT~GVbyK-&8vS7zh3)A&&QoVL@)m}vsq#!QF#7bf>FE) zg!1Z}iL+{gj05br!}gY^&|b`2E`}TZh>kbh_=$NU2rLRk#VPK;)6qzlML1_k_1Mf& zI5hQf^`f<`m=u8XbAW;U;&Gb+F~%WCszDM8zz+pr39+D@dXsP7xYq7SH z_WTx26J>6eSDs|>{{Uj*DDrq_N!$c}18^;OkIqD;g{Y$yr90G=R%l2&G@}<+p7=4z n=K+9IcN$Sc*OaR}0qJ^r@Y`J7`M!EgokQ*{t~=N61l{=;=%zYe literal 0 HcmV?d00001 diff --git a/Source/VisualStudio2003/Chapter15/LocalMonitor/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter15/LocalMonitor/AssemblyInfo.vb new file mode 100644 index 0000000..399c034 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/LocalMonitor/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.config b/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.config new file mode 100644 index 0000000..ef56b34 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vb b/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vb new file mode 100644 index 0000000..e57688c --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vb @@ -0,0 +1,65 @@ +Option Strict On + +Imports System +Imports System.Runtime.Remoting +Imports System.Threading +Imports Monitoring + +Module Monitor + Private Const MY_ID As String = "LocalMonitor" + Private Delegate Sub HeartbeatThread(ByVal HeartbeatInterval As Int32) + Private m_StopHeartbeats As Boolean = False + Private m_StatusReport As String = "No heartbeats received" + Private WithEvents m_Listener As Heartbeat + + Sub Main() + + Console.WriteLine("Starting local monitor") + RemotingConfiguration.Configure("LocalMonitor.config") + + Console.WriteLine("Creating local listener") + m_Listener = New Heartbeat + RemotingServices.Marshal(m_Listener, "Heartbeat.dll") + + Dim HT As New HeartbeatThread(AddressOf Heartbeats) + Dim ThreadResult As IAsyncResult = HT.BeginInvoke(10, Nothing, Nothing) + + Console.WriteLine("Now listening - press 'Enter' to terminate local monitor...") + Console.ReadLine() + + Console.WriteLine("Local monitor terminating") + m_StopHeartbeats = True + HT.EndInvoke(ThreadResult) + + RemotingServices.Disconnect(m_Listener) + m_Listener = Nothing + + End Sub + + Private Sub Heartbeats(ByVal HeartbeatInterval As Int32) + + 'Find remote monitor + Console.WriteLine("Finding remote monitor") + Dim Listener As New Heartbeat + Listener = CType(Activator.GetObject(GetType(Heartbeat), _ + "tcp://localhost:8081/Heartbeat.dll"), Heartbeat) + + 'Send regular heartbeats to remote monitor + Do While m_StopHeartbeats = False + Listener.RemoteHeartbeat(MY_ID, m_StatusReport) + Console.WriteLine("Heartbeat sent to remote monitor") + Thread.Sleep(HeartbeatInterval * 1000) + Loop + + 'Terminate heartbeat thread + Console.WriteLine("Stopping heartbeats") + + End Sub + + Private Sub m_Listener_HeartbeatLocal(ByVal LocalComponent As String) Handles m_Listener.HeartbeatLocal + 'Listen for regular heartbeats from local component + Console.WriteLine("Heartbeat received from " & LocalComponent) + m_StatusReport = "Last heartbeat received from " & LocalComponent & " at " & Format$(Now, "hh:mm:ss") + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vbproj b/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vbproj new file mode 100644 index 0000000..cc552f7 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vbproj @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vbproj.user b/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vbproj.user new file mode 100644 index 0000000..a4bbe1c --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/LocalMonitor/LocalMonitor.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/LocalMonitor/bin/LocalMonitor.config b/Source/VisualStudio2003/Chapter15/LocalMonitor/bin/LocalMonitor.config new file mode 100644 index 0000000..ef56b34 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/LocalMonitor/bin/LocalMonitor.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/RemoteMonitor/AssemblyInfo.vb b/Source/VisualStudio2003/Chapter15/RemoteMonitor/AssemblyInfo.vb new file mode 100644 index 0000000..a1564e1 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/RemoteMonitor/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.config b/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.config new file mode 100644 index 0000000..07bfeb3 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vb b/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vb new file mode 100644 index 0000000..3669571 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vb @@ -0,0 +1,34 @@ +Option Strict On + +Imports System +Imports System.Runtime.Remoting +Imports Monitoring + +Module RemoteMonitor + Private WithEvents m_Listener As Heartbeat + + Sub Main() + + Console.WriteLine("Starting remote monitor") + RemotingConfiguration.Configure("RemoteMonitor.config") + + Console.WriteLine("Creating remote listener") + m_Listener = New Heartbeat + RemotingServices.Marshal(m_Listener, "Heartbeat.dll") + + Console.WriteLine("Now listening - press 'Enter' to terminate remote monitor...") + Console.ReadLine() + + Console.WriteLine("Remote monitor terminating") + RemotingServices.Disconnect(m_Listener) + m_Listener = Nothing + + End Sub + + Private Sub m_Listener_HeartbeatRemote(ByVal LocalMonitor As String, ByVal StatusReport As String) Handles m_Listener.HeartbeatRemote + 'Listen for regular heartbeats from local monitor + Console.WriteLine("Status report received from " & LocalMonitor) + Console.WriteLine(StatusReport) + End Sub + +End Module diff --git a/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vbproj b/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vbproj new file mode 100644 index 0000000..6b4a179 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vbproj @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vbproj.user b/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vbproj.user new file mode 100644 index 0000000..1eaa4fe --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/RemoteMonitor/RemoteMonitor.vbproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/Source/VisualStudio2003/Chapter15/RemoteMonitor/bin/RemoteMonitor.config b/Source/VisualStudio2003/Chapter15/RemoteMonitor/bin/RemoteMonitor.config new file mode 100644 index 0000000..07bfeb3 --- /dev/null +++ b/Source/VisualStudio2003/Chapter15/RemoteMonitor/bin/RemoteMonitor.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/contributing.md b/contributing.md new file mode 100644 index 0000000..f6005ad --- /dev/null +++ b/contributing.md @@ -0,0 +1,14 @@ +# Contributing to Apress Source Code + +Copyright for Apress source code belongs to the author(s). However, under fair use you are encouraged to fork and contribute minor corrections and updates for the benefit of the author(s) and other readers. + +## How to Contribute + +1. Make sure you have a GitHub account. +2. Fork the repository for the relevant book. +3. Create a new branch on which to make your change, e.g. +`git checkout -b my_code_contribution` +4. Commit your change. Include a commit message describing the correction. Please note that if your commit message is not clear, the correction will not be accepted. +5. Submit a pull request. + +Thank you for your contribution! \ No newline at end of file

    Zv)f_SQ~uekB>=tcGC{3xr3v?|n@= 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 literal 0 HcmV?d00001 diff --git a/9781590590508.jpg b/9781590590508.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df80a962aee35540ec745c676883993b7289d6c2 GIT binary patch literal 9405 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo/AspNetDebugDemo.vbproj.webinfo b/Inetpub/wwwroot/AspNetDebugDemo/AspNetDebugDemo.vbproj.webinfo new file mode 100644 index 0000000..645711c --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/AspNetDebugDemo.vbproj.webinfo @@ -0,0 +1,4 @@ + + + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo/AssemblyInfo.vb b/Inetpub/wwwroot/AspNetDebugDemo/AssemblyInfo.vb new file mode 100644 index 0000000..e9e06d0 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx b/Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx new file mode 100644 index 0000000..1c53086 --- /dev/null +++ b/Inetpub/wwwroot/AspNetDebugDemo/CustomErrorPage.aspx @@ -0,0 +1,17 @@ +<%@ Page Language="vb" AutoEventWireup="false" Codebehind="CustomErrorPage.aspx.vb" Inherits="AspNetDebugDemo.CustomErrorPage"%> + + + + CustomErrorPage + + + + + + +