Visual Basic Q&A

As a software engineer, I focus on .NET, especially asp.net, C#, WCF and so on, and I am also very interested in Search Engine Optimization.

Entries for February, 2010

INFO: Troubleshooting Error 429 When Automating Office Applications

Symptoms
When you use the New operator or CreateObject function in Microsoft Visual Basic to create an instance of a Microsoft Office application, you may get the following error message:

Run-time error ‘429′: ActiveX component can’t create objectThis error occurs when the requested Automation object could not be created by COM, and is therefore unavailable to Visual Basic. The error is typically seen on certain computers but not others.
This article provides some troubleshooting tips to help you diagnose and resolve common problems that are known to cause this error.
Resolution
Unlike some errors in Visual Basic, there is no one cause to an error 429. The problem happens because of an error in the application or system configuration, or a missing or damaged component. Finding the exact cause is a matter of eliminating possibilities. If you encounter this error on a client computer, there are a number of things you will need to check to isolate and resolve the error.
The items later give you some practical suggestions for troubleshooting this error when you work with Office Applications. Some of this information may also apply to non-Office COM servers as well, but this article assumes you are trying to automate Microsoft Office.
Checking the CodeThe first place to begin looking for the problem is in the code. Before you can troubleshoot the error, you need to know where the error occurs. Try to narrow it down to a single line of code.
When you find the code that is failing, try to do the following:
Make sure the code uses explicit object creation. Any problem is easier to spot and identify if the problem is narrowed to a single action. For example, do not do the following:

Application.Documents.Add ‘DON’T USE THIS!!
or:

Dim oWordApp As New Word.Application ‘DON’T USE THIS!!’… some other codeoWordApp.Documents.Add Both of these methods use implicit object creation. Microsoft Word is not started until the variable is called at least once. Since the variable could be called in different parts of the program, this could make the problem hard to localize. Also, it is not clear whether the problem is with creating the Application object or the Document object.
Instead, make explicit calls to create each object separately:

Dim oWordApp As Word.ApplicationDim oDoc As Word.DocumentSet oWordApp = CreateObject(“Word.Application”)’… some other codeSet oDoc = oWordApp.Documents.Add This makes the problem easier to isolate and makes the code more readable.When creating an instance of an Microsoft Office application, use CreateObject instead of New. CreateObject more closely maps to the creation process used by most Visual C++ clients, and allows for possible changes in the server’s CLSID between versions. CreateObject can be used with both early-bound and late-bound objects.Verify that the ProgID string passed to CreateObject is correct and that it is version independent (that is, use “Excel.Application” rather than “Excel.Application.8″). It could be that the system that is failing has an older or newer version of Microsoft Office than the version you specified in the ProgID.To aid in debugging applications that cannot be run in the IDE, use the Erl command to report the line number of the line that fails. For example, the following code will tell you which Automation object cannot be created (Word or Excel):

Dim oWord As Word.ApplicationDim oExcel As Excel.ApplicationOn Error Goto err_handler1: Set oWord = CreateObject(“Word.Application”)2: Set oExcel = CreateObject(“Excel.Application”)’ … some other codeerr_handler:MsgBox “The code failed at line ” & Erl, vbCritical Use a combination of message boxes and line numbers to track down the error.Try using late binding (that is, Dim oWordApp As Object). Early bound objects require their custom interfaces to be marshaled across process boundaries. If there is a problem marshaling a custom interface during CreateObject or New, you will get an error 429. A late bound object uses a system-defined interface (IDispatch) that does not require a custom proxy in order to be marshaled. Try using a late bound object to see if this makes a difference.
If the problem occurs only when the object is early-bound, the problem is with the server application, and can typically be corrected by reinstalling the application (see later).If you are automating from ASP or an MTS component, use CreateObject instead of Server.CreateObject(). Using Server.CreateObject will instantiate the Office application under the identity of an MTS package which is known to cause problems with Microsoft Office.
Checking the Automation ServerThe most common reasons for an error with CreateObject or New are problems with the server application itself. Typically, these problems are with the configuration or setup of the application. Here are some items to check:
Verify the Microsoft Office application you want to Automate is installed on the local computer, and make sure that you can start the application from the Start and then Run dialog box. If the program cannot be started manually, it will not work through automation.Re-register the application by typing the path to the server in the Start and then Run dialog box, and then append /RegServer to the end of the line. Press OK. This should silently run the application and re-register it as a COM server. If the problem is with a missing registry key, this will typically correct it.Check the LocalServer32 key under the CLSID for the application you want to Automate. Make sure it points to the correct location for the application, and make sure the path name is in a short path (DOS 8.3) format. While it is not a requirement that a server be registered using a short path name, long path names that include embedded spaces have been known to cause problems on some systems (see later).
To check the path key stored for the server, start the Windows Registry Editor by typing regedit in the Start and then Run dialog box. Navigate to the HKEY_CLASSES_ROOT\Clsid key. Under this key you will find the CLSIDs for the registered automation servers on the system. Using the values later, find the key that represents the Office application you want to Automate and check its LocalServer32 key for the path.

+========================+=========================================+| Office Server| CLSID Key|+========================+=========================================+| Access.Application| {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}|+————————+—————————————–+| Excel.Application| {00024500-0000-0000-C000-000000000046}|+————————+—————————————–+| FrontPage.Application| {04DF1015-7007-11D1-83BC-006097ABE675}|+————————+—————————————–+| Outlook.Application| {0006F03A-0000-0000-C000-000000000046}|+————————+—————————————–+| PowerPoint.Application | {91493441-5A91-11CF-8700-00AA0060263B}|+————————+—————————————–+| Word.Application| {000209FF-0000-0000-C000-000000000046}|+————————+—————————————–+ Does the path match the actual location of the file? Be aware that short path names can give you the impression that a path is correct when it may not be. For example, both Microsoft Office and Microsoft Internet Explorer (if installed in their default locations) will have a short path similar to “C:\PROGRA~1\MICROS~X\” where X is some number. It is not immediately obvious that you are looking at from a short path name.
You can test that the path is indeed correct by copying the value from the registry and pasting it into the Start and then Run dialog box (remove the /Automation switch before running the application). Does the application start when you select OK? If yes, then the server is registered correctly. If not, you should replace the value of the LocalServer32 key with the correct path (use a short path name if possible).Problems have been known to occur when automating Word or Excel if either the Normal.dot template (Word) or the Excel.xlb resource file (Excel) has become corrupt. To test if a corruption has occurred, search the local hard drives to find all instances of Normal.dot or *.xlb. (Please note that if you are running Windows 2000, Windows NT, or Windows 95/98 with profiles enabled, you may find multiple copies of these files, one for each user profile on the system.) Temporarily rename the Normal.dot file(s) or the *.xlb file(s), and re-run your Automation test (Word and Excel will create these files if they cannot find them). Does the code now work? If yes, then the files you renamed should be deleted since they are corrupt. If not, you should rename them back to their original names so any custom settings saved in these files won’t be lost.If you are on a Windows NT, Windows 2000, Windows XP, or Windows Server 2003 system, run the application under the Administrator account. Office servers require read/write access to the registry and disk drive, and may not properly load if your current security settings deny this privilege.
Checking the SystemSystem configuration can also cause problems with the creation of out-of-process COM servers. The following are some things to check on systems where the error occurs: Does the problem happen with any out-of-process server? If you have an application that just uses a particular COM server (for example, Word), you’ll want to test a different out-of-process server to make sure the problem is not with COM layer itself. If no out-of-process COM server can be created on that system, then a reinstallation of the OLE system files (see below) or a reinstallation of the operating system will be required to resolve the issue.Check the version numbers for the OLE system files that manage Automation. These files are typically installed as a set, and should match build numbers. An improperly configured setup utility can mistakenly install the files separately, causing them to become mismatched. To avoid problems with Automation, you should check the files to make sure the files match builds.
You will find the Automation files in the Windows\System or Winnt\System32 directory. The following is the list of files to check:

+—————+————-+—————-+| File Name|Version| Date Modified|+—————+————-+—————-+| Asycfilt.dll|2.40.4275| March 08, 1999 || Oleaut32.dll|2.40.4275| March 08, 1999 || Olepro32.dll|5.0.4275| March 08, 1999 || Stdole2.tlb|2.40.4275| March 08, 1999 |+—————+————-+—————-+ Check the file version by right-clicking on the file in Explorer and selecting Properties from the popup menu. The values most important are the last four digits of the file version (the build number) and the date last modified. You want to make sure these values are the same for all the Automation files.
Please note that the version numbers and dates given above are for example purposes only. Your values may differ. The important thing is that these values match each other, rather than this table.
If the files don’t match build numbers or modified dates, you can download a self-extracting utility that will update your Automation files. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:
290887?(http://support.microsoft.com/kb/290887/) VBRun60sp6.exe installs Visual Basic 6.0 SP6 run-time filesWindows NT 4.0 has a known problem with starting Automation servers that live in a folder that contains an embedded space in the name, and/or resembles another folder whose first 8 characters are identical. For example, a server living in C:\Program Files\SomeFolder may fail to start during a call to CreateObject if there is another folder on the system called C:\Program Stuff\SomeFolder. For more information, see the following Knowledge Base article:For additional information about this problem and steps to workaround it, click the article number below to view the article in the Microsoft Knowledge Base:
185126?(http://support.microsoft.com/kb/185126/EN-US/) BUG: COM/OLE Server Fails to Start on Windows NT 4.0
Reinstalling Microsoft OfficeIf none of the preceding steps helps to resolve the problem, consider uninstalling and reinstalling Microsoft Office. Microsoft recommends that you uninstall the existing version first, and then reinstall from the original installation disks.
For a complete list of the items to be removed, please see the following Knowledge Base articles:
219423?(http://support.microsoft.com/kb/219423/EN-US/) OFF2000: How to Completely Remove Microsoft Office 2000
158658?(http://support.microsoft.com/kb/158658/EN-US/) OFF97: How to Completely Remove Microsoft Office 97

INFO: Translating Automation Errors for VB/VBA (Long)

Symptoms
This article describes several methods you can use to obtain the messagetext for an error code. This article also contains a list of error codesand descriptions as found in Winerror.h.
NOTE: When errors are raised when working with the Automation in VisualBasic or with VBA (Visual Basic for Applications), the error does notalways include the message text for the error.
Resolution
Refer to Winerror.hWhen automating another application with Visual Basic or VBA, you mayreceive an error similar to the following:

Run-time error ‘-2147418094 (80010012)’:
Automation Error.The value -2147418094 corresponds to the decimal representation of theerror code; 80010012 corresponds to the hexadecimal representation of thesame code. This code is documented in the Microsoft Visual C++ header fileWinerror.h. To locate the error code, search for the hexadecimalrepresentation of the error code (that is, 80010012). The following is anexcerpt from Winerror.h, which describes this error:

//// MessageId: RPC_E_SERVER_DIED_DNE//// MessageText:////The callee (server [not server application]) is not available//and disappeared; all connections are invalid.The call did not//execute.//#define RPC_E_SERVER_DIED_DNE_HRESULT_TYPEDEF_(0×80010012L) Winerror.h is included with Microsoft Visual C++ and is also provided withthe Microsoft Developer Network (MSDN) Library.
NOTE: Automation errors that are specific to a server application are notlisted in Winerror.h. If you do not find the error code in Winerror.h,check the documentation for the server application. Usually, withapplication-specific errors, the last 4 digits of the hexadecimalrepresentation of the error code refer to the application specific error.
Use FormatMessageYou can use the FormatMessage API function to determine the message textassociated with an automation error code. The sample function belowillustrates how you can use FormatMessage to obtain the message text:

Option ExplicitConst FORMAT_MESSAGE_FROM_SYSTEM = &H1000Private Declare Function FormatMessage Lib “kernel32″ Alias _”FormatMessageA” ( ByVal dwFlags As Long, lpSource As Long, _ByVal dwMessageId As Long, ByVal dwLanguageId As Long, _ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Any) _As LongPrivate Function MessageText(lCode As Long) As StringDim sRtrnCode As StringDim lRet As LongsRtrnCode = Space$(256)lRet = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0&, lCode, 0&, _sRtrnCode, 256&, 0&)If lRet >0 ThenMessageText = Left(sRtrnCode, lRet)ElseMessageText = “Error not found.”End IfEnd Function The next example illustrates how you can use this function with yourautomation code. In this example, Microsoft Excel is the serverapplication. Referencing a workbook object once it is destroyed (or closed)generates the error. To illustrate how to use the MessageText function,this example purposely generates an automation error by referencing aworkbook object after the workbook has been closed:

Dim xl As ObjectDim book As ObjectDim sMsg As StringSet xl = CreateObject(“excel.application”)Set book = xl.workbooks.Addbook.Close FalseOn Error Resume NextDebug.Print book.Name’<-Generates an automation error because the’workbook referenced by the book object has’been closed.If Err.Number <>0 ThensMsg = MessageText(Err.Number)MsgBox “Automation Error ” & vbCr & Err.Number & _” (” & Hex(Err.Number) & “)” & vbCr & sMsgEnd IfOn Error GoTo 0Set xl = Nothing Referencing the book object after the workbook is destroyed generates therun-time error -2147418094 (80010012). This is the message text returned byFormatMessage for this particular error:

The callee (server [not server application]) is not available anddisappeared; all connections are invalid. The call did not execute.NOTE: The FormatMessage function does not return errors that are specificto an application.
Use “Error Lookup”Microsoft Visual C++ version 5.0 includes a utility called “Error Lookup”that provides the message text for error codes.
To use this utility, start Microsoft Visual C++ and click Error Lookup onthe Tools menu. Type the error code and click Lookup. As an example, if youhad received the previously described error, -2147418094 (80010012), youwould type the following text in “Error Lookup” and then click Lookup:
0×80010012
Error List from WINERROR.HThe following table describes the error codes contained in Winerror.hincluded with Microsoft Visual C++ version 5.0:

AutomationAutomationErrorErrorin Decimalin HexError Description-2147418113 (8000FFFF)Catastrophic failure.-2147942413 (8007000D)The Data is invalid.-2147467263 (80004001)Not implemented.-2147024882 (8007000E)Ran out of memory.-2147024809 (80070057)One or more arguments are invalid.-2147467262 (80004002)No such interface supported.-2147467261 (80004003)Invalid pointer.-2147024890 (80070006)Invalid handle.-2147467260 (80004004)Operation aborted.-2147467259 (80004005)Unspecified error.-2147024891 (80070005)General access denied error.-2147483647 (80000001)Not implemented.-2147483646 (80000002)Ran out of memory.-2147483645 (80000003)One or more arguments are invalid.-2147483644 (80000004)No such interface supported.-2147483643 (80000005)Invalid pointer.-2147483642 (80000006)Invalid handle.-2147483641 (80000007)Operation aborted.-2147483640 (80000008)Unspecified error.-2147483639 (80000009)General access denied error.-2147483638 (8000000A)The data necessary to complete this operationnot yet available.-2147467258 (80004006)Thread local storage failure.-2147467257 (80004007)Get shared memory allocator failure.-2147467256 (80004008)Get memory allocator failure.-2147467255 (84009)Unable to initialize class cache.-2147467254 (8400A)Unable to initialize RPC services.-2147467253 (8000400B)Cannot set thread local storage channel control.-2147467252 (8000400C)Could not allocate thread local storage channelcontrol.-2147467251 (8000400D)The user supplied memory allocator isunacceptable.-2147467250 (8000400E)The OLE service mutex already exists.-2147467249 (8000400F)The OLE service file mapping already exists.-2147467248 (80004010)Unable to map view of file for OLE service.-2147467247 (80004011)Failure attempting to launch OLE service.-2147467246 (80004012)There was an attempt to call CoInitialize asecond time while single threaded.-2147467245 (80004013)A Remote activation was necessary but was notallowed.-2147467244 (80004014)A Remote activation was necessary but the servername provided was invalid.-2147467243 (80004015)The class is configured to run as a security iddifferent from the caller.-2147467242 (80004016)Use of Ole1 services requiring DDE windows isdisabled.-2147467241 (80004017)A RunAs specification must be A RunAsspecification must be<domain name>\<user name> or simply<user name>.-2147467240 (80004018)The server process could not be started. Thepathname may be incorrect.-2147467239 (80004019)The server process could not be started as theconfigured identity. The pathname may beincorrect or unavailable.-2147467238 (8000401A)The server process could not be started becausethe configured identity is incorrect. Check theusername and password. -2147467237 (8000401B)The client is not allowed to launch this server. -2147467236 (8000401C)The service providing this server could not bestarted. -2147467235 (8000401D)This computer was unable to communicate with thecomputer providing the server. -2147467234 (8000401E)The server did not respond after being launched. -2147467233 (8000401F)The registration information for this server isinconsistent or incomplete. -2147467232 (80004020)The registration information for this interfaceis inconsistent or incomplete. -2147467231 (80004021)The operation attempted is not supported. -2147221504 (80040000)Invalid OLEVERB structure.-2147221503 (80040001)Invalid advise flags.-2147221502 (80040002)Can’t enumerate any more, because the associateddata is missing.-2147221501 (80040003)This implementation doesn’t take advises.-2147221500 (80040004)There is no connection for this connection ID.-2147221499 (80040005)Need to run the object to perform this operation.-2147221498 (80040006)There is no cache to operate on.-2147221497 (80040007)Uninitialized object.-2147221496 (80040008)Linked object’s source class has changed.-2147221495 (80040009)Not able to get the moniker of the object.-2147221494 (8004000A)Not able to bind to the source.-2147221493 (8004000B)Object is static; operation not allowed.-2147221492 (8004000C)User cancelled out of save dialog.-2147221491 (8004000D)Invalid rectangle.-2147221490 (8004000E)compobj.dll is too old for the ole2.dllinitialized.-2147221489 (8004000F)Invalid window handle.-2147221488 (80040010)Object is not in any of the inplace active states.-2147221487 (80040011)Not able to convert object.-2147221486 (80040012)Not able to perform the operation because objectis not given storage yet.-2147221404 (80040064)Invalid FORMATETC structure.-2147221403 (80040065)Invalid DVTARGETDEVICE structure.-2147221402 (80040066)Invalid STDGMEDIUM structure.-2147221401 (80040067)Invalid STATDATA structure.-2147221400 (80040068)Invalid lindex.-2147221399 (80040069)Invalid tymed.-2147221398 (8004006A)Invalid clipboard format.-2147221397 (8004006B)Invalid aspect(s).-2147221396 (8004006C)tdSize parameter of the DVTARGETDEVICE structureis invalid.-2147221395 (8004006D)Object doesn’t support IViewObject interface.-2147221248 (80040100)Trying to revoke a drop target that has not beenregistered.-2147221247 (80040101)This window has already been registered as a droptarget.-2147221246 (80040102)Invalid window handle.-2147221232 (80040110)Class does not support aggregation (or classobject is remote).-2147221231 (80040111)ClassFactory cannot supply requested class.-2147221184 (80040140)Error drawing view.-2147221168 (80040150)Could not read key from registry.-2147221167 (80040151)Could not write key to registry.-2147221166 (80040152)Could not find the key in the registry.-2147221165 (80040153)Invalid value for registry.-2147221164 (80040154)Class not registered.-2147221163 (80040155)Interface not registered.-2147221136 (80040170)Cache not updated.-2147221120 (80040180)No verbs for OLE object.-2147221119 (80040181)Invalid verb for OLE object.-2147221088 (800401A0)Undo is not available.-2147221087 (800401A1)Space for tools is not available.-2147221056 (800401C0)OLESTREAM Get method failed.-2147221055 (800401C1)OLESTREAM Put method failed.-2147221054 (800401C2)Contents of the OLESTREAM not in correct format.-2147221053 (800401C3)There was an error in a Windows GDI call whileconverting the bitmap to a DIB.-2147221052 (800401C4)Contents of the IStorage not in correct format.-2147221051 (800401C5)Contents of IStorage is missing one of thestandard streams.-2147221050 (800401C6)There was an error in a Windows GDI call whileconverting the DIB to a bitmap. -2147221040 (800401D0)OpenClipboard Failed.-2147221039 (800401D1)EmptyClipboard Failed.-2147221038 (800401D2)SetClipboard Failed.-2147221037 (800401D3)Data on clipboard is invalid.-2147221036 (800401D4)CloseClipboard Failed.-2147221024 (800401E0)Moniker needs to be connected manually.-2147221023 (800401E1)Operation exceeded deadline.-2147221022 (800401E2)Moniker needs to be generic.-2147221021 (800401E3)Operation unavailable.-2147221020 (800401E4)Invalid syntax.-2147221019 (800401E5)No object for moniker.-2147221018 (800401E6)Bad extension for file.-2147221017 (800401E7)Intermediate operation failed.-2147221016 (800401E8)Moniker is not bindable.-2147221015 (800401E9)Moniker is not bound.-2147221014 (800401EA)Moniker cannot open file.-2147221013 (800401EB)User input required for operation to succeed.-2147221012 (800401EC)Moniker class has no inverse.-2147221011 (800401ED)Moniker does not refer to storage.-2147221010 (800401EE)No common prefix.-2147221009 (800401EF)Moniker could not be enumerated.-2147221008 (800401F0)CoInitialize has not been called. -2147221007 (800401F1)CoInitialize has already been called. -2147221006 (800401F2)Class of object cannot be determined.-2147221005 (800401F3)Invalid class string.-2147221004 (800401F4)Invalid interface string.-2147221003 (800401F5)Application not found.-2147221002 (800401F6)Application cannot be run more than once.-2147221001 (800401F7)Some error in application program.-2147221000 (800401F8)DLL for class not found.-2147220999 (800401F9)Error in the DLL.-2147220998 (800401FA)Wrong OS or OS version for application.-2147220997 (800401FB)Object is not registered.-2147220996 (800401FC)Object is already registered.-2147220995 (800401FD)Object is not connected to server.-2147220994 (800401FE)Application was launched but it didn’t register aclass factory.-2147220993 (800401FF)Object has been released.-2146959359 (80080001)Attempt to create a class object failed.-2146959358 (80080002)OLE service could not bind object.-2146959357 (80080003)RPC communication failed with OLE service.-2146959356 (80080004)Bad path to object.-2146959355 (80080005)Server execution failed.-2146959354 (80080006)OLE service could not communicate with the objectserver.-2146959353 (80080007)Moniker path could not be normalized.-2146959352 (80080008)Object server is stopping when OLE servicecontacts it.-2146959351 (80080009)An invalid root block pointer was specified.-2146959344 (80080010)An allocation chain contained an invalid linkpointer.-2146959343 (80080011)The requested allocation size was too large.-2147352575 (80020001)Unknown interface. -2147352573 (80020003)Member not found. -2147352572 (80020004)Parameter not found. -2147352571 (80020005)Type mismatch. -2147352570 (80020006)Unknown name.-2147352569 (80020007)No named arguments. -2147352568 (80020008)Bad variable type. -2147352567 (80020009)Exception occurred. -2147352566 (8002000A)Out of present range. -2147352565 (8002000B)Invalid index. -2147352564 (8002000C)Unknown language. -2147352563 (8002000D)Memory is locked. -2147352562 (8002000E)Invalid number of parameters. -2147352561 (8002000F)Parameter not optional. -2147352560 (80020010)Invalid callee. -2147352559 (80020011)Does not support a collection. -2147319786 (80028016)Buffer too small. -2147319784 (80028018)Old format or invalid type library. -2147319783 (80028019)Old format or invalid type library. -2147319780 (8002801C)Error accessing the OLE registry. -2147319779 (8002801D)Library not registered. -2147319769 (80028027)Bound to unknown type. -2147319768 (80028028)Qualified name disallowed. -2147319767 (80028029)Invalid forward reference, or reference touncompiled type. -2147319766 (8002802A)Type mismatch. -2147319765 (8002802B)Element not found. -2147319764 (8002802C)Ambiguous name. -2147319763 (8002802D)Name already exists in the library. -2147319762 (8002802E)Unknown LCID. -2147319761 (8002802F)Function not defined in specified DLL. -2147317571 (800288BD)Wrong module kind for the operation. -2147317563 (800288C5)Size may not exceed 64K. -2147317562 (800288C6)Duplicate ID in inheritance hierarchy. -2147317553 (800288CF)Incorrect inheritance depth in standard OLEhmember. -2147316576 (80028CA0)Type mismatch. -2147316575 (80028CA1)Invalid number of arguments. -2147316574 (80028CA2)I/O Error. -2147316573 (80028CA3)Error creating unique tmp file. -2147312566 (80029C4A)Error loading type library/DLL. -2147312509 (80029C83)Inconsistent property functions. -2147312508 (80029C84)Circular dependency between types/modules. -2147287039 (80030001)Unable to perform requested operation. -2147287038 (80030002)%1 could not be found. -2147287037 (80030003)The path %1 could not be found. -2147287036 (80030004)There are insufficient resources to open anotherfile. -2147287035 (80030005)Access Denied. -2147287034 (80030006)Attempted an operation on an invalid object. -2147287032 (80030008)There is insufficient memory available tocomplete operation. -2147287031 (80030009)Invalid pointer error. -2147287022 (80030012)There are no more entries to return. -2147287021 (80030013)Disk is write-protected. -2147287015 (80030019)An error occurred during a seek operation. -2147287011 (8003001D)A disk error occurred during a write operation. -2147287010 (8003001E)A disk error occurred during a read operation. -2147287008 (80030020)A share violation has occurred. -2147287007 (80030021)A lock violation has occurred. -2147286960 (80030050)%1 already exists. -2147286953 (80030057)Invalid parameter error. -2147286928 (80030070)There is insufficient disk space to completeoperation. -2147286800 (800300F0)Illegal write of non-simple property to simpleproperty set. -2147286790 (800300FA)An API call exited abnormally. -2147286789 (800300FB)The file %1 is not a valid compound file. -2147286788 (800300FC)The name %1 is not valid. -2147286787 (800300FD)An unexpected error occurred. -2147286786 (800300FE)That function is not implemented. -2147286785 (800300FF)Invalid flag error. -2147286784 (80030100)Attempted to use an object that is busy. -2147286783 (80030101)The storage has been changed since the lastcommit. -2147286782 (80030102)Attempted to use an object that has ceased toexist. -2147286781 (80030103)Can’t save. -2147286780 (80030104)The compound file %1 was produced with anincompatible version of storage. -2147286779 (80030105)The compound file %1 was produced with a newerversion of storage. -2147286778 (80030106)Share.exe or equivalent is required foroperation. -2147286777 (80030107)Illegal operation called on non-file basedstorage. -2147286776 (80030108)Illegal operation called on object with extantmarshallings. -2147286775 (80030109)The docfile has been corrupted. -2147286768 (80030110)OLE32.DLL has been loaded at the wrong address. -2147286527 (80030201)The file download was aborted abnormally. Thefile is incomplete. -2147286526 (80030202)The file download has been terminated. -2147418111 (80010001)Call was rejected by callee. -2147418110 (80010002)Call was canceled by the message filter. -2147418109 (80010003)The caller is dispatching an intertaskSendMessage call and cannot call out viaPostMessage. -2147418108 (80010004)The caller is dispatching an asynchronous calland cannot make an outgoing call on behalf ofthis call. -2147418107 (80010005)It is illegal to call out while inside messagefilter. -2147418106 (80010006)The connection terminated or is in a bogus stateand cannot be used any more. Other connectionsare still valid. -2147418105 (80010007)The callee (server [not server application]) isnot available and disappeared; all connectionsare invalid. The call may have executed. -2147418104 (80010008)The caller (client) disappeared while the callee(server) was processing a call. -2147418103 (80010009)The data packet with the marshalled parameterdata is incorrect. -2147418102 (8001000A)The call was not transmitted properly; themessage queue was full and was not emptied afteryielding. -2147418101 (8001000B)The client (caller) cannot marshal the parameterdata – low memory, etc. -2147418100 (8001000C)The client (caller) cannot unmarshal the returndata – low memory, etc. -2147418099 (8001000D)The server (callee) cannot marshal the returndata – low memory, etc. -2147418098 (8001000E)The server (callee) cannot unmarshal theparameter data – low memory, etc. -2147418097 (8001000F)Received data is invalid; could be server orclient data. -2147418096 (80010010)A particular parameter is invalid and cannot be(un)marshalled. -2147418095 (80010011)There is no second outgoing call on same channelin DDE conversation. -2147418094 (80010012)The callee (server [not server application]) isnot available and disappeared; all connectionsare invalid. The call did not execute. -2147417856 (80010100)System call failed. -2147417855 (80010101)Could not allocate some required resource(memory, events, …) -2147417854 (80010102)Attempted to make calls on more than one threadin single threaded mode. -2147417853 (80010103)The requested interface is not registered on theserver object. -2147417852 (80010104)RPC could not call the server or could not returnthe results of calling the server. -2147417851 (80010105)The server threw an exception. -2147417850 (80010106)Cannot change thread mode after it is set. -2147417849 (80010107)The method called does not exist on the server. -2147417848 (80010108)The object invoked has disconnected from itsclients. -2147417847 (80010109)The object invoked chose not to process the callnow. Try again later. -2147417846 (8001010A)The message filter indicated that the applicationis busy. -2147417845 (8001010B)The message filter rejected the call. -2147417844 (8001010C)A call control interfaces was called with invaliddata. -2147417843 (8001010D)An outgoing call cannot be made since theapplication is dispatching an input-synchronouscall. -2147417842 (8001010E)The application called an interface that wasmarshalled for a different thread. -2147417841 (8001010F)CoInitialize has not been called on the currentthread. -2147417840 (80010110)The version of OLE on the client and servermachines does not match. -2147417839 (80010111)OLE received a packet with an invalid header. -2147417838 (80010112)OLE received a packet with an invalid extension. -2147417837 (80010113)The requested object or interface does not exist. -2147417836 (80010114)The requested object does not exist. -2147417835 (80010115)OLE has sent a request and is waiting for areply. -2147417834 (80010116)OLE is waiting before retrying a request. -2147417833 (80010117)Call context cannot be accessed after callcompleted. -2147417832 (80010118)Impersonate on unsecured calls is not supported. -2147417831 (80010119)Security must be initialized before anyinterfaces are marshalled or unmarshalled. Itcannot be changed once initialized. -2147417830 (8001011A)No security packages are installed on thismachine or the user is not logged on or there areno compatible security packages between theclient and server. -2147417829 (8001011B)Access is denied. -2147417828 (8001011C)Remote calls are not allowed for this process. -2147417827 (8001011D)The marshalled interface data packet (OBJREF) hasan invalid or unknown format. -2147352577 (8001FFFF)An internal error occurred. -2146893823 (80090001)Bad UID. -2146893822 (80090002)Bad Hash. -2146893821 (80090003)Bad Key. -2146893820 (80090004)Bad Length. -2146893819 (80090005)Bad Data. -2146893818 (80090006)Invalid Signature. -2146893817 (80090007)Bad Version of provider. -2146893816 (80090008)Invalid algorithm specified. -2146893815 (80090009)Invalid flags specified. -2146893814 (8009000A)Invalid type specified. -2146893813 (8009000B)Key not valid for use in specified state. -2146893812 (8009000C)Hash not valid for use in specified state. -2146893811 (8009000D)Key does not exist.-2146893810 (8009000E)Insufficient memory available for the operation. -2146893809 (8009000F)Object already exists. -2146893808 (80090010)Access denied. -2146893807 (80090011)Object was not found. -2146893806 (80090012)Data already encrypted. -2146893805 (80090013)Invalid provider specified. -2146893804 (80090014)Invalid provider type specified. -2146893803 (80090015)Provider’s public key is invalid. -2146893802 (80090016)Keyset does not exist. -2146893801 (80090017)Provider type not defined. -2146893800 (80090018)Provider type as registered is invalid. -2146893799 (80090019)The keyset is not defined. -2146893798 (8009001A)Keyset as registered is invalid. -2146893797 (8009001B)Provider type does not match registered value. -2146893796 (8009001C)The digital signature file is corrupt. -2146893795 (8009001D)Provider DLL failed to initialize correctly. -2146893794 (8009001E)Provider DLL could not be found. -2146893793 (8009001F)The Keyset parameter is invalid. -2146893792 (80090020)An internal error occurred. -2146893791 (80090021)A base error occurred. -2146762751 (800B0001)The specified trust provider is not known on thissystem. -2146762750 (800B0002)The trust verification action specified is notsupported by the specified trust provider. -2146762749 (800B0003)The form specified for the subject is not onesupported or known by the specified trustprovider. -2146762748 (800B0004)The subject is not trusted for the specifiedaction. -2146762747 (800B0005)Error due to problem in ASN.1 encoding process. -2146762746 (800B0006)Error due to problem in ASN.1 decoding process. -2146762745 (800B0007)Reading / writing Extensions where Attributes areappropriate, and visa versa. -2146762744 (800B0008)Unspecified cryptographic failure. -2146762743 (800B0009)The size of the data could not be determined. -2146762742 (800B000A)The size of the indefinite-sized data could notbe determined. -2146762741 (800B000B)This object does not read and write self-sizingdata.-2146762496 (800B0100)No signature was present in the subject. -2146762495 (800B0101)A required certificate is not within its validityperiod. -2146762494 (800B0102)The validity periods of the certification chaindo not nest correctly.-2146762493 (800B0103)A certificate that can only be used as anend-entity is being used as a CA or visa versa.-2146762492 (800B0104)A path length constraint in the certificationchain has been violated.-2146762491 (800B0105)An extension of unknown type that is labeled’critical’ is present in a certificate.-2146762490 (800B0106)A certificate is being used for a purpose otherthan that for which it is permitted.-2146762489 (800B0107)A parent of a given certificate in fact did notissue that child certificate.-2146762488 (800B0108)A certificate is missing or has an empty valuefor an important field, such as a subject orissuer name.-2146762487 (800B0109)A certification chain processed correctly, butterminated in a root certificate which isn’ttrusted by the trust provider.-2146762486 (800B010A)A chain of certs didn’t chain as they should in acertain application of chaining.

INFO: Subclassing Support in Visual Basic

Symptoms
Subclassing intercepts messages that the operating system sends to specific windows. Subclassing allows you to process messages that are not handled natively by a control or form.
Subclassing requires that you use the AddressOf operator, which provides callback functionality. For more information about how to use this operator, visit the following MSDN Web site:
AddressOf Operator
http://msdn.microsoft.com/en-us/library/aa242738.aspx(http://msdn.microsoft.com/en-us/library/aa242738.aspx)NOTE: The AddressOf operator provides callback functionality when it calls Windows APIs that require this feature. This functionality is also known as a function pointer. The AddressOf operator was not designed or tested for subclassing purposes. Subclassing can have disastrous results if you use it incorrectly.
Microsoft supports the demonstration of subclassing in Visual Basic. Some controls may experience problems if they are made into a subclass, because their intended behavior is modified beyond the original design. Therefore, subclassing in Visual Basic does not always work. Microsoft does not guarantee that subclassing in Visual Basic will produce the results that you want.
Resolution
The limitations and risks of function pointers in Visual Basic include the following:
Debugging: If your application fires a callback function while it is in break mode, the code is executed, but any breaks or steps are ignored. If the callback function generates an exception, you can catch it, and then return the current value. Resets are prohibited in break mode when a callback function is on the stack.
Thunks: Windows enables relocatable code by using thunking. If you delete a callback function in break mode, the thunk is modified to return a zero value. This value is typically correct, but not always. If you delete a callback function in break mode, and then you type the callback function again, it is possible that some call recipients will not know about the new address.
Thunks are not used in the compiled executable. The pointer is passed directly to the entry point.
Passing a function with the wrong signature: If you pass a callback function that takes a different number of arguments than the caller expects, or if you pass a callback function that mistakenly calls an argument by using ByRef or ByVal, your application may fail. You must pass a function with the correct signature.
Passing a function to a Windows procedure that no longer exists: When you make a window into a subclass, you pass a function pointer to Windows as the Windows procedure (WindowProc). However, when you run your application in the IDE, the WindowProc function may be called after the underlying function is destroyed. This may cause a general protection fault, and may cause the Visual Basic development environment to fail.
Visual Basic to Visual Basic function pointers are not supported: Pointers to Visual Basic functions cannot be passed in Visual Basic. Only pointers from Visual Basic to a DLL function are supported.
Containing errors in a callback procedure: Any errors in a callback procedure must not be propagated back to the external procedure that initially called. Therefore, put the On Error Resume Next statement at the beginning of the callback procedure.

INFO: Programmer’s Guide to Using ADO in Visual Basic

Symptoms
This article presents useful information for anyone wanting to takeadvantage of the ActiveX Data Objects (ADO) within Visual Basic versions5.0 and 6.0. Topics covered are:
How to find ADO Knowledge Base ArticlesADO Resources/Points of Information

Resolution
How to Find ADO Knowledge Base ArticlesADO is not a technology that ships with one particular product, and has been treated as a product in its own right.
For more information about this issue, please see the following article in the Microsoft Knowledge Base:
183606?(http://support.microsoft.com/kb/183606/EN-US/)ActiveX Data Objects (ADO) Frequently Asked Questionsand choose “ActiveX Data Objects” as the product and enter your specific search topic.
You can also pick “All Microsoft Products” or use the MSDN or other non-Web-based Knowledge Base search mechanisms, and search for the keyword “kbado,” which all ADO articles contain.
ADO Resources/Points of InformationADO originally shipped with the OLE-DB Software Development Kit (SDK), but now is part of Microsoft Data Access Components or MDAC. To learn more about it, please visit the Microsoft Universal Data Access Web site:
http://msdn.microsoft.com/en-us/data/aa937729.aspx(http://msdn.microsoft.com/en-us/data/aa937729.aspx)or the ADO-specific Web page at:
http://msdn.microsoft.com/en-us/library/ms811450.aspx(http://msdn.microsoft.com/en-us/library/ms811450.aspx)

INFO: Jet OLE DB Provider Version 4.0 Supports SELECT @@Identity

Symptoms
The Jet OLE DB version 4.0 provider supports the SELECT @@Identity query that allows you to retrieve the value of the auto-increment field generated on your connection. Auto-increment values used on other connections to your database do not affect the results of this specialized query. This feature works with Jet 4.0 databases but not with older formats.
Resolution
The following code demonstrates using the SELECT @@Identity to retrieve the value of the newly inserted auto-increment field. The code snippet also includes code to create the table for the query.

Dim cnDatabase As ADODB.ConnectionDim rsNewAutoIncrement As ADODB.RecordsetDim strConn As StringDim strSQL As StringDim strPathToMDB As StringstrPathToMDB = “C:\NewJet4.MDB”strConn = “Provider=Microsoft.Jet.OLEDB.4.0;” & _”Data Source=” & strPathToMDB & “;”Set cnDatabase = New ADODB.ConnectioncnDatabase.Open strConnstrSQL = “CREATE TABLE AutoIncrementTest ” & _”(ID int identity, Description varchar(40), ” & _”CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))”cnDatabase.Execute strSQL, , adCmdText + adExecuteNoRecordsstrSQL = “INSERT INTO AutoIncrementTest ” & _”(Description) VALUES (‘AutoIncrement Test’)”cnDatabase.Execute strSQL, , adCmdText + adExecuteNoRecordsstrSQL = “SELECT @@Identity”Set rsNewAutoIncrement = New ADODB.RecordsetrsNewAutoIncrement.Open strSQL, cnDatabase, adOpenForwardOnly, _adLockReadOnly, adCmdTextMsgBox “New Auto-increment value is: ” & rsNewAutoIncrement(0).ValuersNewAutoIncrement.CloseSet rsNewAutoIncrement = NothingstrSQL = “DROP TABLE AutoIncrementTest”cnDatabase.Execute strSQL, , adCmdText + adExecuteNoRecordscnDatabase.CloseSet cnDatabase = Nothing Thanks to this newly added functionality, you can see the newly added auto-increment values in your client-side ActiveX Data Objects (ADO) recordsets in ADO 2.1 and later. When you submit the new row to the Jet provider by calling Update or UpdateBatch (depending on your choice of LockType), the ADO cursor engine generates an INSERT INTO query to create the new row in the table. If the recordset contains an auto-increment field, ADO will also generate a SELECT @@Identity query to retrieve the value generated for that auto-increment field. The following code demonstrates this feature:

Dim cnDatabase As ADODB.ConnectionDim rsNewAutoIncrement As ADODB.RecordsetDim strConn As StringDim strSQL As StringDim strPathToMDB As StringstrPathToMDB = “C:\NewJet4.MDB”strConn = “Provider=Microsoft.Jet.OLEDB.4.0;” & _”Data Source=” & strPathToMDB & “;”Set cnDatabase = New ADODB.ConnectioncnDatabase.Open strConnstrSQL = “CREATE TABLE AutoIncrementTest ” & _”(ID int identity, Description varchar(40), ” & _”CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))”cnDatabase.Execute strSQL, , adCmdText + adExecuteNoRecordsstrSQL = “SELECT ID, Description FROM AutoIncrementTest”Set rsNewAutoIncrement = New ADODB.RecordsetrsNewAutoIncrement.CursorLocation = adUseClientrsNewAutoIncrement.Open strSQL, cnDatabase, adOpenStatic, _adLockOptimistic, adCmdTextrsNewAutoIncrement.AddNewrsNewAutoIncrement(“Description”).Value = “AutoIncrement Test”rsNewAutoIncrement.UpdateMsgBox “New Auto-increment value is: ” & rsNewAutoIncrement(0).ValuersNewAutoIncrement.CloseSet rsNewAutoIncrement = NothingstrSQL = “DROP TABLE AutoIncrementTest”cnDatabase.Execute strSQL, , adCmdText + adExecuteNoRecordscnDatabase.CloseSet cnDatabase = Nothing You can create a new Jet 4.0 database using Microsoft Access 2000 or using the ADOX library that is included with MDAC 2.1. To use this library in your Visual Basic project, create a reference to Microsoft ADO Ext. 2.1 for DDL and Security. You can then use code like the following to create a new Jet 4.0 database:

Dim strPathToMDB As StringDim catNewDatabase As ADOX.CatalogstrPathToMDB = “C:\NewJet4.MDB”If Dir(strPathToMDB) <> “” ThenKill strPathToMDBEnd IfstrConn = “Provider=Microsoft.Jet.OLEDB.4.0;” & _”Data Source=” & strPathToMDB & “;”Set catNewDatabase = New ADOX.CatalogcatNewDatabase.Create strConnSet catNewDatabase = Nothing To determine the format of your Microsoft Access database, check the dynamic “Jet OLEDB:Engine Type” property in the Connection object’s Properties collection. The property will return a value of 5 for Jet 4.x databases. The following code snippet demonstrates using the property:

Dim cnDatabase As ADODB.ConnectionDim strConn As StringDim strPathToMDB As StringstrPathToMDB = “C:\NewJet4.MDB”strConn = “Provider=Microsoft.Jet.OLEDB.4.0;” & _”Data Source=” & strPathToMDB & “;”Set cnDatabase = New ADODB.ConnectioncnDatabase.Open strConnIf cnDatabase.Properties(“Jet OLEDB:Engine Type”).Value = 5 ThenMsgBox “Jet 4.0 database”ElseMsgBox “Not a Jet 4.0 database”End IfcnDatabase.CloseSet cnDatabase = Nothing

INFO: New Tracing Feature in ASP.NET

Symptoms
This article provides information about the new tracing feature in ASP.NET. This article also describes how to configure this tracing feature.
Resolution
The tracing feature allows you to track the execution of an application and view the results. You can enable tracing at the page level or the application level. Enable Tracing at the Page Level When you enable tracing at the page level, the trace output is added to the bottom of the page. The following code sample demonstrates how to enable tracing at the page level:
Visual Basic .NET

<%@Page Language=”vb” Trace=”true”%><script runat=”server”>Public Function TracingTest(strNow as String) as StringTrace.Write(“Now() Value in the function”, now())return “The time is: ” & strNowend Function</script>TracingTest result: <%=TracingTest(Now())%> Visual C# .NET

<%@ Page Language=”c#” Trace=”true”%><script runat=”server”>public string TracingTest(string strNow){Trace.Write(“Now() Value in the function”,DateTime.Now.ToString());return “The Time is: ” + strNow;}</script>Tracing Test Results:<%=TracingTest(DateTime.Now.ToString())%> Visual J# .NET

<%@ Page Language=”VJ#” Trace=”true”%><%@ import namespace = “System.Diagnostics” %><%@ import namespace = “System” %><script runat=”server”>public System.String TracingTest(System.String strNow){Trace.Write(“Now() Value in the function”,DateTime.get_Now().ToString());return “The Time is: ” + strNow;}</script>Tracing Test Results:<%=TracingTest(DateTime.get_Now().ToString())%> When you run this page, both of the results from the function are written to the browser. You also see the information that tracing returns.
To remove the trace information, set the Trace attribute of the @ Page directive to false. You do not need to remove the Trace.Write statement. Notice that this is the TraceContext class, not the Trace class.
To enable tracing at the page level in Microsoft Visual Studio .NET, you can also set the trace property of the document to true in the Properties window. Enable Tracing at the Application Level To enable tracing at the application level, use the Web.config file. The following code sample demonstrates how to configure tracing at the application level in the Web.config file:

<configuration><system.web><trace enabled=”true” requestLimit=”10″ pageOutput=”true”traceMode=”SortByTime” localOnly=”true”/></system.web></configuration> When you enable tracing at the application level, you can use the pageOutput attribute to specify whether the trace output is displayed at the page level. If you set pageOutput to true, the output displays the same results as if you set the Trace attribute of the @ Page directive at the top of the page to true.
NOTE: The trace setting at the page level overrides the trace setting at the application level.