home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c031 / 1.ddi / DETAILS.TX$ / details
Encoding:
Text File  |  1992-03-20  |  33.2 KB  |  863 lines

  1.                                DETAILS.TXT File
  2.                Product Information for Microsoft(R) C/C++, Version 7.0
  3.                   (C) Copyright Microsoft Corporation, 1992
  4.  
  5.      This document contains release notes for version 7.0 of Microsoft
  6.      C/C++ and its libraries for MS-DOS(R) and Microsoft Windows(TM)
  7.      operating systems.
  8.  
  9. ================================< Contents >===============================
  10.  
  11.  
  12.      This file has the following sections:
  13.  
  14.      Part 1: Using PWB
  15.      Part 2: Command-Line Options
  16.      Part 3: C++ Topics
  17.      Part 4: Specifying Program Starting Execution Points
  18.      Part 5: Run-Time Support for Windows Exit Procedure Routines
  19.      Part 6: New Function and Pragma Behavior
  20.      Part 7: Identifier Naming Issues
  21.      Part 8: Using the CodeView(R) Debugger with MS C/C++ 
  22.  
  23.  
  24. ===========================< Part 1: Using PWB >===========================
  25.  
  26.  
  27.      Running PWB in a Window
  28.      -----------------------
  29.  
  30.      To run PWB in a window by default, the following changes need 
  31.      to be made:
  32.  
  33.      1. Use PIFEDIT.EXE to edit the PWB.PIF file.
  34.         - Change Display Usage to Windowed
  35.         - Change Execution to Background (optional) 
  36.  
  37.      2. Choose the Project Templates option from the Options menu. The
  38.         Customize Project Templates dialog box will appear. Do the 
  39.         following:
  40.         - Type: macro WXFLAGS "/w" into the Build Rule edit field
  41.         - Select: Set Build Rule
  42.         - Select: OK
  43.  
  44.  
  45.      Using Precompiled Headers from PWB
  46.      ----------------------------------
  47.  
  48.      This feature is not described in the "Environment and Tools"
  49.      book. To use precompiled headers in PWB, you must follow the
  50.      procedures and restrictions that are listed in Help.
  51.  
  52.      To view the Help on using precompiled headers, choose the
  53.      "Precompiled-Header Options" button in  CL Help. This topic
  54.      explains the use of precompiled headers with CL and provides
  55.      important background information. At the end of this topic,
  56.      there is a button for "Using Precompiled Headers in PWB." To go
  57.      directly to this topic, request Help for "pwb.pch".
  58.  
  59.  
  60.      New PWB Switches: Friction and Factor 
  61.      --------------------------------------
  62.  
  63.      The implementation of PWB's friction and factor switches have
  64.      changed since PWB version 1.x.  If your cursor doesn't move when
  65.      you hold down a key, edit your TOOLS.INI file and change these
  66.      switches back to their default settings.
  67.  
  68.  
  69.      Minimum Memory Requirement for Accessing Help in PWB
  70.      ----------------------------------------------------
  71.  
  72.      The minimum amount of memory required for accessing Help from
  73.      PWB is 500K.
  74.  
  75.  
  76. =====================< Part 2: Command-Line Options >======================
  77.  
  78.  
  79.      New CL Default is /Od if Optimizations Not Specified
  80.      ----------------------------------------------------
  81.  
  82.      If you do not specify any optimization options, the CL
  83.      command uses the Disable Optimization option (/Od). Using
  84.      /Od causes CL to compile your program using the fast
  85.      compiler (/f). This feature allows you to quickly compile
  86.      code that is under development and to reserve use of the
  87.      optimizing compiler until it is needed.
  88.  
  89.      The /f option compiles source files without any default
  90.      optimizations. It generates the _FAST preprocessor
  91.      constant. Programs compiled with /f are slower and larger
  92.      but compile in less time than the optimizing compiler
  93.      requires; this option is useful during the development
  94.      process. The /f option does not support initialized static
  95.      huge data.
  96.  
  97.  
  98.      Mixing P-Code and Fully Optimized Machine Code
  99.      ----------------------------------------------
  100.  
  101.      If you compile a module with p-code optimizations (/Oq) and also
  102.      specify full optimizations (/Ox), and then disable p-code
  103.      generation in parts of the module using #pragma optimize("q",off)
  104.      then the procedures that are not p-code will not be fully
  105.      optimized. In particular, the compiler will not remove unnecessary
  106.      loops.
  107.  
  108.      To mix p-code and fully optimized machine code, use #ifdef
  109.      directives to specify where p-code or native machine code should be
  110.      generated. Then compile the file twice, to different .OBJ files,
  111.      once with full p-code optimization, and once with full native code
  112.      optimization. Link both .OBJ files into your project. Both types
  113.      of code will be fully optimized.
  114.  
  115.  
  116. ===========================< Part 3: C++ Topics >==========================
  117.  
  118.  
  119.      Destructors for Objects in Global and Static Arrays
  120.      ---------------------------------------------------
  121.  
  122.      The compiler erroneously does not generate destructors for objects
  123.      that contain implicit destructors if the objects are contained in
  124.      a global or static array and there are no other objects with that
  125.      type in the translation unit. In the following example, class B
  126.      has an implicit destructor because it contains an object of
  127.      class A. In this case, the linker will generate "error L2029:
  128.      unresolved external" for B::~B.
  129.  
  130.           class A { public: ~A() {} };
  131.           class B { A a; };                 // implicit destructor
  132.  
  133.           B b_array[10];
  134.  
  135.      To work around this problem, make the destructor of class B
  136.      explicit:
  137.  
  138.           class B { A a; public: ~B() {} }; // explicit destructor
  139.  
  140.  
  141.      Defining const struct Parameters for Member Functions
  142.      -----------------------------------------------------
  143.  
  144.      If you have a member function with a single parameter that is a
  145.      reference to a const struct, such as:
  146.  
  147.      class C {
  148.              void memfunc(const RD &);
  149.              };
  150.  
  151.      the struct must be defined as:
  152.  
  153.      typedef struct RD
  154.      {...
  155.      } RD;
  156.  
  157.      rather than:
  158.  
  159.      typedef struct
  160.      {...
  161.      } RD;
  162.  
  163.  
  164.      Return Types for Based Virtual Functions
  165.      ----------------------------------------
  166.  
  167.      Based virtual functions cannot return pointer or reference types. 
  168.      Attempting to do so causes the compiler to generate redefinition 
  169.      errors. To work around this problem, use the #pragma code_seg 
  170.      directive to place virtual functions in different segments.
  171.  
  172.  
  173.      Calling Temporary Objects of Types with Destructors
  174.      ---------------------------------------------------
  175.  
  176.      Any temporary object generated in the  "mem-initializer-list"
  177.      of a constructor-initializer ("ctor-initializer") when a
  178.      "mem-initializer" uses the syntax
  179.  
  180.      "complete-class-name( expression-list opt )"
  181.  
  182.      will not be destroyed if it has a destructor. The destructor will
  183.      not be called, but the space allocated to the destructor will
  184.      be released.
  185.  
  186.      Therefore, do not write expressions for "complete-class-name
  187.      ( expression-list opt )" that will generate temporary objects
  188.      of types with destructors. See "Initializing Bases and Members"
  189.      on page 329 of the "C++ Language Reference" for more information.
  190.  
  191.  
  192.      Explicit Conversion Recommended for Member Functions
  193.      ----------------------------------------------------
  194.      Converting a member function to a pointer to a member function
  195.      type should be done explicitly when using the pointer in an
  196.      expression. For example, suppose you are assigning the pointer
  197.      to a variable or calling a function with a parameter that is a
  198.      pointer to a member function type. In such a case,
  199.      Class::MemFunc should be specified as &Class::MemFunc. This is
  200.      not necessary when calling the member function.
  201.  
  202.  
  203.      Function-Style Initializers Starting with Casts
  204.      -----------------------------------------------
  205.  
  206.      Function-style initializers will not work properly if the
  207.      object in the initializer list is a function-style cast.
  208.      The following example shows an initializer of this kind:
  209.  
  210.           class T
  211.           {
  212.              T(int);
  213.           };
  214.  
  215.           class K
  216.           {
  217.              K(T, int);
  218.           };
  219.  
  220.           int i, j;
  221.  
  222.           K f(T(i), j);  // Causes an incorrect error message
  223.  
  224.      In this case, the initializer must use the equal-sign syntax,
  225.      as in:
  226.  
  227.           K f = K(T(i), j);
  228.  
  229.  
  230. =========< Part 4: Specifying Program Starting Execution Points  >=========
  231.  
  232.  
  233.      The Windows libraries that are provided with Microsoft C/C++
  234.      allow your program's starting execution point to be either main,
  235.      WinMain, or LibMain. The starting execution point depends on the
  236.      library used.
  237.  
  238.  
  239.           Windows 3.x Executable Files (EXE)
  240.           ----------------------------------
  241.  
  242.           The startup code looks first for a function named main to treat
  243.           as the entry point. If a main function does not exist, then the
  244.           startup code attempts to use WinMain. If neither of these
  245.           functions exist, the run-time system emits the following error:
  246.  
  247.           "R6021 no main function"
  248.  
  249.  
  250.           Windows 3.x Dynamic-Link Libraries (DLL)
  251.           ----------------------------------------
  252.  
  253.           The startup code looks first for a function named main to treat
  254.           as the entry point. If a main function does not exist, then the
  255.           startup code attempts to use LibMain. Unless you link in one of
  256.           the NOCRT libraries, such as SNOCRTW.LIB, a main or LibMain
  257.           function is not required and no error is reported.
  258.  
  259.  
  260.           Windows 3.x and the NOCRT Libraries
  261.           -----------------------------------
  262.  
  263.           If you link with any of the NOCRT libraries, such as SNOCRTW.LIB,
  264.           then your program must have either a WinMain (EXE) or a LibMain
  265.           (DLL). If neither of these functions exist, the run-time system
  266.           emits an error.
  267.  
  268.  
  269. =====< Part 5: Run-Time Support for Windows Exit Procedure Routines >======
  270.  
  271.  
  272.      Beginning with Microsoft C/C++, the standard C run-time libraries
  273.      contain the Windows Exit Procedure (WEP) for dynamic-linked
  274.      libraries (DLLs). The C run-time WEP performs several cleanup
  275.      functions when Windows unloads a DLL from memory (for example, it
  276.      releases memory and calls atexit routines). You can optionally
  277.      write your own termination code to be called from the run-time
  278.      library's WEP as needed.
  279.  
  280.  
  281.           Information on the Windows WEP Routine
  282.           --------------------------------------
  283.  
  284.           The C run-time libraries that support DLLs for Windows (such
  285.           as SDLLCEW.LIB) contain both startup and termination code. The
  286.           termination code is contained within a routine named WEP.
  287.           Microsoft C/C++ automatically links this routine into DLLs
  288.           that are written for Windows.
  289.  
  290.           Note that the run-time libraries with names containing NOCRT
  291.           (such as SNOCRTDW.LIB) do not have a WEP. These libraries are
  292.           for use when creating DLLs that do not use any C run-time
  293.           services or routines.
  294.  
  295.           Using a WEP requires that you follow some important rules and
  296.           restrictions when building a DLL for Windows.
  297.  
  298.           To make use of the WEP routine, it must remain resident in memory
  299.           as long as the associated DLL remains in memory. To ensure that it
  300.           does, you must include the following statements in the DLL's
  301.           definition file (DEF) file:
  302.  
  303.                  SEGMENTS 'WEP_TEXT' FIXED PRELOAD
  304.  
  305.                  EXPORTS
  306.                      WEP @1 RESIDENTNAME
  307.  
  308.           The SEGMENTS declaration tells Windows to load the WEP_TEXT segment
  309.           into a fixed memory location as it loads the DLL into memory.
  310.           RESIDENTNAME tells Windows to keep the WEP name resident in memory
  311.           so that the WEP routine can always be called--even when there is
  312.           little available memory. The WEP's code is very small; making the
  313.           WEP_TEXT segment resident in memory should not adversely impact
  314.           Windows' performance.
  315.  
  316.           If you use any of the run-time DLL libraries, such as SDLLCEW.LIB,
  317.           you must include information in the definition file.
  318.  
  319.  
  320.           Providing Your Own DLL Termination Routine
  321.           ------------------------------------------
  322.  
  323.           You can, optionally, provide your own termination routine to
  324.           perform additional DLL termination processing. To do so, you must
  325.           write a routine that fits the following prototype; unlike the
  326.           Windows WEP routine, the name of your routine must begin with a
  327.           leading underscore:
  328.  
  329.                int __far __pascal _WEP( int <parameter> );
  330.  
  331.           The value returned by your _WEP routine, if any, is passed through
  332.           to Windows as if it were the Windows WEP termination value.
  333.           Normally, this should be 1 to signify success.
  334.  
  335.           If you have an existing WEP routine, you can use it with Microsoft
  336.           C/C++ by adding a leading underscore (_) to the name. If a
  337.           procedure named _WEP exists at link time, the C run time will
  338.           automatically call it at DLL termination time.
  339.  
  340.           Note that the _WEP routine must be compiled as extern "C" when
  341.           used in a C++ program:
  342.  
  343.                extern "C" int __far __pascal _WEP( int <parameter> );
  344.  
  345.           DLL termination code should avoid the following:
  346.  
  347.              Deep stack usage
  348.                In some cases, DLL termination code can be called on a stack
  349.                that has insufficient space remaining. This stack overflow
  350.                produces unpredictable problems.
  351.  
  352.              Operating system requests
  353.                Due to the potential for insufficient stack space, avoid calls
  354.                to the operating system.
  355.  
  356.              File I/O
  357.                Files are owned by processes (executable files), not DLLs.
  358.                When DLL termination code is called, processes have already
  359.                stopped and files are already closed.
  360.  
  361.                Note: This is the reason that the run-time library DLL
  362.                      termination code does not attempt to do a final flushall
  363.                      as it does in other environments.
  364.  
  365.  
  366.           General Notes
  367.           -------------
  368.  
  369.           Most DLL termination problems occur due to memory constraints (for
  370.           example, insufficient memory to load the DLL initialization code or
  371.           to swap in DLL termination code). For cases in which memory
  372.           contention rarely occurs, DLLs will run even if you do not follow
  373.           the above restrictions.
  374.  
  375.           The C run-time library WEP termination code is one of the startup
  376.           source files (WEP.ASM) so that sophisticated users can alter
  377.           it as needed.
  378.  
  379.           Because the startup functionality previously provided by
  380.           LIBENTRY.OBJ (and LIBENTRY.ASM) is now provided by the standard
  381.           run-time libraries that support DLLs for Windows, do not link with
  382.           LIBENTRY.OBJ.
  383.  
  384.           For more information on Windows DLL termination, refer to the
  385.           Windows Software Development Kit documentation.
  386.  
  387.  
  388.           Library Initialization Code in Windows DLLs
  389.           -------------------------------------------
  390.  
  391.           Compiling a DLL with Microsoft C version 6.0 requires that the
  392.           first object module linked is LIBENTRY.OBJ, or the equivalent.
  393.           Microsoft C/C++ version 7.0 automatically provides the library
  394.           initialization code that used to be provided by LIBENTRY.OBJ. 
  395.           Makefiles used to build DLLs in version 6.0 must be changed to 
  396.           eliminate linking in LIBENTRY.OBJ. If you provide your own 
  397.           initialization ENTRY object. If you don't use the run-time 
  398.           library functions, you can still get the correct initialization 
  399.           code. Do this without the run-time library overhead by linking 
  400.           with a (x)NOCRTDW.LIB library, where x can be S, M, C, or L 
  401.           (small, medium, compact, or large model).
  402.  
  403.  
  404. ===============< Part 6: New Function and Pragma Behavior >================
  405.  
  406.  
  407.      Using the Intrinsic Version of strlen
  408.      -------------------------------------
  409.  
  410.      In certain rare cases, the intrinsic version of strlen(), when
  411.      used with a far pointer argument and global optimizations, may
  412.      improperly use register ax.  This may cause program failure.
  413.      If you observe this behavior, turn off global optimizations
  414.      or use the function version of strlen() by using:
  415.  
  416.              #pragma function(strlen)
  417.  
  418.      around the suspected code.
  419.  
  420.  
  421.      The check_pointer Pragma
  422.      ------------------------
  423.  
  424.      In Microsoft C/C++ version 7.0, the check_pointer pragma works
  425.      function by function, not statement by statement. To use this
  426.      pragma, place a pair of check_pointer pragmas around any function
  427.      definition that contains pointer usage that you want to check:
  428.  
  429.      #pragma check_pointer( on )
  430.      void myfunc( void )
  431.      {
  432.          /* code that contains a pointer */
  433.      }
  434.      #pragma check_pointer( off )
  435.  
  436.  
  437.      The data_seg Pragma
  438.      -------------------
  439.  
  440.      Pragma data_seg behaves differently than described in Help.
  441.      According to Help's description, if a pragma data_seg is given,
  442.      then subsequent initialized variables are allocated in the named
  443.      segment specified by the pragma. However, in the case of an
  444.      initialized array of unspecified size, for example:
  445.  
  446.           char foo[] = "string";
  447.  
  448.      the array will not be allocated in the named segment. Instead, it
  449.      will be allocated in the default segment. This problem can be 
  450.      avoided by specifying the size of the array. For example, if the 
  451.      array of the previous example is rewritten as:
  452.  
  453.           char foo[7] = "string";
  454.  
  455.      the array will be allocated in the named segment.
  456.  
  457.      The description also states that pragma data_seg does not affect
  458.      the allocation of uninitialized objects. This is true under -Za.
  459.      However, under -Ze the uninitialized objects also get allocated
  460.      in the segment specified by the data_seg pragma.
  461.  
  462.  
  463. ===================< Part 7: Identifier Naming Issues >====================
  464.  
  465.  
  466.      Finding Local Static Variables in Browser Information
  467.      -----------------------------------------------------
  468.  
  469.      A local static variable such as "LENGTH" appears in the Browser
  470.      Name list as "??LENGTH" or in a similar "decorated name" form.
  471.      This does not affect the variable's definition or references, but
  472.      does affect where you might search in the list for the variable's name.
  473.  
  474.  
  475.      Missing Symbol Names for enums
  476.      ------------------------------
  477.  
  478.      If an enum name is missing from the Browser information for symbol
  479.      names, check the beginning of the list for an unnamed (blank) symbol.
  480.      To find the enum you want, check the definitions and references
  481.      for the blank symbol.
  482.  
  483.  
  484.      Long Identifier Names Create Problems for LIB.EXE
  485.      -------------------------------------------------
  486.  
  487.      The Microsoft C/C++ version 7.0 compiler creates an internal version 
  488.      of each C++ name as a long string that contains information such as 
  489.      class, parameters, return type, and calling convention. These names 
  490.      are called "decorated" names. Because of decoration, a name that is 
  491.      less than 127 characters long in your source code can exceed 127 
  492.      characters as an internal name. A problem can occur when LIB builds 
  493.      a library from an object file that contains decorated names. Symbol 
  494.      names more than 127 characters long can cause LIB to hang. Microsoft 
  495.      is investigating this problem. For more information on decorated 
  496.      names, see Appendix B in the "Environment and Tools" manual. 
  497.  
  498.  
  499. ===========< Part 8: Using the CodeView Debugger with MS C/C++ >===========
  500.  
  501.  
  502.      CodeView Runs in a Windows-Like Environment
  503.      -------------------------------------------
  504.  
  505.      Setup adds the following statement to your SYSTEM.INI file:
  506.  
  507.      DEVICE=CVW1.386
  508.  
  509.      This statement is required for CodeView to run in a window.
  510.  
  511.      Note: The window CodeView uses by default cannot be sized or moved
  512.      as can typical windows under the Windows 3.x environment. The window
  513.      can be positioned at startup using the following command-line options:
  514.  
  515.      /x:x /y:y   - where x:x and y:y are x and y pixel locations
  516.  
  517.      To run CodeView in its window-like environment on an 80386, these
  518.      additional files must be installed on the host computer. These
  519.      files cannot be used on an 80286 computer:
  520.  
  521.      - CVW.EXE (single monitor CodeView)
  522.      - CVW1.386 (VxD for single monitor debugging)
  523.  
  524.  
  525.      CodeView Error When Debugging Programs Built with Class Libraries
  526.      -----------------------------------------------------------------
  527.  
  528.      When you use CodeView to open an executable file that was built
  529.      using the Microsoft Class Libraries, CodeView displays a dialog
  530.      box that asks you to "Enter the directory for winmain.exe".
  531.      CodeView is actually looking for the location of the Class
  532.      Library's source files. By default, the Microsoft C/C++ Setup
  533.      program installs these sources in \C700\MFC\SRC.
  534.  
  535.  
  536.      Extended-Line Modes Enabled for CodeView Debugger
  537.      -------------------------------------------------
  538.  
  539.      The CVW.EXE version of CodeView for Windows can be run in 25-, 43-,
  540.      or 50-line mode on a VGA monitor, and in 25- or 43-line mode on
  541.      an EGA monitor.
  542.  
  543.      To display 43 or 50 lines on a screen, you must use the OEM fonts
  544.      supplied  with CodeView. There are two OEM font files: OEM08.FON
  545.      for 50-line mode, and OEM10 for 43-line mode. To use these fonts,
  546.      change the OEMFONTS.FON entry in your SYSTEM.INI file.  For example,
  547.      to use 50-line mode, change:
  548.  
  549.      OEMFONTS.FON=VGAOEM.FON
  550.  
  551.      to:
  552.  
  553.      OEMFONTS.FON=C:\C700\BIN\OEM08.FON
  554.  
  555.      Start CVW.EXE with the /43 or /50 switch to use the extended-line
  556.      modes.
  557.  
  558.      Changing the fonts entries in your SYSTEM.INI file may not be necessary
  559.      for resolutions greater than 640x480.
  560.  
  561.  
  562.      Remote Debugging with CodeView
  563.      ------------------------------
  564.  
  565.      The required files needed on the host and the remote debugging
  566.      machine are operating-system dependent.
  567.  
  568.      For running CodeView under MS-DOS, the following files must be
  569.      installed on the MS-DOS host. These files are needed for all
  570.      execution models:
  571.  
  572.      - CV.EXE (CodeView kernel)
  573.      - SHD1.DLL (symbol handler)
  574.      - EED1CXX.DLL or EED1CAN.DLL (C++ expression evaluator or ANSI C
  575.        expression evaluator. Only one is needed, but EED1CXX.DLL
  576.        is required for programming with C++.)
  577.  
  578.      For remote debugging, you need to include these statements in the
  579.      [RCVCOM] section of your TOOLS.INI file:
  580.  
  581.      parameters: com1:9600
  582.  
  583.      or specify this at the command line:
  584.  
  585.      RCVCOM [-p com1:4800] [-r] [-?]
  586.  
  587.      where [ ] represents an optional parameter. See page 396 in the
  588.      "Environment and Tools" manual for a description of these parameters.
  589.  
  590.      Remote debugging has three limitations:
  591.  
  592.      - You must specify that the shell be exclusive.
  593.  
  594.      - The recommended baud rate is 9600. If you experience any problems,
  595.        try decreasing the baud rate.
  596.  
  597.      - The shell should be specified as full screen.
  598.  
  599.      Specify these settings in a .PIF file or in a DOS session. Use the
  600.      Settings command to specify these settings in a DOS shell.
  601.  
  602.      If you install a CodeView DLL in a directory other than where Setup
  603.      installs it, specify the path of the DLL with the appropriate entry
  604.      in your TOOLS.INI file. For example:
  605.  
  606.      SYMBOLHANDLER:C:\CV4\SHD1.DLL
  607.  
  608.      See also "Configuring CodeView with TOOLS.INI" on page 329, and
  609.      "Remote Debugging" on page 393, both in the "Environment and Tools"
  610.      manual.
  611.  
  612.      The following four sections describe additional files you need for
  613.      specific hosts and targets.
  614.  
  615.  
  616.           DOS-Hosted, DOS-Targeted Debugging: Host Computer
  617.           -------------------------------------------------
  618.  
  619.           If you are not doing remote debugging, these additional files
  620.           must be installed on the host computer for DOS-hosted,
  621.           DOS-targeted debugging:
  622.  
  623.           - EMD1D1.DLL (DOS host/DOS target execution model)
  624.           - TLD1LOC.DLL (local transport layer)
  625.  
  626.           If you are doing remote debugging, these additional files must
  627.           be installed on the host computer for DOS-hosted, DOS-targeted
  628.           debugging:
  629.  
  630.           - EMD1D1.DLL (DOS host/DOS target execution model)
  631.           - TLD1COM.DLL (COM port transport layer)
  632.  
  633.           To specify these transport options, use the TRANSPORT statement
  634.           in your TOOLS.INI file. The path must be specified:
  635.  
  636.           TRANSPORT:C:\CV4\DLL\TLD1COM.DLL COM1:9600
  637.  
  638.           If you do not specify COM#:baud_rate in the TRANSPORT statement,
  639.           CodeView prompts you for it.
  640.  
  641.           You must also add the Native entry to your TOOLS.INI file giving
  642.           the execution model. The path is required:
  643.  
  644.           NATIVE:C:\CV4\EMD1D1.DLL (for DOS host/DOS target execution model)
  645.  
  646.  
  647.           DOS-Hosted, DOS-Targeted Debugging: Target Computer
  648.           ---------------------------------------------------
  649.  
  650.           If you are doing remote debugging, this file must be installed
  651.           on the target computer for DOS-hosted, DOS-targeted debugging:
  652.  
  653.           - RCVCOM.EXE (remote CodeView for COM port)
  654.  
  655.  
  656.           DOS-Hosted, Windows-Targeted Debugging: Host Computer
  657.           -----------------------------------------------------
  658.  
  659.           If you are doing remote debugging, these additional files must be
  660.           installed on the host computer for DOS-hosted, Windows-targeted
  661.           debugging:
  662.  
  663.           - EMD1W0.DLL (DOS host/Windows target execution model)
  664.           - TLD1COM.DLL (COM port transport layer)
  665.  
  666.  
  667.           DOS-Hosted, Windows-Targeted Debugging: Target Computer
  668.           -------------------------------------------------------
  669.  
  670.           If you are doing remote debugging, these additional files must be
  671.           installed on the target computer for DOS-hosted, Window-targeted
  672.           debugging:
  673.  
  674.           - RCVWCOM.EXE (remote CodeView for COM port)
  675.           - DMW0.EXE (debug monitor on Windows target)
  676.           - TOOLHELP.DLL (Toolhelp)
  677.  
  678.  
  679.      Debugging Locally on an 80286
  680.      -----------------------------
  681.  
  682.      To run CodeView under Windows and debug locally on an 80286 computer,
  683.      these files must be installed on the host computer:
  684.  
  685.      - CVW4.EXE (CodeView kernel)
  686.      - EEW0CXX.DLL (C++ expression evaluator)
  687.      - EEW0CAN.DLL (ANSI C expression evaluator)
  688.      - SHW0.DLL (symbol handler)
  689.      - EMW0W0.DLL (Windows-Windows execution model)
  690.      - TLW0LOC.DLL (local transport layer)
  691.      - TOOLHELP.DLL (Toolhelp)
  692.  
  693.  
  694.      Running CodeView on an 80286 Computer
  695.      -------------------------------------
  696.  
  697.      To run CVW on an 80286 computer, delete CVW.EXE and rename CVW4.EXE as
  698.      CVW.EXE. Local debugging on an 80286 computer with an EGA adapter
  699.      requires a secondary monitor. Single screen debugging is not supported.
  700.      Local debugging on an EGA requires CodeView to be invoked with the /2
  701.      command-line option.
  702.  
  703.  
  704.      Debugging P-Code
  705.      ----------------
  706.  
  707.      To debug p-code, your TOOLS.INI file must contain one of these MODEL
  708.      statements. The path giving the location of these DLLs is required:
  709.     
  710.      MODEL:D:\path\NMD1PCD.DLL (native model for p-code under MS-DOS)
  711.     
  712.      MODEL:D:\path\NMW0PCD.DLL (native model for p-code under Windows)
  713.  
  714.  
  715.      CodeView's Access to Function Code in Libraries
  716.      -----------------------------------------------
  717.  
  718.      The C/C++ CodeView debugger and linker do not guarantee that the
  719.      name of an .OBJ file is the same name the debugger or linker uses
  720.      to access the function code. To be certain of function access, use
  721.      the /f option when compiling. To avoid problems, do not put code in
  722.      include files. If you do put code into include files, specify the
  723.      function as inline.
  724.  
  725.  
  726.      Unloading DLLs When CodeView Terminates
  727.      ---------------------------------------
  728.  
  729.      You may have applications that use the LoadLibrary function to load
  730.      DLLs to be used by the application. When CVW.EXE terminates or
  731.      restarts such applications, Windows terminates the application without
  732.      unloading DLLs or decrementing the DLL usage count. As a result, DLLs
  733.      still exist in the system. To unload DLLs, you must either exit
  734.      Windows and restart, or use a utility.
  735.  
  736.  
  737.      Removing CodeView 3.07 from SDK Program Manager Group
  738.      -----------------------------------------------------
  739.  
  740.      You can safely remove CodeView 3.07 from your SDK Program Manager 
  741.      group to avoid confusion with the CodeView for Windows provided 
  742.      with MS C/C++.
  743.  
  744.  
  745.      Unsuccessful Connection to Remote Terminal
  746.      ------------------------------------------
  747.  
  748.      A remote monitor may appear to hang (the screen clears except for 
  749.      the CodeView sign-on banner) when connecting to it from a host that 
  750.      is running the debug kernel. In order to resolve this situation, 
  751.      retry the connection when the debug kernel is not running on the 
  752.      host computer.
  753.  
  754.  
  755.      Running Screen Saver Programs While Debugging
  756.      ---------------------------------------------
  757.  
  758.      Do not run screen savers such as Idlewild or AfterDark while
  759.      debugging, as their interactions with Windows can cause problems
  760.      when debugging.
  761.  
  762.  
  763.      DOS Session Running in a Window Does Not Have Mouse Support
  764.      -----------------------------------------------------------
  765.  
  766.      Running CodeView with the /2 option in a DOS session window does
  767.      not have mouse support. If you want mouse support, change the
  768.      DOS session to full screen.
  769.  
  770.  
  771.      Application I/O When Debugging Can Cause Screen Corruption
  772.      ----------------------------------------------------------
  773.  
  774.      If an application executes an I/O operation when the Flip/Swap
  775.      option is OFF, the screen may be corrupted.
  776.  
  777.  
  778.      Recovering From "Internal Debugger Error"
  779.      -----------------------------------------
  780.  
  781.      If CodeView generates an "Internal debugger error," restart your
  782.      system.
  783.  
  784.  
  785.      Debugging Applications That Use a Mouse
  786.      ---------------------------------------
  787.  
  788.      If you are using CV.EXE in a Windows DOS session, and if you are
  789.      debugging an application that uses or alters the mouse, you must
  790.      specify the CodeView /M option to disable the mouse. This option is
  791.      necessary because the DPMI services provided by Windows 3.x in
  792.      enhanced mode do not allow for saving and restoring the mouse state
  793.      correctly.
  794.  
  795.  
  796.      Debugging Basic or FORTRAN in the Windows Environment
  797.      -----------------------------------------------------
  798.  
  799.      Because CodeView for Windows version 4 does not have an
  800.      expression evaluator for Basic or FORTRAN, use CodeView for
  801.      Windows version 3 to debug code in these languages. From the
  802.      Command window, choose the Use command.
  803.  
  804.  
  805.      Setting the Scope of the Show Address Option in CodeView
  806.      --------------------------------------------------------
  807.  
  808.      The printed documentation and Help incorrectly list the
  809.      syntax for setting the scope of the Show Address option in
  810.      the CodeView Command window (OL) as:
  811.  
  812.           OL[<scope>]
  813.  
  814.      instead of:
  815.  
  816.           OL[[<scope>][+|-]].
  817.  
  818.      The + and - switches can be used to turn other options on or
  819.      off, but will cause a syntax error if used to modify the scope
  820.      of the Show Address option.
  821.  
  822.      Several options for the OL command can be chosen at the same time.
  823.      Each time you use the OL command, the scopes you specify will be
  824.      turned on and the scopes you don't specify will be turned off.
  825.      The OL command does not toggle the scopes. For example, the command:
  826.  
  827.           ollfg
  828.  
  829.      turns on lexical, function, and global scope while it turns off module
  830.      and executable scope.
  831.  
  832.  
  833.      Disable the Minimize On Use Option When Debugging
  834.      -------------------------------------------------
  835.  
  836.      Running an application in CodeView for Windows can disable
  837.      mouse and keyboard control if the Minimize On Use option
  838.      is set in the Windows Program Manager.  This behavior occurs
  839.      if you run an application using F5, restart from the Run
  840.      menu, and begin to debug the application. If you experience
  841.      this problem, use CTRL+ALT+SysRq to stop the application,
  842.      issue the WKA command from within Codeview for Windows, and
  843.      choose Exit from the File menu to return to Windows.
  844.  
  845. ===========================================================================
  846.  
  847.  
  848.      Microsoft, MS, MS-DOS, and CodeView are registered trademarks, and
  849.      Windows is a trademark of Microsoft Corporation.
  850.  
  851.      386-Max is a trademark of Qualitas, Inc.
  852.  
  853.      Bernoulli Box is a trademark of Iomega Corporation.
  854.  
  855.      Norton Utilities is a registered trademark of Peter Norton Computing.
  856.  
  857.      SuperStor is a trademark and Addstor is a registered trademark of
  858.      Addstor, Inc.
  859.  
  860.      NOTE: Microsoft improves its languages documentation at the time of
  861.      reprinting, so some of the information in this file may already be
  862.      included in your manuals.
  863.