Visual Basic Version 6.0 Readme

© 1998 Microsoft Corporation. All rights reserved.

Other product and company names herein may be the trademarks of their respective owners.

Visual Basic® Readme includes updated information for the documentation provided with Microsoft® Visual Studio -- Development System for Windows® and the Internet. The information in this document is more up-to-date than the information in the Help system.

Contents - Click any of the items below

NOTE: Be sure all headings in the table of contents are expanded when you search this ReadMe for a topic. In this way, you'll know when the search finds the topic among the TOC headings.

Important Issues -- Please Read First!
Sample File Locations
Passing User-Defined Types to Procedures
Incompatibilities with Data-bound Controls
Searching Online by Topic Title
Cross References to Internet Client SDK Refer to the Internet/Intranet/Extranet SDK
Context-Sensitive Help
Sample Code Sometimes Does Not Cut and Paste Properly
Locate Button Disabled for Reference Topics
Finding Help For ADO Objects
SQL Server OLE DB Provider Requires New instcat.sql
Data Access Issues and DataBinding Tips
Error in Data Environment Designer Code Example
Incompatibilities with Data-bound Controls
Binding to Properties of Objects May Yield Unexpected Results
Complex Binding to an ADO Recordset Requires CursorType
Creating Visual Basic Data Sources: Type field as adVarChar for SQL Server and Access Databases Instead of adBSTR
Incorrect References for Creating OLE DB Providers
Finding Help For ADO Objects
SQL Server OLE DB Provider Requires New instcat.sql
Setup for Data Access Applications May Fail on Windows 95/98
Controls Issues
Lightweight Controls Must Be Borderless
Run Time Error 711: Compiled .Exe Doesn't Contain Information About Unreferenced Control Causing Controls.Add to Fail
Hierarchical FlexGrid Control: ColWordWrapOption, ColWordWrapOptionBand, ColWordWrapOptionFixed, ColWordWrapOptionHeader Properties
Hierarchical FlexGrid Control: ColIsVisible and RowIsVisible Properties are Read Only
DataRepeater Control: Setting Public Properties Affect only the Current Control
Data Report Designer: Error in Event Handling Code
RichTextBox Control: SelPrint Method Has New Argument
Visual Basic 5 Version of MSChart Control Available in Tools Directory
Toolbar Control: Style Property Settings Changed
Visual Basic Run-Time Error 720: Attempting to Add Anything Except a Control to Controls Collection Causes Run-Time Error
Hierarchical FlexGrid Control: Correcting Errors Binding a Recordset to the HFlexGrid
Hierarchical FlexGrid Control: How to Change the Font of Individual Bands
Hierarchical FlexGrid Control: Avoiding the display of duplicate headers
ADO Data Control: FetchProgress and FetchComplete Events Not Implemented
DataGrid: SizeMode and Size Properties Do Not Accept Value of 2 (dbgNumberOfColumns)
Controls: ImageList Control on Page Designer
Page Designer: Control Issues
MSComm Control: EOFEnable Property Doesn't Stop Data Input
Treeview Control: Node Object's Visible Property is Read-Only
SysInfo Control: Constants Not Supported
User Control: Binary Persistence of PropertyBag Data Causes Page Designer to Fail
Language Issues
InStr Function and Locale-Specific Comparisons
SendKeys Statement Gives Invalid Procedure Call Error
Type Statement Clarification
Decimal Data Type Stored As Signed Integer
DateSerial Function and Windows 98/Windows NT 5
Code Window "Find Next" Keyboard Shortcut
Add Method (Folders) Syntax
Samples Issues
Obtaining Updated Versions of Sample Applications
Sample File Locations
Visual Basic Sample: Biblio and Mouse Samples Omitted
Visual Basic Samples: ChrtSamp Description
Visual Basic Samples: CtlsAdd Sample: Controls.mdb Must Be Read/Write Enabled on Hard Disk
DHSHOWME.VBP Sample: You May Need to Reset the SourceFile Property For This Sample to Work Correctly in Design Mode
PROPBAG.VBP Sample: Possible Error on Loading the Module for this Sample
Running the IObjSafe Sample Application
Wizard Issues
Setup for Data Access Applications May Fail on Windows 95/98
Package and Deployment Wizard: Automatically Pick Up Files From Redist directory
Package and Deployment Wizard Has [Do Not Redist] Section
Package and Deployment Wizard: In Silent Mode the Notification Window May Not Be First in the Window Z-order
Package and Deployment Wizard: Command Line Mode Argument Added for Specifying Executable Path
Package and Deployment Wizard: Manually Add User Control License Files
Package and Deployment Wizard: Steps in the Web Deployment Process
Package and Deployment Wizard: Web Deployment Tips for HTTP Protocol
Package and Deployment Wizard: Start Menu Items: Run Option Not Supported
System Configurations for WebPost's Posting Acceptor
Package and Deployment Wizard: Edit Setup.lst file if you rebuild cabs from batch file
Package And Deployment Wizard: Error 80042114
Package and Deployment Wizard: Use Mdac_typ.Cab to Distribute Data Access Components
.ASP Files Not Included in Standard Packages
Package and Deployment Wizard: Manually Include .ASP and .HTM Files For IIS Applications When Using Standard Setup
Package and Deployment Wizard: Bad Date and Time Formats
Package and Deployment Wizard: Unable to Run Setup.exe on First Windows 95 Version
Package and Deployment Wizard: Packaging ActiveX Documents
Error Message Issues
No Help Topic for the Following Error Messages
DHTML Page Designer Error Messages
Run Time Error 711: Compiled .Exe Doesn't Contain Information About Unreferenced Control Causing Controls.Add to Fail
WebClass Designer Issues
Webclasses: "Me." Not Supported
Webclasses: Invalid HTML Syntax Can Cause Unspecified Error
Webclasses: Avoid Using Global or Static Variables in a Webclass
Webclasses: Some External HTML Changes are not Detected Automatically
Webclasses: IIS Administration Console File Settings are not Acknowledged for Templates
Webclasses: Unattended Execution
Webclasses: Retain in Memory
Webclasses: Accounting for Differences Between the Debug and Compiled Versions
Webclasses: Performance Tips
Webclasses: Miscellaneous Issues
Webclasses: Articles of Interest
Webclasses: Formatting in Source HTM File
Webclasses: Cannot Support HTML's LINK Element
Webclasses: When Using Visual SourceSafe with Webclass Projects, You Must Manually Check in the Project's .HTM Files
Webclasses: TagPrefix Should Be WC:
Webclasses: Variant Parameter in URLFor Method
Webclasses: Sequencing Data is Passed Using the &WCU Parameter
Webclasses: StateManagement Property Constants Contain Incorrect Property Reference
Webclasses: State and the Session Object
Webclasses: Code Corrections in Help Topic "Defining Webclass Events at Run Time"
Webclasses: HTM and ASP Files Not Included in Standard Packages
Webclasses: Unspecified Error
DHTML Page Designer Issues
Page Designer Error Messages
Page Designer: "Me." Not Supported
Page Designer: Cannot Access HTML Elements from Forms or External Objects
Page Designer: Image SourceFiles are Resolved Incorrectly
Page Designer: Binary Persistence Issue
Page Designer: Type Library Problems are Preventing Some Help Topics from Appearing
Page Designer: Modal Prompts Appear Behind Browser in Run Mode
Page Designer: Do Not Watch Objects of Type HTMLDocument
Page Designer: Cannot Design Frames Within A Page Designer
Page Designer: Cannot use Visual Basic Code with the SetInterval Method
Page Designer: Control Issues
Page Designer: Miscellaneous HTML Issues
Page Designer: Miscellaneous Debugging Issues
Page Designer: Syntax for Navigating Programmatically
Page Designer: Location of Project Files in .CAB Deployment
Page Designer: OBJECT Tag Insertion
Page Designer: Cannot CTRL+TAB Through Windows When Page Designer Has Focus
Page Designer: Cannot Delete a Table if it Contains No Columns
Page Designer: When Using Visual SourceSafe with Page Designer Projects, You Must Manually Check in the Project's .HTM Files
Page Designer: Unqualified BuildFile Property Results in DLL
Page Designer: Use of Load Event With Asynchronous Property
Page Designer: Property Page Issues
Page Designer: Name of Save Option Changed
Page Designer: Problems Seeing Code Changes When Switching from Compiled to Debug Mode
Page Designer: Help for Most Language Elements is Available in the Platform SDK
Extensibility Issues
"Command-Line Safe" Add-In Behavior
Manually Setting Add-In Registry Values
Using the Add-In Designer
Add-In Designer: More Information About Specifying Satellite DLL
Miscellaneous Issues
Returning an Error Value from a DLL
Data Access Guide: DataFormats tutorial has wrong file extension
External Editor Field Added to Options Dialog Box
CodeBase Fixup Utility in Internet Component Download
Text in Project Properties/Open Dialogs Truncated in Japanese, Chinese, and Korean versions of Windows
Finding Help For ADO Objects
Avoid Using Repository Add-In with ActiveX Designers
Microsoft Transaction Server (MTS) Issues
Building and Debugging MTS Components in Visual Basic 6.0
Dictionary Object
Introducing the Dictionary Object
Visual Component Manager
Application Performance Explorer

For installation issues pertaining to Microsoft® Visual SourceSafe™, see Visual SourceSafe Notes.

For general installation issues on the Visual Studio 6.0 suite of products, including side by side product installation, see Installation Notes readme (install.htm).

For other issues on the Help system of the Visual Studio suite of products, go to:

MSDNä, the Microsoft Developer Network Readme.


Important Issues


Passing User-Defined Types to Procedures

With Visual Basic 6.0 it is possible to pass a user defined type (UDT) as an argument to a procedure or function, however there is a restriction. Passing a UDT to a procedure in an out-of-process component or across threads in a multi-threaded component requires an updated version of DCOM for Windows 95 and Windows 98, or Service Pack 4 for Windows NT 4.0. This update is required on your development computer as well as on any computer that will run your application. A run-time error will occur if the required files are not installed.

The above does not apply to passing UDT's within a single-threaded application; this will work without updating.

The Package and Deployment Wizard will not determine the dependencies for the necessary components - it is up to you to make sure that the files are on the end user's computer. You can test for the existence of the components by trapping for run-time error 458 - "Variable uses an Automation type not supported in Visual Basic". If this error occurs, the DCOM or Service Pack components must be updated; the update procedure differs depending on the operating system:

Windows 95 / Windows 98

DCOM98.EXE is a self-extracting executable that installs the updated DCOM components for Windows 95 or Windows 98. It can be found in the DCOM98 directory of the Visual Basic 6.0 CD. This file may be freely distributed with your Visual Basic application.

Windows NT 4.0

The updated DCOM components are automatically installed with Service Pack 4 (SP4). You can download the Service Pack from Microsoft's web site.

Searching Online by Topic Title

To search for a topic when you have the title

  1. In the navigation pane of the MSDN window, click the Search tab and then type or paste the title of the topic you want to find. Enclose the search string in quotation marks.
  2. Click Search Titles Only.
  3. Click List Topics. (If your search returns more than one hit, you can sort the topic list by clicking the Title or Location column heading).
  4. Select the title of the topic you want and then click Display.

To find where a topic is located in the table of contents

Note   The Locate button is unavailable for the topics in the Reference node of the Visual Basic documentation.

Cross References to Internet Client SDK Refer to the Internet/Intranet/Extranet SDK

In the Building Internet Applications book within the Component Tools Guide, multiple cross references are made to a part of MSDN referred to as the "Internet Client SDK." The correct name for this SDK is the "Internet/Intranet/Extranet SDK." When searching for an Internet Client SDK reference in MSDN, please look in this section.

Context-Sensitive Help

To use Help buttons and the F1 key to access Help without having the MSDN CD in your CD drive, you must choose the Custom install option during setup of the MSDN Library. Check the boxes labeled "VB Documentation," "VB Product Samples," and "VS Shared Documentation." You may also want to check "VSS Documentation" if you are using Visual SourceSafe.

Sample Code Sometimes Does Not Cut and Paste Properly

Line breaks and formatting information may not copy correctly when you copy and paste sample code from the MSDN Library Visual Studio documentation to your code editor. To work around this issue, do one of the following:

Locate Button Disabled for Reference Topics

When you find a language reference topic in MSDN through the Search tab, you cannot use the Locate button to find where the topic is located in the MSDN Table of Contents tree.



Data Access Issues and DataBinding Tips


Error in Data Environment Designer Code Example

In the topic, "Programmatically Accessing Objects in Your Data Environment Designer," the example under "Executing a Command Object with Multiple Parameters" erroneously uses the Open method:


	MyDE.Commands("InsertCustomer").Parameters("ID").value = "34"
	MyDE.Commands("InsertCustomer").Parameters("Name").value = "Fred"
	MyDE.Commands("InsertCustomer").Open
There is no Open method for the Commands object. You must use the Execute method instead.


Incompatibilities with Data-bound Controls

Due to changes in Visual Basic 6.0, not all data-bound controls are compatible with all data sources. This incompatibility is due to a difference in the internal binding mechanisms of ADO versus DAO/RDO. Controls that were created specifically to work with DAO/RDO can't be bound to an ADO Data control; controls created for use with ADO can't be bound to the standard Data control or the Remote Data Control.

This incompatibility primarily applies to complex-bound controls such as grids or lists that bind to multiple fields in a data source; simple-bound controls such as text boxes or labels that bind to a single field will work with either type of data source. Some examples are as follows:

When attempting to bind a control to a data source at design time, you may encounter a "No compatible data source" error message. In this case, you will need to substitute another control that is compatible with your data source.

Binding to Properties of Objects May Yield Unexpected Results

While it's possible to bind any object to any other object, the results may not always be what you expect. Some properties are read-only bindable and will not update their bound source.

For example, if you were to bind the Caption property of a Frame control to a field named Foo in an ADO Recordset object, the Caption would change to reflect the value of Foo as you scrolled through the Recordset. If, however, you changed the Caption property programmatically (Frame1.Caption = "Bar"), the value of Foo would not be updated. Because the Caption property of the Frame is read-only bindable, it doesn't provide notification that its data has changed.

This isn't a problem for Visual Basic-authored objects, since you can call the PropertyChanged method in your object's code. For other objects, you can determine if a property is update bindable by checking the DataBindings collection. If a property is enumerated in the DataBindings collection, it is update bindable and the data source will receive updates to data; if it isn't enumerated, the property is read-only bindable.

Complex Binding to an ADO Recordset Requires CursorType

When binding an ADO Recordset object to a complex-bound control (such as a Grid control), it is necessary to explicitly set the CursorType property to either adOpenStatic or adOpenKeyset. If you don't set this property, no data will be displayed. The following code shows the use of the CursorType property.

Private Sub DataClass_Initialize() Set cn = New ADODB.Connection Set rs = New ADODB.Recordset rs.CursorType = adOpenStatic cn.Open "northwind" rs.Open "customers", cn End Sub

Binding to a simple-bound control (such as a TextBox) doesn't require a specific CursorType.

Creating Visual Basic Data Sources: Type the fields as adVarChar for SQL Server and Access Databases Instead of adBSTR

When appending fields to an ADO Recordset object for use with a SQL Server or Access database, type the fields as adVarChar instead of adBSTR (as shown in some sample code). When reading data out of either SQL Server or Access databases, ADO will use the adVarChar type.

Incorrect References for Creating OLE DB Providers

The documentation erroneously states that it is possible to set a class module's DataSourceBehavior property to 2 - vbOLEDBProvider to create an OLE DB data provider. The correct values for DataSourceBehavior are 0 - vbNone and 1 - vbDataSource.

The documentation also erroneously refers to a non-existent event in class modules called OnDataConnection.

Finally, in the topic "Creating the MyDataSource Class," the step-by-step example incorrectly states that you should set DataSourceBehavior to 2 - vbOLEDBProvider. Instead, you should set DataSourceBehavior to 1 - vbDataSource.

To create OLE DB data providers using Visual Basic, use the Provider Writer Toolkit included with the OLE DB SDK. For more information, see the OLE DB Simple Provider Toolkit in the Platform SDK Documentation on MSDN.

Finding Help For ADO Objects

When using the ADO objects, (for example, Recordset, Connection, Command, Parameter, ADOR, RDS, and RDS Server object), you cannot get context-sensitive help on the object or its properties, events, or methods. That is, if you have a reference to the object and you use one of its features, selecting the code and pressing F1 does not result in a help topic. Instead, you will get either a wrong topic or the "Keyword Not Found" topic.

However, you can get help on any of the object's properties, events, or methods by using the online documentation Index:

  1. If the MSDN documentation viewer is not open, on the Help menu, click Contents.
  2. Click the Index tab.
  3. Type the name of the property, event, or method including the word "collection", "property", "event", or "method" as appropriate.
  4. From the list of available topics, select the topic that includes "ADO" in its title.
Note   You can also find additional help on other ADO topics, such as the ADO object model, by looking in the MSDN Library Table of Contents: open Platform SDK, and under Database and Messaging Services, go to Microsoft Data Access SDK.

SQL Server OLE DB Provider Requires New instcat.sql

Before using the SQL Server OLE DB data provider, you must run the version of instcat.sql distributed with Microsoft Visual Basic 6.0 on SQL Server (version 6.5 and later). Instcat.sql is distributed with Visual Basic 6.0 and can be found in the \winnt\system32 directory upon installation.

If Instcat.sql is not run on your SQL Server, the provider is unable to retrieve metadata from the SQL Server, and thus will not be able to connect to that server.

Setup for Data Access Applications May Fail on Windows 95/98

When redistributing a VB 6.0 application that includes data access components, setup will fail if DCOM for Windows 95 and Windows 98 isn't present on Windows 9x client machines.

The file Mdac_typ.exe is added to your setup package by the Package & Deployment Wizard if your project includes references to ADO, OLEDB, or ODBC (you can check for this on the Included Files page of the wizard). This file installs MDAC 2.0 files on the client computer. MDAC 2.0 requires DCOM for Windows 95 and Windows 98 in order to function properly, however it does not perform a check for this during setup. The setup will fail if DCOM for Windows 95 and Windows 98 isn't present on the client machine. Some of the older data access components will be overwritten prior to the failure, possibly causing older data access applications on the client to fail.

When distributing data access applications for Windows 9x, you need to make sure that DCOM for Windows 95 and Windows 98 is installed on the client. DCOM98.EXE is a self-extracting executable file that installs the updated DCOM components for Windows 95 or Windows 98. It can be found in the DCOM98 directory of the Visual Basic 6.0 CD. This file may be freely distributed with your Visual Basic application.



Controls Issues

Lightweight Controls Must Be Borderless

When creating a lightweight User control by setting the Windowless property to True, the BorderStyle property is invalidated. By definition a lightweight control has no border.

If you first set the BorderStyle property to anything other than 0 - None and subsequently change the Windowless property to True, you will receive an error message "Windowless UserControls only support BorderStyle = None".

Run Time Error 711: Compiled .Exe Doesn't Contain Information About Unreferenced Control Causing Controls.Add to Fail

Problem:

  1. Create a new Standard Exe.
  2. Add a user control to the project.
  3. Add the following code:
  4. Dim WithEvents x as VBControlExtender Private Sub Form_Load () Set x = Controls.Add ("Project1.Usercontrol1", "XX") x.Visible = True End Sub
  5. On the File menu, click Make Project1.exe (Don't run the project.)
  6. Run the exe.

Result: You get an error (711) stating that Project1.Usercontrol1 is an invalid ProgID since no info about it can be found in the exe.

Solution: Before compiling the project, under the Project menu, click Project1 Properties. On the Make tab, clear the "Remove information about unused ActiveX controls" check box.

Remarks

By default ActiveX controls that are referenced but not placed on any type of form at design time are not available for Controls.Add at runtime or in an executable.

Hierarchical FlexGrid Control: ColWordWrapOption, ColWordWrapOptionBand, ColWordWrapOptionFixed, ColWordWrapOptionHeader Properties

The following properties are part of the Hierarchical FlexGrid control's feature set but are not documented in the control's help: ColWordWrapOption, ColWordWrapOptionBand, ColWordWrapOptionFixed, ColWordWrapOptionHeader. Descriptions and syntaxes for these properties are found below. Settings for all properties are the same, and can be found at the bottom of the topic.

ColWordWrapOption Property

Returns or sets a value that specifies how text is wrapped in a specified column.

Syntax

object.ColWordWrapOption (Index) = integer

The ColWordWrapOption property syntax has these parts:

Part

Description

object

An object expression that evaluates to a Hierarchical FlexGrid control.

Index

Long. The number of the column to get or set word wrap on. The value must be in the range of -1 to Cols - 1. Setting this value to –1 selects all columns.

integer

A numeric expression that determines how words will wrap, as shown in settings.

ColWordWrapOptionBand Property

Returns or sets a value that specifies how text is wrapped in a specified band.

Syntax

object.ColWordWrapOptionBand (BandNumber, BandColIndex) = integer

The ColWordWrapOption property syntax has these parts:

Part

Description

object

An object expression that evaluates to a Hierarchical FlexGrid control.

BandNumber

Long. The number of the band to get or set word wrap on. The value must be in the range of 0 to Bands - 1.

BandColIndex

Long. The number of the column to get or set word wrap on. This optional parameter defaults to –1, indicating all columns in the band. Valid values are –1 to Cols –1.

integer

A numeric expression that determines how words will wrap, as shown in settings.

ColWordWrapOptionFixed Property

Returns or sets a value that specifies how text is wrapped in a specified fixed column.

Syntax

object.ColWordWrapOptionFixed(index) = integer

The ColWordWrapOptionFixed property syntax has these parts:

Part

Description

object

An object expression that evaluates to a Hierarchical FlexGrid control.

index

Long. The number of the column to get/set word wrap on. This optional parameter defaults to –1. Valid values are –1 to Cols –1.

integer

A numeric expression that determines how words will wrap, as shown in settings.

ColWordWrapOptionHeader Property

Returns or sets a value that specifies how text is wrapped in column headers.

Syntax

object.ColWordWrapOptionHeader(BandNumber, BandColIndex) = integer

The ColWordWrapOptionHeader property syntax has these parts:

Part

Description

object

An object expression that evaluates to a Hierarchical FlexGrid control.

BandNumber

Long. The number of the band to get/set word wrap on. The value must be in the range of 0 to Bands - 1.

BandColIndex

Long. The number of the column to get/set word wrap on. This optional parameter defaults to –1 indicating all column headers in the band. Valid values are –1 to Cols –1.

integer

A numeric expression that determines how words will wrap, as shown in settings.

Settings

The settings for integer are:

Constant

Value

Description

flexSingleLine

0

(Default) Displays text on a single line only.

flexWordBreak

1

The lines are automatically broken between words.

flexWordEllipsis

2

Truncates text that does not fit in the rectangle and adds ellipsis.

flexWordBreakEllipsis

3

Breaks words between lines and adds ellipsis if text doesn't fit in the rectangle.

Hierarchical FlexGrid Control: ColIsVisible and RowIsVisible Properties are Read Only

The ColIsVisible and RowIsVisible properties are read-only properties and cannot be set programmatically. You can use the properties to test whether a column or row is visible, and hide the column or row, if appropriate, as show below:

With MSHFlexGrid1 If .ColIsVisible(1) Then .ColWidth(1) = 0 If .RowIsVisible(1) Then .RowHeight(1) = 0 End With

Hierarchical FlexGrid Control: Additional Settings for GridLines, GridLinesBand, GridLinesFixed, GridLinesHeader, GridLinesIndent, and GridLinesUnpopulated Properties

Two additional settings are possible for the following properties: GridLines, GridLinesBand, GridLinesFixed, GridLinesHeader, GridLinesIndent, GridLinesUnpopulated Properties. The possible settings are show in the table below:

Constant

Value

Description

flexGridDashes

4

Dashed Lines. Sets line style between cells to dashed lines.

flexGridDots

5

Dotted Lines. Sets line style between cells to dotted lines.

Remarks

These settings can be used in addition to flexGridNone, flexGridFlat, flexGridInset and flexGridRaised.

DataRepeater Control: Setting Public Properties Affect only the Current Control

When creating a user control to be used in a DataRepeater control, be aware that public properties of the control will be set only on the current control (the "live" control with the focus). For example, if you expose the Font property of a user control, at run time, resetting that property (as shown in the example code below) will only affect the current control in the DataRepeater control. The font of repeated controls will not be affected.

Private Sub Command1_Click() ' Only the current control's Font will be affected. DataRepeater1.RepeatedControl.FontName = "Courier" End Sub

The corresponding code in the user control would resemble the following:

Public Property Get FontName() As String FontName = txtProductName.Font.Name End Property Public Property Let FontName(ByVal newFontName As String) txtProductName.Font.Name = newFontName End Property

TabStrip Control: Separators show only when the Style property = TabFlatButtons

Separators will only appear on a TabStrip control when the Style property is set to TabFlatButtons. An example is shown below:

Private Sub Form_Load() With TabStrip1 .Style = tabFlatButtons .Separators = True End With End Sub

Data Report Designer: Error in Event Handling Code

In the topic titled Data Report Events, there is an error in code that shows how to handle asynchronous errors. For more information, search online, with Search titles only selected, for "Data Report Events" in the MSDN Library Visual Studio 6.0 documentation.

The code is found under the heading "Error Events—for Asynchronous Events."

The code omits a "Select Case ErrObj.ErrorNumber" statement. The corrected code is:

Private Sub DataReport_Error(ByVal JobType As _ MSDataReportLib.AsyncTypeConstants, ByVal Cookie As Long, _ ByVal ErrObj As MSDataReportLib.RptError, ShowError As Boolean) Select Case ErrObj.ErrorNumber Case rptErrPrinterInfo ' 8555 MsgBox "A printing error has occurred. " & _ "You may not have a Printer installed." ShowError = False Exit Sub Case Else ' handle other cases here. ShowError = True End Select End Sub

RichTextBox Control: SelPrint Method Has New Argument

The SelPrint method now features a second, optional argument. The syntax and part descriptions are shown below:

Syntax

object.SelPrint(lHDC As Long, [vStartDoc])

The SelPrint method syntax has these parts:

Part

Description

object

An object expression that evaluates to a RichTextbox control.

lHDC

Long. The device context of the device you plan to use to print the contents of the control.

vStartDoc

Boolean. Specifies the behavior of the control regarding startdoc and enddoc printer control operations, as shown in settings.

Settings

The settings for vStartDoc are:

Constant

Value

Description

True

-1

(Default) The control retains its original behavior and sends startdoc and enddoc commands to the printer.

False

0

The control doesn't send startdoc and enddoc commands, but sends only startpage and endpage commands to the printer.

Remarks

The argument was added to remedy situations when printers do not print with the default behavior. When the SelPrint method is invoked, both Visual Basic and the RichTextBox control send startdoc and enddoc commands to the printer resulting in a nested pair of startdoc/enddoc commands. Some printers respond only to the first pair of commands and thereby become disabled when the RichTextbox control sends the second pair. In that case, setting the vStartDoc argument to False prevents the second pair of commands from being sent.

Visual Basic 5 Version of MSChart Control Available in Tools Directory

For pre-release users of Visual Basic only:

A Visual Basic 5.0x version of the MSChart control is now included with Visual Basic. If you need a Visual Basic 5 version of the Chart control, and you have installed the pre-release version of the MSChart control, please overwrite the pre-release version with the version contained in the Tools directory of the Visual Basic CD.

Toolbar Control: Style Property Settings Changed

The Style property settings for the Toolbar control have been changed. The help topic for the property lists tbrTransparent and tbrRight as possible settings, however these are not implemented in the current version. The actual possible settings and descriptions are shown below:

Constant

Value

Description

tbrStandard

0

(Default) Standard toolbar.

tbrFlat

1

Flat. The borders of a button dynamically appear when the cursor hovers over the button.

Visual Basic Run-Time Error 720: Attempting to Add Anything Except a Control to Controls Collection Causes Run-Time Error

Attempting to add an object that is not a control to the Controls collection causes run-time error 720. You can only add Visual Basic intrinsic controls or ActiveX controls to the collection.

To reproduce:

  1. Create a new Standard Exe.
  2. Add the following code:
  3. Private Sub Form_Load () Controls.Add "Excel.Application", "MyExcelApp") End Sub
  4. Run the exe.

Result: You get an error (720): Invalid class string.

Hierarchical FlexGrid Control: Correcting Errors Binding a Recordset to the HFlexGrid

If you receive the following error when trying to bind the Hierarchical FlexGrid to an ADO Recordset object, "DataSource settings may be incorrect", try changing some of the behavioral properties associated with the ADO Recordset Object or Command. For example, change the CursorLocation property to adUseNone or adUseClient.

Hierarchical FlexGrid Control: How to Change the Font of Individual Bands

Since the same font object is used for the entire grid object, you must create a new font object to change the fonts of individual bands, rather than changing the font directly.

For example, this way will not change the font for the individual band:

MSHFlexGrid1.FontBand(1).Name = "Arial"

Since you are directly modifying the font object, this will change the fonts in all of the bands to Arial.

To change an individual band, first create a new Font object, then assign that Font object to the FontBand property:

Dim ft As New StdFont ft.Name = "Arial" Set MSHFlexGrid1.FontBand(1) = ft

This will change just the band's font to Arial.

Hierarchical FlexGrid Control: Avoiding the display of duplicate headers

By default, the Hierarchical FlexGrid control uses the first FixedRow in the Hierarchical FlexGrid as a set of headers (which means it displays the names of the fields bound to each column in this row). Since by default the HFlexGrid control displays one FixedRow, if you enable the display of headers on Band 0, it will appear as though the header is being duplicated twice. To avoid this, set the FixedRow property to 0, or clear out the text values in the first FixedRow using code.

ADO Data Control: FetchProgress and FetchComplete Events Not Implemented

Although the reference topic for the ADO Data Control includes links to the FetchProgress and FetchComplete events, the events are not implemented for the control.


DataGrid: SizeMode and Size Properties Do Not Accept Value of 2 (dbgNumberOfColumns)

The reference topics for the Split object's SizeMode and Size properties refer to a non-existent property value of 2 (dbgNumberOfColumns). Please ignore this value.

Controls: ImageList Control on Page Designer

When using the ImageList control on a DHTML Page designer, images cannot be added at design time. If you try to use the following code in an uncompiled .dll project, you will get the run-time error: -2147418113 (8000ffff), "Method 'Add' of object images failed".

Private Sub DHTMLPage_Load() ImageList1.ListImages.Add , , LoadPicture("C:\Winnt\winnt.bmp") End Sub

However, the code will work when the .dll project is compiled.

MSComm Control: EOFEnable Property Doesn't Stop Data Input

The EOFEnable property determines if the OnComm event occurs when an EOF character is detected. Contrary to the documentation for the property, however, input does not stop.

Treeview Control: Node Object's Visible Property is Read-Only

The Visible property of the Treeview control's Node object is a read-only property. If the node is not visible, you can use the EnsureVisible method to make it visible, as shown in the example:

Private Sub Command1_Click() If Not TreeView1.Nodes(10).Visible Then TreeView1.Nodes(10).EnsureVisible End If End Sub

SysInfo Control: Constants Not Supported

The reference topics for the following events:

have lists of constants that identify devices and device data. Contrary to the documentation, however, these constants are not supported by the events or the SysInfo control. The values associated with the constants listed in the help topics are valid, but the constant names are not.

User Control: Binary Persistence of PropertyBag Data Causes Page Designer to Fail

The PropertyBag saves data in binary format. Due to a known problem with binary persistence and the DHTML page designer, however, such data causes the page designer and Visual Basic to fail. See Page Designer: Binary Persistence Issue for more information.



Language Issues

InStr Function and Locale-Specific Comparisons

To use locale-specific rules in a comparison, enter a valid LCID (LocaleID).

SendKeys Statement Gives Invalid Procedure Call Error

The short form of the code for sending an Insert, {INS}, results in an "Invalid procedure call" error under Windows NT 4.0 Service Pack 3. To work around this problem, use the long code for Insert, {Insert}.

Type Statement Clarification

The last sentence of the "Type statement" Help topic states: "The setting of the Option Base statement determines the lower bound for arrays." This sentence is incorrect and should be ignored. The Option Base setting has no effect on arrays in user-defined types.

Decimal Data Type Stored As Signed Integer

The "Decimal Data Type" Help topic states that Decimal variables are stored as unsigned integers, which is incorrect. Decimal variables are stored as signed integers.

DateSerial Function and Windows 98/Windows NT 5

For the year argument, two-digit years are interpreted based on user-defined machine settings (the default range is 1930-2029). The range settings are defined in the Regional settings of the Microsoft Windows Control Panel.

Code Window "Find Next" Keyboard Shortcut

The "Code Window Keyboard Shortcuts" Help topic incorrectly states the Find Next keyboard shortcut is SHIFT+F4. The correct keyboard shortcut for Find Next is F3.

Add Method (Folders) Syntax

In the "Add Method (Folders)" Help topic, the syntax shown is incorrect. The correct syntax is:
object.Add foldername


Samples Issues

Sample File Locations

If you choose to include Visual Basic samples in your MSDN setup, they are installed to the directory:

C:\Program Files\Microsoft Visual Studio\MSDN98\98VS\1033\Samples\VB98.

If you choose not to include the Visual Basic samples in your MSDN setup, you can find the Visual Basic samples on the MSDN CD at:

D:\Samples\Vb98

Note: The drive letters mentioned above may vary on your system.

Visual Basic Sample: Biblio and Mouse Samples Omitted

The Biblio sample program, found in the Visual Basic documentation table of contents, is no longer included with the Visual Basic product. The Mouse sample, metnioned in "Responding to Mouse and Keyboard Events" is also no longer included with the product.

Visual Basic Samples: ChrtSamp Description

ChrtSamp is a new sample program included with Visual Basic that demonstrates the major features of the MSChart control. If you have installed the Visual Basic samples, the sample can be found in the following location on your hard disk:

\\Program Files\Microsoft Visual Studio\Msdn98\98vs\1033\Samples\Vb98\ChrtSamp

If you have not installed the Visual Basic samples on your hard disk, the sample can be found on the MSDN CD at the following location:

Samples\Vb98\ChrtSamp

The sample uses an Excel spreadsheet to supply data for a chart. The sample also allows you to display multi-series charts by clicking various buttons. Finally, the sample demonstrates 3D features of the control by setting the ChartType property to an appropriate value.

File

Description

Chrtsamp.vbp

The project file for the sample.

Frmchart.frm

The main form for the sample.

Frmchart.frx

Binary data for the form.

Gas.xls

The Excel worksheet containing the data.

Modchart.bas

Code module containing functions and procedures for the sample.

To Run

Press F5 to run the sample. After all data has loaded, click on the "Chart Type" to change the type. To see the three-dimensional features of the sample, click the Chart Type combo box and select a 3-D chart type, such as 3dArea. While holding down the CTRL key, right-click the chart, and use the cursor to change the aspect of the chart.

Visual Basic Samples: CtlsAdd Sample: Controls.mdb Must Be Read/Write Enabled on Hard Disk

If you attempt to run the CtlsAdd samples from the MSDN CD, an error will occur if you attempt to use the controls.mdb database found on the CD. Because CtlCfg.vbp sample uses an Access database (controls.mdb) to store license key information about controls, the database must be installed on a hard disk. Copy the controls.mdb file to the hard disk and make it writable.

DHSHOWME.VBP Sample: You May Need to Reset the SourceFile Property For This Sample to Work Correctly in Design Mode

If your page designer samples appear blank when you open them in design mode, please reset the SourceFile property to reflect the location on your computer to which the project's HTML files were installed. You must reset this property for each designer in the project. Your sample should then work correctly.

To reset the SourceFile property for a designer, either type a path directly into the SourceFile property in the Properties window, or select the Project Properties icon from the toolbox, click Save as an External File, then click Open and navigate to the correct .htm file.

PROPBAG.VBP Sample: Possible Error on Loading the Module for this Sample

Propbag.vbp references a module (Module1.bas) that is located in the default installation directory for MSDN samples. If you move this sample to another directory, you will receive an error when you open the project that the module path is incorrect. To fix this, load the project without the module, then re-add the module from the directory to which you installed your samples.

Running the IObjSafe Sample Application

Due to some late-breaking changes, the IObjSafe sample application (IObjSafe.vbp) will not run properly unless you first make the following modifications:

  1. Load the IObjSafe.vbp project file into the development environment.
  2. Choose ucObjSafety Properties from the Project menu. On the Debugging tab, delete the path and file name from the Start program text box.
  3. Type the actual path and file name for IObjSafe.htm in the Start browser with URL text box. The actual path may vary depending on your installation.
  4. Choose Options from the Tools menu. On the General tab, choose the Break on Unhandled Errors option button.

The application should now run properly.

An updated version of the IObjSafe sample application is available online at the Microsoft Visual Basic samples page.

Obtaining Updated Versions of Sample Applications

Updated versions of many of the Visual Basic sample applications as well as additional samples not included on the CD are available online at the Microsoft Visual Basic samples page.



Wizard Issues

Package and Deployment Wizard: Automatically Pick Up Files From Redist directory

A new feature of the Package and Deployment wizard is its ability pick up files from the Redist folder. An example of how the feature is used would follow the steps below:

  1. You have created an application that's ready for packaging.
  2. The application depends on a certain system file "MySysFile.dll" which, until recently, has been a stand-alone file. But now a recent system update has made that file dependent on other files to function properly.
  3. However, a stand-alone version of the system file is also supplied.
  4. To simplify setups, you place that stand-alone version into the Redist folder.
  5. When creating your deployment package, you navigate to the system file to instruct the wizard that the system file should be included.
  6. Instead of picking up the system file (which is dependent on other files), the Package and Deployment wizard will pick up the stand-alone version that is in the Redist directory.

By default, no files are placed in the redist folder.

Package and Deployment Wizard Has [Do Not Redist] Section

A new section has been added to the Package and Deployment VB6Dep.ini file: [Do Not Redist]

Two kinds of files are listed under the new section:

  1. Files that are not needed at run time. For example, ActiveX designers often require two file references, one for design time, and one for run time. Since the design time reference is not needed, it is listed in the section and is not included in the package.
  2. Files that cannot be redistributed by the Package and Deployment wizard. Some dependent files are not installed by Visual Basic, but must be installed by another component. For example, the following files are installed by Internet Explorer 4.x: Shdocvw.dll and Mshtml.dll.

Package and Deployment Wizard: In Silent Mode the Notification Window May Not Be First in the Window Z-order

With Visual Basic, it's possible to run the Package and Deployment Wizard in silent mode from a command prompt. When doing so, you can also set a path for logging the wizard's output (/l ). With the path set, the wizard will create a log of events. If you do not use the argument, the wizard will instead display a dialog box to notify you of the wizard's completion. However the window is not always obvious because it may be underneath other windows. In order to see it, you may need to close or minimize all other windows.

For more information, search online for "running as a stand-alone" in Visual Basic Concepts in the MSDN Library Visual Studio 6.0 documentation.

Package and Deployment Wizard: Command Line Mode Argument Added for Specifying Executable Path

An argument has been added to the command line mode of the Package and Deployment wizard. The argument is shown in the table below:

Argument

Description

/e path

Use the argument to set the path for the project's executable file if it is different from the project's path.

Remarks

The argument allows the command line mode to be used in a multi-developer environment where a computer is dedicated to compiling the project and creating the package.

For more information, search online, with Package and Deployment Wizard selected, for running as a stand-alone in the MSDN Library Visual Studio 6.0 documentation.

Package and Deployment Wizard: Manually Add User Control License Files

When creating a package for a user control that requires a license key, the license file (.vbl) is not automatically included. Instead, you must add the file manually.

When you are at the dialog titled "Package and Deployment Wizard – Included Files," click the Add button and search for the appropriate .vbl file.

Package and Deployment Wizard: Steps in the Web Deployment Process

When you post an Internet package to a Web server using the Package and Deployment Wizard, the wizard uses a technology known as WebPost to copy your package to the server and process it appropriately. These are the steps that the WebPost process goes through when processing your .cab:

  1. It extracts the .cab file into a temporary directory.
  2. It locates the .inf file for the .cab file.
  3. Based on the contents of the .inf file, the WebPost process installs application files (based on the RInstallApplicationFiles section of the .inf file), installs system files (based on the RIinstallSystemFiles section), and installs shared files (based on the RInstallSharedFiles section). In the process, it registers any necessary files.
Note The DefaultInstall section of the .inf file is not run, because the instructions it contains often require user input. The WebPost process also does not create a virtual directory for your application, if one is required; directories must be set up in advance.

Package and Deployment Wizard: Web Deployment Tips for HTTP or FTP Protocol

Note Cab unpacking is supported by Posting Acceptor 2.0 running on IIS 4.0.
    1. If you are using the HTTP Post protocol, make sure that Posting Acceptor is installed on your Web server. If you are running IIS 4.0, install Posting Acceptor 2.0. If you are running IIS 3.0, install Posting Acceptor 1.0. Cab unpacking is not supported by Posting Acceptor 1.0.
    2. Ensure that your URL is correct. If you are using HTTP Post, ensure that your URL begins with http://. If you are using FTP, ensure that your URL begins with ftp://.
    3. If you are uploading to a server location that has Posting Acceptor 1.0 installed, you cannot select the option to unpack and install your cabinet files when you deploy your package using the wizard. If you receive an error C0042115 that the query string INSTALL is invalid, check your server configuration to determine what version of posting acceptor is installed. If it is version 1.x, deploy your cab again, making sure to deselect the Unpack and Install Server-Side Cab option.
    4. If you need to use the FTP protocol to post to a URL beginning with http://, you may be able to resolve this error by adding the following entry to the end of your Web server's postinfo.asp file, usually located in the scripts directory on the Web server:

      <!--This entry is for the FTP protocol -->
      [{02B5E1D1-8B7C-11D0-AD45-00AA00A219AA}]
      ServerName="<%= Request.ServerVariables("SERVER_NAME") %>"
    1. Right-click on Default FTP Site and choose New Virtual Directory.
    2. Enter an alias to be used to access the virtual directory, then click Next.
    3. Enter the physical path of the directory to which to map the virtual directory -- for example, c:\inetpub\ftproot -- then click Next.
    4. Select the appropriate access permissions, making sure to allow write access so that your deployments can proceed without errors, then click Finish.
    5. Right-click on Default FTP Site and choose Stop.
    6. Right-click on Default FTP Site and choose Start.

      When you deploy to the FTP server using the Package and Deployment Wizard, use the site FTP://servername/alias where alias is the alias you assigned in step 2. Use the username "anonymous" and the password "me@somewhere" for anonymous login.

Package and Deployment Wizard: Start Menu Items: Run Option Not Supported

When creating a package for deployment, you can also create a Start menu item. Although it is mentioned in the help topic for the dialog box, the Run option is not supported.

System Configurations for WebPost's Posting Acceptor

When you deploy your packages to a Web server, the Package and Deployment Wizard uses a technology known as WebPost to move your files to the desired location. WebPost consists of two main components:

There are multiple versions of Posting Acceptor available. You must make sure you install the correct version on your Web server based on your machine configuration. The following table lists the appropriate configurations:

Use this

If you are running

Comments

Posting Acceptor 2.0

Windows NT 4.0 with SP3
IIS 4.0

Posting Acceptor 2.0 supports both content posting and the unpacking of cabinet (.cab) files on the server.

Posting Acceptor 1.0

Windows NT 4.0 with SP3
IIS 3.0

You cannot unpack .cab files with this version of posting acceptor. Use this for content posting only. You can move your files to the server and then manually register any necessary files that would have been registered by the .cab process.

Note: Posting Acceptor does not work on any platforms that are using Personal Web Server or Peer Web Server. You must use IIS.

You can install Posting Acceptor 2.0 from the Deploy folder of Visual Studio installation CD number 2. Posting Acceptor 1.0 can be installed from the Microsoft Posting Acceptor Information Website. If you want to install Posting Acceptor 2.0 on a computer that already has the Windows NT Option Pack, you should first check to see if version 1.0 of the Posting Acceptor is already installed. If so, remove it before installing version 2.0. To determine if 1.0 is installed, select the NT Option Pack on the Add/Remove Programs mechanism of the Control Panel. Click Add/Remove, then look for Posting Acceptor 1.0 among the components listed. You may find it under Microsoft Site Server. If it is installed, remove it. You can then install version 2.0 by running PASetup.exe.

Package and Deployment Wizard: Edit Setup.lst file if you rebuild cabs from batch file

After creating a standard setup package using the Package and Deployment wizard, you can manually recreate the setup files (Setup.exe, Setup.lst, and all .cab files) by running the batch file found in the in the Support folder. Doing this allows you to manually customize the package or to recreate a package without running the wizard again. Running the batch file will copy setup.exe and setup.lst from the Support folder to the Package folder and will generate the cab file(s) in the Package folder. However, once the batch file is finished, setup.lst will not know how many .cab files were generated. Unless this problem is remedied, the setup program will fail.

To remedy this situation, do the following:

  1. Before running the batch file, delete all .cab files in the Package folder.
  2. After running the batch file, count the number of cabs produced by the batch operation.
  3. Open the Setup.lst file in the Package folder with a text editor. Note: there are two Setup.lst files. One is found in the Support folder. The second is found outside the Support folder, in the Package folder where the .cab files are created. Be sure to open the Setup.lst file in the Package folder.
  4. In the text editor, look for the following lines (which are at the top of the file):
  5. 
    

    [Bootstrap] SetupTitle=Install SetupText=Copying Files, please stand by. CabFile=Projec1.CAB Spawn=Setup1.exe Uninstal=st6unst.exe TmpDir=msftqws.pdw

  6. After the last line (TmpDir=msftqws.pdw), insert the following line:

Cabs=N

where N equals the number of cabs generated.

The Setup.lst should now be up to date, and the setup won't fail.


Package And Deployment Wizard: Error 80042114

If you are creating a package for Internet deployment and you get the following error:

Unexpected error 80042114 has occurred: The Web server you selected does not indicate support for the service provider you selected. Do you want to proceed anyway?

This error occurs because you have specified that your package should be posted to an FTP site using an HTTP URL. If you are certain that you have access privileges to the web server, you can click "Yes" and the deployment will proceed.

To avoid this error in the future, when creating a package for deployment on the same server, specify the site and its protocol. When you do so, the following dialog box will appear:

The specified URL and publishing method can be saved in the registry as a Web publishing site. This ensures that the URL and publishing method are valid and saves you time in future deployments to this site. Do you want to store this information as a Web publishing site?

If you select "yes", this saves the site information and you will no longer receive the 80042114 error.

Package and Deployment Wizard: Use Mdac_typ.Cab and Mdac20.Cab to Distribute Data Access Components

When your Internet Package includes any of the following four files, the Wizard will by default set these files to be downloaded from http://activex.microsoft.com/controls/vb6/mdac_typ.cab.

MSDAOSP.dll 
MSADO15.dll 
MSADCF.dll 
ODBC32.dll 

Similarly, the Wizard will, by default, set the following files to be downloaded from http://activex.microsoft.com/controls/vb6/mdac20.cab:

MSADOR15.dll 
MSADCO.dll

In both cases, these defaults are indicated as the "Download from Microsoft Web site" option on the File Source screen. These cab files (mdac_typ.cab and mdac20.cab) perform special handling that should not be attempted manually. In order to ensure that the proper handling takes place, your Internet cab should not include these files but rather should reference the cabs. Therefore, you should never choose the "Include in this cab" option for any of these files. In addition, if you choose the "Download from alternate Web site" option, you should be careful to specify cabs that are copies of these cabs to ensure that the proper handling takes place.

Do not change the default settings for these files.

Package and Deployment Wizard: Manually Include .ASP and .HTM Files For IIS Applications When Using Standard Setup

If you use the Package and Deployment wizard's standard setup to deploy an IIS application, you must manually include any .asp or .htm files with the package. Add the files using the Include Files dialog box.

Package and Deployment Wizard: Bad Date and Time Formats

In certain situations, the Package and Deployment Wizard will incorrectly write time and date information to the Setup.lst file. When this occurs, the setup will fail because the dates will be written in a form that the setup.exe can't read. The problem occurs when you create a deployment package using the US version of Visual Basic on:

To fix the bad formats:

  1. From the Start menu, open Control Panel.
  2. Click the Regional Settings icon.
  3. On the Date tab, change the Date separator to "/".
  4. On the Time tab, change the Time separator to ":".
  5. Run the Package and Deployment Wizard.
  6. Restore the date and time settings.

Package and Deployment Wizard: Unable to Run Setup.exe on First Windows 95 Version

Any setup package built with the wizard will not launch on certain installations of Windows 95 due to lack of support for an API in the original version of the Oleaut32.dll. This failure will not occur on OS release 2 of Windows 95 or any versions of Windows NT 4.0 and later, and will not occur if Microsoft Office 97 or Internet Explorer 3.0 or 4.0 has been installed. Any installation of a Visual Basic 5.0 application will also remedy the situation. You can also work around this failure by first overwriting the older version of Oleaut32.dll with the latest version. Be sure to shut down all applications before attempting to manually update Oleaut32.dll.

Package and Deployment Wizard: Packaging ActiveX Documents

The Visual Basic 6.0 Package and Deployment Wizard can insert CODEBASE= and VERSION= information directly embedded into the .vbd file for your ActiveX Document project. This eliminates the need for having the extra .htm file previously used to launch ActiveX Documents. The embedded information allows Internet Explorer to read the .cab file name for your ActiveX Document code and version information from the .vbd file and carry out the installation. You can now navigate directly to the .VBD file and your User document code will download if necessary.

The same functionality was available for Visual Basic 5.0 setup using the SetCodeBase utility found on the Visual Basic Owners Area.

The following are some issues with Visual Basic 6.0 Package and Deployment Wizard generated setups for User documents:



Error Message Issues


No Help Topic for the Following Error Messages

There are currently no Help topics for the following error messages:

  • "Object module needs to implement '<name>' for interface '<classname>'."
  • An interface is a collection of unimplemented procedure prototypes. This error occurs when you specified an interface in an Implements statement, but you failed to add code for all the procedures in the interface.

    You must write code for all procedures specified in the interface. An empty procedure containing only a comment is sufficient.

    For additional information, select the item in question and press F1.

  • "Private Enum types and Enum types defined in standard modules or private classes cannot be used in public object modules as parameters or return types for public procedures, as public data members, or as fields of public user defined types."
  • This error occurs when you attempt to use an Enum type (or private Enum type) as:

    Avoid using Enum or private Enum types in these circumstances.

  • "Can't ReDim, Erase, or assign to Variant that contains array whose element is With object."
  • This error occurs when you attempt to ReDim, Erase, or assign to a Variant a variable whose element is a With object. For example, the following code will produce this error:

    
       Type Test
          Name as Integer
       End Type
    
       Sub Main()
          Dim c(0) As Test
          Dim e
          e = c
          With e(0)
             ReDim e(1)
          End With
       End Sub
    



    WebClass Designer Issues

    Webclasses: "Me." Not Supported

    You cannot use the "Me" reference in your webclass code to reference the webclass object. For example, the documentation frequently shows that you can write code such as "Me.URLData = value". This is not supported. Instead of using Me, you must use the "Webclass" statement. For example, instead of Me.URLData, you would use Webclass.URLData.

    Webclasses: Invalid HTML Syntax Can Cause Unspecified Error

    If one of the templates you add to your webclass contains badly formed HTML, you will sometimes receive an error message on loading the template. The message states only that an unspecified error has occurred. For example, in older pages there may be two BODY tags, one that specifies a background GIF and one that specifies a color. You may also have errors in unmatched opening and closing tags, invalid nesting, or other syntax issues. If you receive this message on loading a template, check your HTML carefully or run the file through an HTML syntax checker, then reload the template.

    Webclasses: Avoid Using Global or Static Variables in a Webclass

    One allocation of global variables occurs per thread in a multi-threaded environment. For more information, search online, with Search titles only selected, for "Scalability and Multithreading" in the MSDN Library Visual Studio 6.0 documentation.

    Webclasses: Some External HTML Changes are not Detected Automatically

    When working on an HTML template in the webclass designer, any changes made to the HTML file outside of Visual Basic (for example, in an external HTML editor) are usually detected by Visual Basic when you return to the designer. In these cases you are prompted to reload the changed file.

    In some cases external changes are not detected. The most common occurrence of this problem is when you set focus to a Visual Basic window other than the webclass designer before switching to an external editor. Upon return to Visual Basic, the refresh prompt does not appear. This could result in the external changes being overwritten when you save the project, unless you refresh the file on your own.

    Note You may also see this situation if you edit the template while your project is running.

    In cases where you make changes to the HTML and are not prompted to refresh, you can refresh manually by selecting Refresh HTML Template from the template's shortcut menu.

    Note: When you navigate to your external HTML editor, it is best ot use the Edit HTML toolbar button or shortcut menu command. If you use the taskbar or th ALT+TAB to navigate to an editor, make sure to save your project before leaving Visual Basic, or you could lose changes you made in the designer.

    Webclasses: IIS Administration Console File Settings are not Acknowledged for Templates

    The IIS Administration Console allows the server administrator to specify properties for files that are available on the IIS server. These properties include HTTP headers, file security, and custom errors. These properties will not be set on a webclass template file if that file is sent to the client by the webclass runtime.

    Webclasses: Unattended Execution

    A project containing a webclass must have the Unattended Execution option selected in the Project Properties dialog box. This property has the following benefits:

    Note You must set the Threading Model property in the Project Properties dialog box to Apartment Threaded to run as an apartment-model object.

    Webclasses: Retain in Memory

    In standard Visual Basic projects, projects are unloaded from threads or processes as soon as they are no longer being used. In a webclass project, this model can cause performance issues because the server must create an object, invoke a method on it, and destroy it. You can optimize your webclasses by setting a project property called Retain In Memory. The Retain In Memory property prevents the project from being unloaded until the thread or process in which it is running terminates.

    Webclasses: Accounting for Differences Between the Debug and Compiled Versions

    Visual Basic provides the ability to debug components running under a Windows NT service. One of the most common uses of this feature is to debug an IIS Application. Visual Basic achieves this by running the component in the Visual Basic IDE. When the component runs, IIS creates a proxy object supplied by Visual Basic, which in turn creates the real object running in the Visual Basic IDE. IIS then communicates with the object through DCOM.

    This debugging behavior is very different from how the project runs as a compiled DLL. Certain behavior that is present in debug mode works differently when you run the compiled version of the project. Because of this, you must keep the compiled behavior of the project in mind when you build your webclass.

    The following are key areas in which you must tailor your application to the behavior the webclass displays as a compiled application:

    Webclasses: Performance Tips

    The following are miscellaneous tips you can incorporate to improve the performance of your IIS applications:

    Webclasses: Miscellaneous Issues

    Webclasses: Articles of Interest

    Webclasses tie together several distinct technologies, including Visual Basic, Active Server Pages, Internet Information Server, and Windows NT. There are several articles available on Microsoft's Web site that may be useful to you as you learn about the technologies behind webclasses. Some of the articles that may be particularly helpful are listed below:

    Webclasses: Formatting in Source HTM File

    You may see a loss of some formatting in your HTML source code after you add a template file to the webclass designer. For example, the webclass may remove some extraneous white spaces from your original file. This will not affect the functioning of your HTML page in any way.

    Webclasses: Cannot Support HTML's LINK Element

    LINK tags are used in an HTML page to reference style sheets. While your HTML pages in a webclass project can contain this tag, you cannot use the designer to access the LINK element and process Visual Basic code for it. If you need to manipulate a LINK tag in your code, you can manually add event notation to the tag as shown in the online documentation. To see the notation, search online, with Search titles only selected, for "Manually Adding Event Notation to an .HTM File" in the MSDN Library Visual Studio 6.0 documentation.

    Webclasses: When Using Visual SourceSafe with Webclass Projects, You Must Manually Check in the Project's .HTM Files

    When you check an IIS application project into Visual Source Safe, the HTML pages associated with the project are not automatically checked into the Source Safe tree with the rest of the project files. You must manually add them to the tree as related files.

    Webclasses: TagPrefix Should Be WC:

    Although the default value for the TagPrefix property for your webclass templates is WC@, it is preferable for you to use WC: whenever possible to indicate text replacements in your template files.  

    Webclasses: Variant Parameter in URLFor Method

    The WebItem parameter of the URLFor method can accept a WebItem object or the name of a WebItem as a string. For performance reasons, you should use the string form when referencing multiple webitems within one request.

    Webclasses: Sequencing Data is Passed Using the &WCU Parameter

    In "Handling Sequencing in Webclasses" section of the Building Internet Applications book in MSDN's Component Tools Guide, the documentation incorrectly states that you can move data between the client and the server using a ?Data parameter appended on to your URL request. In fact, you must use a &WCU parameter instead of ?Data. The correct syntax for the request is:

    WCI=webitem1?WCE=event1&WCU=01

    Webclasses: StateManagement Property Constants Contain Incorrect Property Reference

    The "StateManagement Property Constants" topic incorrectly states that the RetainInstance constant causes the webclass to retain state data until the webclass object calls the SetComplete method. This should say that data is maintained until the webclass object calls the ReleaseInstance method. To see the erroneous Help topic, search online, with Search titles only selected, for "StateManagement Property Constants" in the MSDN Library Visual Studio 6.0 documentation.

    Webclasses: State and the Session Object

    If the WebClass's StateManagementType is wcRetainInstance, a separate instance of the WebClass will be maintained in the ASP Session object per user session. In some cases, it may appear to you that state is not being maintained when you actually have two instances of a webclass in your Session object. One situation in which this might occur is when you have two virtual directories that both point to the same location. If you create one virtual directory when you begin your debugging session and reference the second in your code, you will actually start a second instance of the webclass when the code is activated.

    Please refer to the Active Server Pages documentation in MSDN for details on how the Active Server Pages Session object is implemented.

    Webclasses: Code Corrections in Help Topic "Defining Webclass Events at Run Time"

    In the topic "Defining Webclass Events at Run Time," the sample code shows a statement that reads:

    rs = New ADO.Recordset

    The correct syntax for this line should be:

    Set rs = New ADODB.Recordset

    Webclasses: HTM and ASP Files Not Included in Standard Packages

    When you package an IIS application into a standard package using the Package and Deployment Wizard, the wizard does not automatically include the .htm and .asp files for the project in the .cab file it creates. You must include these files manually while you are packaging the application.

    Webclasses: Unspecified Error

    An "unspecified error" occurs if you add an existing webclass to a new project and then click on the template icon before the project has been saved. If you receive a prompt saying that "An unspecified error has occurred" in this context, save your project.



    DHTML Page Designer Issues


    Page Designer Error Messages

    There are currently no Help topics for the following error messages:

  • "Save internal HTML to File?"
  • This occurs if you specify a new, existing HTML file in the Property Page.

    If you have HTML code in an instance of the Page Designer and you decide to use a different, existing HTML file with the designer, you must open the property page and specify the name of the existing file. The Page Designer must then know what to do with the internal HTML that is currently in the designer. If you answer Yes to this question, Visual Basic will save the HTML to a file after you specify a filename.

  • "DHTML Page Designers cannot be private"
  • This occurs if you attempt to change a DHTML Page Designer's Public property to False. While ActiveX designers can be either public or private, they must be Public to be accessible in a DHMTL application. Private designers can be useful in certain cases, such as in the Data Environment when you want to encapsulate your data access logic in the Data Environment, but not make it public.

  • "Reload changed HTML file?"
  • This occurs if the Page Designer notices that the HTML file referenced by the designer has changed on disk. This message confirms whether you want to load the modified HTML back into the designer.

    Page Designer: "Me." Not Supported

    You cannot use the "Me" reference in your page designer code to reference the DHTMLPage object. For example, the documentation frequently shows that you can write code such as "Me.Document.item". This is not supported. Instead of using Me, you must use the "DHTMLPage" statement. For example, instead of Me.Document, you would use DHTMLPage.Document. If the designer is private, "Me" can be used, but private is not allowed in DHTML pages.

    Page Designer: Cannot Access HTML Elements from Forms or External Objects

    You cannot write code in a form, message box, or other object that references HTML elements on the page. Page elements are only accessible within the page itself.

    Page Designer: Image SourceFiles are Resolved Incorrectly

    Often, as you work in the page designer, you will want to reference an image that is located in the same directory as your current HTML page. Normally, when you reference such an image, you do not include a path in the image element's SRC attribute. The lack of a path tells the browser to pull the image from the page's current directory. For example, you might enter "myimage.gif" in the SRC property for an image of this type, rather than specifying "c:\mydhtml\myimage.gif." This is called a relative path, because it does not specify the full location of the image file.

    At design time, the page designer does not correctly display these images with relative paths. When you enter such a property value in the SRC property or display a page that contains such a reference, two things will happen:

    Despite these problems, the image appears correctly when you run the project. So you can ignore the "About:" keyword that appears in the SRC property and the fact that the image doesn't appear in the designer. When you save the HTML file, the image tag will be written correctly.

    Page Designer: Binary Persistence Issue

    Some controls attempt to save some or all of their properties in a binary format that cannot be directly represented in HTML. Because of this situation, some control properties may not be saved after you run your project. In order to correct this problem, set the property at run-time. The following list shows the known properties for which this problem occurs:

    Control

    Item

    Tabbed Dialog Control

    TabsPerRow property does not persist

    Windowless Controls Listbox

    List items do not persist

    Common Controls

    Tabstrip settings do not persist

    Common Controls

    Toolbar settings do not persist

    Common Controls

    StatusBar settings do not persist

    ADODC Control

    ConnectionString property does not persist

    In addition, for many controls, font properties do not persist. This occurrence is the most common manifestation of the binary persistence problem.

    Page Designer: Type Library Problems are Preventing Some Help Topics from Appearing

    When you begin a page designer project, you will see two DHTML type libraries in the Object Browser -- the DHTMLPAGELIB library, and a DHTMLProject library. Help is enabled for the DHTMLPAGELIB library, but not for the DHTMLProject library. Most elements in DHTMLProject should be available within the other library.

    In other cases, type library problems are preventing certain pieces of the help to appear or function correctly. This happens in the following cases:

    In most cases, you should be able to locate the topic you want through the index in the MSDN Help viewer.

    Page Designer: Modal Prompts Appear Behind Browser in Run Mode

    If you add a message box to your DHTML page, the message box appears behind Internet Explorer when activated in run mode. In addition, you cannot move Internet Explorer out of the way in order to view the message, because the message is modal. When you hear the beep that indicates a message is on the screen, select the Visual Basic application from your taskbar to view and clear the message.

    Page Designer: Do Not Watch Objects of Type HTMLDocument

    Expanding a watch on objects of type HTMLDocument may cause problems within the IDE. Avoid watching objects of this type.

    Page Designer: Cannot Design Frames Within A Page Designer

    When you create web pages in the DHTML Page Designer, you cannot insert framesets within the page and fill their contents. You can, however, display the pages you create for your DHTML application within a frameset created outside of Visual Basic. If you want to design and debug frames, the process is as follows:

    1. In Visual Basic, design the contents of each frame with an individual DHTML Page Designer.
    2. In an external editing program, design the frameset document as a separate .htm file and save it in the temp directory. Set the SRC attributes for each frame to point to your content pages, using the names you defined in their BuildFile properties.
    3. In Visual Basic, choose "Start Browser with URL" on the Debugging tab of the Project Properties dialog box and enter the path of the frameset file.
    4. Enter run mode. Visual Basic launches Internet Explorer and loads the frameset page you designed in an external program. The frameset document should then load your page designer pages in the appropriate frames.
    5. Debug your application as usual.

    Page Designer: Cannot use Visual Basic Code with the SetInterval Method

    If you use the SetInterval method of the Internet Explorer BaseWindow object on a timer within your DHTML applications, you must set the first parameter of the method to point to a Javascript or VBScript time routine contained within the HTML page. This method cannot reference a Visual Basic routine within your page designer code.

    Page Designer: Control Issues

    The following are items to be aware of as you work with ActiveX Controls in your DHTML applications:

    Page Designer: Miscellaneous HTML Issues

     The following are items to be aware of as you create and work with HTML in the DHTML page designer:

    Page Designer: Miscellaneous Debugging Issues

    The following are items to be aware of as you debug and test your DHTML applications:

    DHTMLPage.BaseWindow.document.activeElement.all.length
    DHTMLPage.BaseWindow.document.activeElement.offsetParent.all.length
    DHTMLPage.BaseWindow.document.activeElement.children.length

    Page Designer: Syntax for Navigating Programmatically

    In the "Navigating in DHTML Applications" topic in the Developing DHTML Applications section of the Building Internet Applications book, the documentation states that you can programmatically move between pages by using this syntax in your code:

    Private Function Button1_onclick() As Boolean BaseWindow.navigate "Project1.DHTMLPage2.html" End Function

    This syntax is incorrect, because an underscore, rather than a period, should separate the project name and the page name. The correct syntax to use is shown below:

    Private Function Button1_onclick() As Boolean BaseWindow.navigate "Project1_DHTMLPage2.html" End Function

    Page Designer: OBJECT Tag Insertion

    In the topic "Testing your DHTML Projects," the documentation states that an OBJECT tag is inserted into your page during debugging but does not state that this tag is enclosed in a METADATA tag that is also inserted at this time. In addition, the following clarifications may be helpful:

    Page Designer: Cannot CTRL+TAB Through Windows When Page Designer Has Focus

    When the Page Designer window has focus, you cannot use the CTRL+TAB keystroke to move through all open windows in the Visual Basic IDE as you can with other projects.

    Page Designer: Cannot Delete a Table if it Contains No Columns

    If you delete all of the columns from a table on your page and then try to delete the table, it will still appear in the treeview pane of the designer. To delete the table from the treeview, you must delete the paragraph element under which the table element appears.

    Page Designer: When Using Visual SourceSafe with Page Designer Projects, You Must Manually Check in the Project's .HTM Files

    When you check a DHTML project into Visual Source Safe, the HTML pages associated with the project are not automatically checked into the Source Safe tree with the rest of the project files. You must manually add them to the tree as related files.

    Note This applies only when you have saved your HTML pages to external files. If you have saved them within the project there are no .htm files to check in for your design-time project.

    Page Designer: Unqualified BuildFile Property Results in DLL Building To Desktop

    If you edit the BuildFile property so that it does not specify the drive and directory in which the file should be placed, the system will build the resulting files directly to your desktop. Always enter the fully qualified path when entering values for this property.

    Page Designer: Use of Load Event With Asynchronous Property

    In the "Load Event" topic within the Reference section of the Visual Basic documentation in MSDN, the documentation incorrectly states the following:

    "Programmers can use this event when running asynchronously (when the AsyncLoad property is set to True) as a notification that all elements have been loaded onto the page."

    In fact, this should say that programmers can use the Load event when running synchronously (when AsyncLoad is set to False) as a notification that all elements have been loaded.

    Page Designer: Property Page Issues

     The following are items to be aware of as you work in the property pages for various HTML elements in the DHTML Page Designer:

    Page Designer: Location of Project Files in .CAB Deployment

    In the topic "Deploying your DHTML Projects," the documentation states that the project DLL file, the Visual Basic run-time, and the .dsr and .dsx files for the project are all placed into the same .cab file during the deployment process. This is not correct. In fact, the .dsr and .dsx files for the project are not placed into the .cab.

    Page Designer: Name of Save Option Changed

    In the documentation for the page designer, the procedures for choosing save options tell you to select a Page Properties dialog box option called "Save HTML Within the Designer" if you do not want to save to an external HTML file. This option is actually named "Save HTML as part of the VB Project."


    Page Designer: Problems Seeing Code Changes When Switching from Compiled to Debug Mode

    You may, on occasion, encounter a problem where you do not see changes you have made to the code in your DHTML application when you have run the compiled DLL, made a change to the code, then entered debug mode. In this situation, you can try either of the following fixes:


    Page Designer: Help on most Language Elements is Available in the Platform SDK

    Most language elements in the page designer are inherited from the Internet Explorer's document object model. F1 for these elements is not available. To get help on these topics, open the "Platform SDK" node in the MSDN table of contents, then open the "Internet/Intranet/Extranet Services" node and look for the Dynamic HTML section. You can also use the Index to do a search for the name of a particular language element.



    Extensibility Issues

    "Command-Line Safe" Add-In Behavior

    You can use the Load Behavior box in the Add-In Manager to control how and when an add-in loads in Visual Basic.

    When you select Command Line load behavior for an add-in, you may get the following warning message:

    "The selected add-in has not been confirmed to be 'command-line safe', and may require some user intervention (possible UI). Do you wish to proceed?"

    This occurs when you select an add-in for Command Line load behavior that was not declared by the author of the add-in to be "command line safe" when it was created. (This can be indicated with the Add-In Designer through a checkbox.)

    "Command-line safe" means that the add-in is registered in a way to indicate that it contains no user interfaces that require user input when Visual Basic is invoked through a command-line. A user interface can interfere with the operation of unattended processes (such as build scripts).

    If you don't indicate that an add-in is command-line safe (even if it is command-line safe), when a user selects your add-in and then Command Line in the Load Behavior box, they'll receive the warning message. This isn't a serious problem, but merely a warning to the user that the selected add-in might possibly contain UI elements that can pop up unexpectedly and halt their automated scripts by pausing for user input.

    Manually Setting Add-In Registry Values

    You can also manually set the command-line safe flag (as well as the other values) for an add-in through the Windows registry.

    Note: You should not attempt to directly manipulate any Windows registry entries unless you are familiar with doing so. Setting an invalid registry entry can cause problems with Windows, even preventing you from being able to load Windows.

    In Visual Basic 6.0, the key that holds add-in information is located in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visual Basic\6.0\Addins\<add-in.name>. For Visual Basic 6.0, the LoadBehavior DWord values are:

    There is also an additional DWord value that indicates whether the add-in is command-line safe: CommandLineSafe. A value of 1 indicates the add-in is command-line safe, while a value of 0 (the default) indicates that it is not command-line safe. A value of 0 is implied if you forget to check the command-line safe box in the Add-In Designer since the default value of 0 is assumed, and the add-in isn't considered command-line safe.

    So, to demonstrate how to use these values to indicate that a ficticious add-in (My.Addin) is command-line safe and to have it load when Visual Basic is started by command-line, you would set the following registry values, using a tool such as RegEdit:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visual Basic\6.0\Addins\My.Addin
       "FriendlyName"="A friendly name for your add-in"
       "Description"="This value describes the add-in"
       "LoadBehavior"=dword:4
       "CommandLineSafe"=dword:1
    

    Using the Add-In Designer

    Visual Basic 6.0 includes a new tool, called the Add-In designer, to aid you in creating add-ins. To open it:

    Unfortunately, context-sensitive help currently isn't available for the Add-In designer. Help topics are available, however. You can find the appropriate topics by searching for Add-In Designer in the MSDN index. You should see a list of three associated topics:

    For more information, search online, with Search titles only selected, for "Registering Add-Ins" in the MSDN Library Visual Studio 6.0 documentation.

    Add-In Designer: More Information About Specifying Satellite DLL

    When creating an add-in with the Add-In designer, you can specify a DLL on the Advanced tab. Be sure, however, to type only the name of the DLL file, and not its fully-qualified path. For example:

    MyAddinName.DLL

    not:

    Addins\MyAddinName\MyAddinName.DLL

    Localized Satellite DLLs

    If you create a localized satellite DLL, you should also create a resources directory and a locale ID directory for the satellite DLL and install the DLL in the appropriate directory. The schematic for such a path is:

    <AddIn Directory>\Resources\<Locale ID>\<MySatellite.DLL>

    For example, a satellite DLL for the German version (Locale ID = 1031) would go into the directory:

    C:\Program Files\MyAddin\Resources\1031\MyAddinName.DLL


    Miscellaneous Issues

    Returning an Error Value from a DLL

    To return an error value from a dynamic link library (DLL) procedure, the C language prototype must be coded so that the return value is an HRESULT. Refer to the Microsoft Press OLE 2 Programmer's Reference, Volume 2 for more information on how to do this.

    Data Access Guide: DataFormats tutorial has wrong file extension

    The topic named "Format Objects Tutorial" contains a wrong reference to a file with the extension .mdl. The actual file extension is .udl. For more information, search online, with Search titles only selected, for "Format Objects Tutorial" in the MSDN Library Visual Studio 6.0 documentation.

    The file in question is listed as "Northwind.mdl," but should be "Northwind.udl."

    External Editor Field Added to Options Dialog Box

    The Advanced tab of the Options dialog box has a new text box called External HTML Editor. This option allows you to select the HTML editing program that appears when you select Launch Editor from either the DHTML Page Designer or the Webclass Designer. You must enter the drive, path, and executable name of the program you want to use. You can choose an HTML editing program, a word processing program, or the text editor you prefer to use.

    CodeBase Fixup Utility in Internet Component Download

    The "Downloading ActiveX Components" section of the Building Internet Applications book makes reference to a utility called the CodeBase Fixup Utility that can be used to manually set codebase information in an ActiveX document. This information is incorrect. The utility is not shipped in the \Tools directory with Visual Basic, and you do not need to perform this process manually for Internet Explorer 4.0 because the Package and Deployment wizard automatically inserts the appropriate codebase information for these and other applicable projects.

    Text in Project Properties/Open Dialogs Truncated in Japanese, Chinese, and Korean versions of Windows

    When you run Visual Basic in the Japanese, Chinese, or Korean version of Windows, you may notice that text in the Project Properties or Open dialogs is truncated. If this occurs, shut down Windows, restart it, then restart Visual Basic and the problem will be fixed.

    Avoid Using Repository Add-In with ActiveX Designers

    You should avoid using the Repository add-in with projects that contain ActiveX designers.

    For a complete list of available designers, on the Project menu in Visual Basic, click Components, then click the Designers tab in the Components dialog box.



    Microsoft Transaction Server (MTS) Issues

    Building and Debugging MTS Components in Visual Basic 6.0

    Visual Basic 6.0 supports the debugging of Microsoft Transaction Server (MTS) components, but there are several issues to keep in mind. The following issues apply only to MTS components running in the debugger.

    Windows NT 4.0 SP4 Required

    MTS debugging support requires Windows NT 4.0 Service Pack 4 (SP4) or later. MTS debugging is not supported under Windows 95 or Windows 98.

    MTSTransactionMode Property

    Visual Basic 6.0 introduces a new MTSTransactionMode property on classes that allows you to set the Microsoft Transaction Server (MTS) transaction support required for the class. The values for this property are equivalent to the property in the MTS explorer. However, the names of these properties in the Visual Basic IDE are not exactly the same as the names used in the MTS explorer. The mapping of names is as follows:

    VB Property Value

    Option in MTS Explorer

    0 - NotAnMTSObject

    N/A

    1 - NoTransactions

    Does not support transactions

    2 - RequiresTransaction

    Requires a transaction

    3 - UsesTransaction

    Supports transactions

    4 - RequiresNewTransaction

    Requires a new transaction

    The Transaction attributes of a class are imported into MTS only if the component is added to a Package with the Add File utility. If the component is brought into a package via the registered component list, the MTS attributes are not reflected in MTS Explorer.

    Enabling MTS Debugging

    To debug MTS components with Visual Basic 6.0, set the MTSTransactionMode property to a value other than 0-NotAnMTSObject. When you hit F5 to begin debugging, Visual Basic will now activate your component inside of the Microsoft Transaction Server runtime.

    Single Client, Server, and Thread

    Debugging is supported only for a single client and a single MTS server component at a time operating on a single thread. For situations requiring multiple clients or MTS servers or multiple threads, you should debug the Visual Basic component in the Visual C++ development environment. For details on debugging Visual Basic components in the Visual C++ environment, see the Visual C++ documentation.

    Build Requirements for Debugging

    To build and debug an MTS component in Visual Basic, you must build your component into a DLL and set binary compatibility on the project. If you do not set binary compatibility and you add interfaces to, or remove them from, the component, these changes may not be detected by MTS.

    Debugging Limitations on Class_Initialize and Class_Terminate Events

    You should not put code in the Class_Initialize and Class_Terminate events of an MTS component that attempts to access the object or its corresponding context object. The Visual Basic run-time environment calls Class_Initialize before the object and its context are activated, so any operations that Class_Initialize attempts to perform on the object or its object context will fail. Similarly, the object and its context are deactivated before Class_Terminate is called, so operations that this method attempts on the object and its context will also fail.

    You should not set a breakpoint in the Class_Terminate event of an MTS component. When the debugger reaches the breakpoint, it will attempt to activate the object, an attempt that will fail and cause Visual Basic to stop.

    Watching MTS Objects

    During debugging, do not watch object variables returned from the MTS runtime, including return values from SafeRef, GetObjectContext, CreateInstance, and other functions that return objects wrapped by MTS.

    To simulate the runtime environment more effectively, the Microsoft Transaction Server runtime pauses operation each time that Visual Basic breaks in the debugger. Internally, Visual Basic makes method calls on objects that are being watched in the debugger. Since the MTS runtime is paused as you look at watch variables, the calls that Visual Basic makes to these objects may fail.

    If you do add MTS-wrapped objects to the watch window or watch via other means, it may cause an inconsistent state to be detected by MTS, and the process will be terminated.

    Registration and Debugging

    The debugging facilities in Visual Basic allow an MTS component to be debugged without being installed in the MTS explorer. When you start debugging, Visual Basic will automatically call into MTS to run your component in the MTS runtime.

    Depending on your debugging requirements, you may also want to install your component into the MTS explorer. There are a few issues to keep in mind when doing this. If you make changes in the Visual Basic IDE in your component’s interfaces, class names, project names, transactional support or other settings, there may be mismatches between the configuration data in the MTS explorer and the actual configuration running in the Visual Basic debugger. It is also possible that the component could be launched in MTS while you are debugging it. Further, if you export a package while you are debugging a component in the package, MTS will treat the Visual Basic development environment as the component.

    These problems can be avoided by making sure the component to be debugged is not registered in the MTS explorer. As noted later in this section, if you change the configuration of an installed component in the debugger, you may have to remove and reinstall the component.

    Component Changes Made During Debugging

    In Visual Basic, you can modify transactional attributes on an MTS component during debugging. Visual Basic does not register these changes in the MTS explorer.

    If during debugging you make a source code change that requires Visual Basic to generate a new CLSID or ProgID or that changes the transactional attribute of any MTS class, you must use MTS Explorer to delete and reinstall the package containing the class. If you have set binary compatibility for the component, you will be warned that changes have occurred.

    Starting Debugger While a Component is Running in MTS

    If you are running a component outside the debugger and then decide to begin debugging, an instance of the component may still be running in MTS when you start it in the debugger. MTS will detect this condition and attempt to silently shut down the instance it controls. To avoid this problem, remove the component from the MTS explorer before you begin debugging.

    Debugging Unregistered MTS Components

    An MTS component can run in the Visual Basic debugger without having been registered in the MTS catalog. In this case, the component will not be visible in the MTS Explorer. It is preferable to debug components that are not registered, as it avoids a number of problems discussed elsewhere in this section.

    Deployment and Debugging

    To properly deploy an MTS component, you need to build the component as a DLL, be sure the component is not running in any debug session, and then run the Package and Deployment wizard. The component can be open in Visual Basic, but it cannot be active in a debug session.

    MTS Components in Debugger Run As If in Library Package

    The MTS run-time environment treats Visual Basic components being debugged as if they belong to a library package, even if the components are registered with MTS as belonging to a server package. Library packages do not support component tracking, role checking, or process isolation.

    Because MTS components being debugged behave as if they are in a library package, you cannot do security debugging in the Visual Basic development environment. Remote activation of the debugged component will use the security attributes of Visual Basic. Remote activation of a component running in the MTS run-time environment (mtx.exe), however, will use the security attributes set up for the particular package in the MTS explorer. To debug security issues, you should use the Visual C++ development environment.

    Component Failure Causes Visual Basic to Stop Running

    An MTS component being debugged runs in the same process as the Visual Basic development environment, so a component failure will also cause Visual Basic to stop running. Also, the MTS runtime environment automatically shuts down the runtime process when it detects an inconsistent state internally. In these cases, MTS will display a dialog box explaining the situation, the Visual Basic window will disappear, and an event will be recorded in the Windows NT system log. Check the Windows NT Event Viewer as well as other topics in this document for possible explanations of the problem.

    No Support for Transacted Web Classes

    Transacted Visual Basic Web Classes are not supported in Visual Basic 6.0.

    RunWithoutContext Registry Key Is Ignored

    Visual Basic 6.0 ignores the RunWithoutContext registry key. This key is no longer needed with Visual Basic 6.0’s integrated debugging of MTS objects, as the functionality provided by the context object is now available during debugging.

    Using IObjectControl

    If you need to execute code during startup and shutdown of your MTS object, you should implement the IObjectControl interface (from the Microsoft Transaction Server Type Library) and use the Activate and Deactivate functions. These functions are called by the MTS runtime during startup and shutdown of your object. Using the IObjectControl functions is preferable to using Class_Initialize and Class_Terminate due to the limitations described below.

    You can place code that accesses the object context in the Activate and Deactivate functions. However, due to the way that the MTS runtime activates objects, you should not put breakpoints on IObjectControl::Deactivate or IObjectControl::CanBePooled.

    Debugger May Reactivate Objects Released by MTS

    Visual Basic 6.0 may reactivate MTS objects while you are debugging single-step through a client. Because of the way that Visual Basic 6.0 discovers information about objects, this is expected behavior. For example, consider the following code:

    Dim x as object Set x = CreateObject("MyApp.Class") x.Test Set x = Nothing

    If the x.Test method calls SetComplete, MTS immediately frees x from memory, but x has not yet been set to Nothing. When x.Test returns, the Visual Basic debugger calls QueryInterface on x for the IProvideClassInfo interface. The context wrapper associated with x creates a new instance of MyApp.Class to service the QueryInterface call. As a result, you will see this uninitialized object in the debugger after x.Test has returned. This object appears only in the debugger and is removed by the subsequent instruction to set x to Nothing.



    Dictionary Object

    Introducing the Dictionary Object

    Visual Basic 6.0 includes a new Dictionary object that can be used instead of a Collection object or an Array. A Dictionary object is the equivalent of an associative array as used in PERL and other languages. The Dictionary object provides additional properties and methods that aren't available for Collections or Arrays.

    The Dictionary object is contained in the Microsoft Scripting Runtime (Scrrun.dll) that ships with Visual Basic 6.0. You must add a reference to Scrrun.dll in order to use the Dictionary object in your project.

    To learn more about the Dictionary object, search online, with Search titles only selected, for "Dictionary Object" in the MSDN Library Visual Studio 6.0 documentation.



    Visual Component Manager

    Known Problems in Visual Component Manager

    "Related Files Tab (Component Properties Dialog Box)" Topic Incorrect

    Visual Component Manager User Interface Reference: The topic "Related Files Tab (Component Properties Dialog Box)" incorrectly states that the tab is used to display and enter files that are related to the selected component. In fact, none of the information displayed on this tab can be modified. You can add related files to a component only when publishing or re-publishing the component. For more information, search online, with Search titles only selected, for "Publishing Components" in the MSDN Library Visual Studio 6.0 documentation.

    Removing Repository 1.0 Registry Keys

    If you installed VCM 5.0 (previously available for web download) you will have the following Windows Registry keys setup. They were necessary for VCM 5.0 and the 1.0 version of the Repository. If you find the following Registry entries then it safe to remove them and may, in fact, improve VCM 6.0 performance.

    Adding Repository Tables to an Existing .mdb File

    If you try to open an existing .mdb file from within VCM that is not a repository database (i.e., it does not contain the repository structure/tables), you will be asked if you want the repository tables added to the database. You should not do this for normal use; the repository should generally be in a separate database. This will work, but it can take as long as 10 minutes to create the repository structure in an existing .mdb file.

    To create a brand new .mdb file containing the repository structure, right-click in the folder outline, click Repository, click New, and then enter the name of the file you want to create.



    Application Performance Explorer

    Known Problems in Application Performance Explorer

    Configuring Remote Automation Security When Using Remote APE Components

    In order to use Remote Automation (RA) to communicate with remote APE components, you may have to configure RA security using the Remote Automation Connection Manager (Racmgr32.exe).

    To configure RA security

    1. Start Racmgr32.exe and click the Client Access tab.
    2. Select either "Allow All Remote Creates" or "Allow Remote Creates by Key".
    3. If "Allow Remote Creates by Key" is selected, make sure the "Allow Remote Activation" check box is checked for each APE component.

    RA supports the following levels of authentication:

    Name

    Value

    Description

    Default

    0

    Use Network default.

    None

    1

    No authentication.

    Connect

    2

    Connection to the server is authenticated.

    Call

    3

    Authenticates only at the beginning of each remote procedure call, when the server receives the request. Does not apply to connection-based protocol sequences (those that start with the prefix "ncacn").

    Packet

    4

    Verifies that all data received is from the expected client.

    Packet Integrity

    5

    Verifies that none of the data transferred between client and server has been modified.

    Packet Privacy

    6

    Verifies all other levels and encrypts the argument values of each remote procedure call.

    APE profiles are initially installed with an authentication level of 1 ("None") because Windows 95 supports only that level of authentication. However, if additional security is desired, the level of authentication of a profile can be changed by modifying the profile collection file (the Aemanagr.ini file) by using a text editor such as Notepad.

    Each profile in the profile collection file begins with the name of the profile within square brackets, such as [Peak performance, synchronous (CPU, Pool)]. The attributes of the profile follow, using the format <name>=<value> (such as "Task Duration=1"). To change the authentication level, change the value of the "Authentication" attribute of the selected profile and save the file.

    Compatibility Issues Between the Application Performance Explorer (APE) that Ships with Visual Studio 6.0 and the Version that Shipped with Visual Basic 5.0

    There are known compatibility issues between the Application Performance Explorer (APE) that ships with Visual Studio 6.0 and the APE that shipped with Visual Basic 5.0.

    To avoid the compatibility issues, do one of the following:
    Adjusting Default Settings To Use APE and MTS

    After installing the APETEST database onto your SQL Server, you must adjust some of the default settings in order to use APE and MTS.

    Note   If you haven't already installed the APETEST database on your SQL Server, you should do that first. To learn how to install the APETEST database, search for the topic "APE Database Setup Wizard" in MSDN Library Visual Studio 6.0.

    To configure the APETEST database installation to work with MTS

    1. Start Microsoft SQL Enterprise Manager.
    2. In the Databases folder, right-click the APETEST database and click Edit.
    3. Click the Options tab.
    4. Select the Truncated Log on Checkpoint check box and click OK.
    5. In the Databases folder, right-click the tempdb database and click Edit.
    6. Click Expand.
    7. In the Data Device box, select <new>.
    8. In the New Database Device dialog box, in the Name box, type tempdbData.
    9. In the Size (MB) box, type 10.
    10. Click Create Now, and finally click OK.
    11. Click Expand Now.
    12. Click Expand.
    13. In the Log Device box, select <new>.
    14. In the New Database Device dialog box, in the Name box, type tempdbLog.
    15. In the Size (MB) box, type 10.
    16. Click Create Now, and finally click OK.

    To configure the allowable number of user connections

    1. Start Microsoft SQL Enterprise Manager.
    2. Right-click the server and click Configure.
    3. For example, if your server is named CORONA, in the Server Manager child window, right-click CORONA and then click Configure.

    4. Click the Configuration tab.
    5. In the Configuration box, increase the number of user connections by at least 15.

    Note   If you are running APETEST on an established production database server, you may not have access permission to adjust the current number of user connections. In this case, you should ask your database administrator to increase the number of current user connections by at least 15 connections to support APE testing.

    Application Performance Explorer Server-Side Setup May Generate Error

    While installing the APE server-side components, you may see an error referring to an incorrect version of OLEAUT32.dll. You may dismiss this error and continue with the installation.

    However, this error message may indicate that the Microsoft Transaction Server Package was not installed correctly. To confirm that it was installed correctly, run the Transaction Server Explorer and look for all installed MTS packages on your computer. Visual Studio APE Package should be listed.

    To install the package, AEMTSSVC.pkg, run the MTS Transaction Server Explorer from the Start menu and install the package to the local computer using the MTS Explorer.