HOWTO: Avoid "Error 91" when Debugging MTS Components with Visual Basic

ID: Q188919


The information in this article applies to:
  • Microsoft Transaction Server, versions 1.0, 2.0
  • Microsoft Visual Basic Learning, Professional, and Enterprise Editions for Windows, versions 5.0, 6.0


SUMMARY

When developing Visual Basic components to run under control of Microsoft Transaction Server (MTS), if your object uses ObjectContext, you may encounter the following error when trying to debug them within the Visual Basic environment:

Run-Time Error '91': Object variable or with block variable not set.
This article describes how to configure Visual Basic to allow you to debug these components using the special debug version of GetObjectContext.

There are two ways to avoid this error when writing Visual Basic components. The first is to configure Visual Basic to use a special version of the object context. The second way is to use the Microsoft Developer Studio environment.


MORE INFORMATION

To facilitate application debugging using Visual Basic, you can debug a component that uses ObjectContext by enabling a special version of the object context. This debug-only version is enabled by creating the following registry key:


   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Transaction

        Server\Debug\RunWithoutContext 

Steps to Create the Registry Key

  1. Start Regedit and locate the following registry key:
    
       HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Transaction Server 


  2. Select the Transaction Server key, right-click the selection and choose New. Next, choose Key and then name this new key Debug.


  3. Now, select the Debug key, right-click and then choose New. Next, choose Key and then name this new key RunWithoutContext.


Now that this registry entry is present on your computer, you should now be able to run your MTS component using Visual Basic.

NOTE: When running in debug mode, none of the functionality of MTS is enabled. GetObjectContext returns the debug ObjectContext rather than returning Nothing.

When running in this debug mode, the ObjectContext operates as follows:

  • ObjectContext.CreateInstance - Calls COM CoCreateInstance (no context flows, no transactions, and so on).</ITEM>


  • ObjectContext.SetComplete - No effect.


  • ObjectContext.SetAbort - No effect.


  • ObjectContext.EnableCommit - No effect.


  • ObjectContext.DisableCommit - No effect.


  • ObjectContext.IsInTransaction - Returns FALSE.


  • ObjectContext.IsSecurityEnabled - Returns FALSE.


  • ObjectContext.IsCallerInRole - returns TRUE (same as normal when IsSecurityEnabled is FALSE).



REFERENCES

For more information on debugging compiled Visual Basic components using the Microsoft Developer Studio environment, please see the following article in the Microsoft Knowledge Base:

Q166275 HOWTO: Debug a Native Code Visual Basic Component in VC++
Microsoft Transaction Server 2.0 Help; search on: "Debugging Visual Basic MTS Components"

Additional query words: kbdse kbMTS100 kbMTS200 kbVBp500 kbVBp600 kbRegistry

Keywords : kbMTS kbVBp500 kbVBp600 kbGrpCom kbDSupport
Version : WINDOWS:5.0,6.0; winnt:1.0,2.0
Platform : WINDOWS winnt
Issue type : kbhowto


Last Reviewed: October 21, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.