Microsoft KB Archive/198607

= PRB: Access Violation in VB Run-Time Using AddressOf =

Article ID: 198607

Article Last Modified on 3/18/2005

-

APPLIES TO


 * Microsoft Visual Basic 6.0 Learning Edition
 * Microsoft Visual Basic 6.0 Professional Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition

-



This article was previously published under Q198607



SYMPTOMS
When running your Visual Basic application, you may encounter an error similar to the following:

The instruction at 0x660bd3b1 referenced memory at 0x0000009c. The memory could not be written.

This error may occur immediately following a declared API function call within a Visual Basic callback function.



CAUSE
When the error occurs, the callback function is called by a thread that was not created by Visual Basic.

For instance, certain API calls such as CreateThread and RegisterServiceCtrlHandler create an additional thread before invoking the callback function that was previously setup by using the AddressOf operator. Although the same code may have worked in previous versions of Visual Basic, calling API's of this nature are currently unsupported in Visual Basic.



MORE INFORMATION
These API functions use a Free threading model, but Visual Basic only supports Apartment-model threading. Furthermore, additional care must be taken with regards to what code can be executed within the callback function. Any use of the following within the callback function may cause undesirable results:
 * File I/O.
 * Error handling.
 * Fixed size arrays.
 * Set statements.
 * COM method calls that return HRESULTs (such as any Visual Basic ActiveX object).
 * Declare calls.
 * Global objects such as the Application object.
 * Most of the Visual Basic run-time files.

