October 17, 2000
1) Samples\CreateWindow\LBoxEx\Compat.ocx was bogus. Updated file.
2) Code\SmartConcat.cls, line 179. Changed 'Debug.Assert m_SmallIndex' to 'If m_SmallIndex = 0 Then Exit Sub'.
3) (TLBEditor) Members with leading a _ character are not appearing in the tree (types are there, but not members).
4) (TLBEditor) Changing a parameter from Variant Optional to Typed Optional doesn't decrement cParamsOpt and leaves a correct member.
5) (TLBEditor) The editor is prompting to change the corresponding parameter on the companion property let/get/set member if you change the type of a non-final parameter. It shouldn't be asking, and saying Yes corrupts the typelib to the point where it can't be saved.
6) (TLBEditor) Removing the 'dual' attribute doesn't work unless you make another change with the same update.
7) (TLBEditor) Redirecting a type that is used as an implied interface does not update the UI. Save/Reload is required to bring the UI back in sync.
8) (TLBEditor) Redirect/replace with external type is not updating the UI. Save/Reload is required to bring the UI back in sync.
9) (TLBEditor) Single step over a delete command could corrupt the library viewer if the deleted node had not been previously expanded.
10) (TLBEditor) Opening the type picker on the return type or parameter of a dispinterface function crashes if the Type Constraints are set at VB Implementable.
November 14, 2000
11) The CD incorrectly contains ThreadData.cls instead of ThreadData.bas for the three Code\Threading\DllThreadsNoObjects* directories. Header comments have been modified in other files in these directories.
12) (Breaking Change) Code\SafeArray.bas The ShareMemoryViaArray function had the SA1D and MemPtr parameters switched from where they were listed in the book. The new file will cause an easily-remedied compile error.
13) Code\LookupCLSID.bas had an incomplete dependency list in the file's header.
14) Samples\CreateWindow\LBoxEx\LBoxEx.ctl had a Return statement that was never hit. Changed GoSub ToggleSelection to GoTo ToggleSelection and removed the extra Exit Function and Return statements.
December 15, 2000
15) Updated VBoost type libraries to standard on upper case DllName casing. See Import Table Dll Name Casing Bug (Q281913) for more information.
16) Code\VBoost.bas UnknownHook.Flags could be used to turn off the uhAddRef and uhRelease flags, but these flags could not be turned back on.
17) Code\VBoost.bas Added VBoostTypes qualifiers to all types, methods, and constants to avoid any possible conflicts with other typelibs.
18) Code\VBoost.bas Removed PrivVBoost variable and SaveVBoost function in favor of a new Root_Release function, which turns the VBoost variable back on if it is ever turned off.
19) Code\VBoost.bas Added VBOOST_VB5 conditional support. All this does is map VarPtrArray to msvbvm50.dll instead of msvbvm60.dll
20) Code\SmartConcat.cls Added VB5 support for this file using the same VBOOST_VB5 conditional. This includes a VB5 version of the Join function, which could also be removed and used elsewhere.
21) Added a check to all threading architectures to ignore fStealInputData when the passed in Variant is VT_BYREF. This is easy to do accidentally, and almost always breaks things very badly.
22) (TLBEditor) Fixed painting problems when using the mouse wheel to scroll the details pane.
23) (TLBEditor) Enabled record guids to be tracked for scenarios such as redirecting one external library to another, not just internalizing types.
24) (TLBEditor) Enforce that uidefault and defaultbind attributes are used on a single member only.
25) (TLBEditor) Enabled array return types on module and dispinterface functions.
26) (TLBEditor) Added support for 'Typed Optional (No Default)' parameters. This is the parameter type spit by VB when you don't specify a default value and has different semantics to a 'Typed Optional' parameter.
27) (TLBEditor) Fixed sorting on a node rename. Previously, items were sorted to their previous value. Also, leading _ characters are now ignored during a sort.
28) (PostBuild) Blocks using the post-build file as the compatibility file.
29) (PostBuild) Enabled post-build editing of an ActiveX Exe (I unintentionally blocked an ActiveX Exe instead of a Standard Exe, which doesn't have a typelib).
December 28, 2000
30) (TLBEditor) A corrupt name is shown for a single string in the list of types for a sufficiently large library. (This is caused by a TLI bug that occurs with a CustomSort callback on a Types SearchResults collection.)
January 15, 2001
31) (TLBEditor) Errors resulting from invalid HelpStringDll/HelpStringContext combinations were not handled gracefully.
32) (TLBEditor) The library's HelpContext and HelpStringContext values were lost when changing HelpFile or HelpStringDll values.
33) (TLBEditor) Changing the HelpStringContext for a Type changed the HelpContext instead.
February 6, 2001
34) (TLBEditor) Copy/Paste of any function in a module that also contains constants copies incorrect parameter types.
35) (TLBEditor) Internalizing or redirecting guided records from external libraries would corrupt the executable (modified .text section was getting written back 1 byte too low).
36) (PostBuild) Incorrect ModifyHelpData information generated a Type Mismatch error instead of an ignorable warning message.
37) (ReplaceResource) The ReplaceResource utility in PowerVB\Tools\Src\BuildTools was failing on some (non-VB) executables.
February 12, 2001
38) (TLBEditor) Internalizing or redirecting guided records from external libraries would cause object creation to fail if the library versions did not match.
39) (TLBEditor) The error message for an unresolvable external library during post-build playback was useless.
40) (TLBEditor, PostBuild) Errors during post-build playback during Make Exe in the IDE were not correctly activating the modal post-build dialog.
41) (PostBuild) The PostBuild add-in was not sufficiently silent when the /out flag was specified on a command line build. Any messages are now written to a PostBuild.[log file specified after /out] file.
42) (TLBEditor) Deleting and readding redirect or internalize commands in the post-build editor could lead to a hang.
43) (Code\Threading\FireOnceTimers.bas) The dependency information in the file header did not contain ThreadAPI.olb.
February 24, 2001
44) (Code\SmartConcat.bas) Broke NOVBOOST support while adding VBOOST_VB5 conditionals (change #20).
45) (TLBEditor) V1 typelibs (created with VB4-era typelib compilers) did not load correctly.
46) (EditCompat) Extend Interfaces could leave an extra typelib version in the registry if the project was not compiled with the extensions before Extend Interfaces was run. This could prevent extended controls from loading on the developer's machine. Added code to explicitly control registration.
47) Added an add-in CheckBeyondCompat.dll to notify a developer when project additions have been made that warrant the Extend Interfaces command. Works in a silent command line build like PostBuild.dll (see #41) with a log file prefix of BeyondCompat.
October 5, 2001
48) (VBoost.bas) All but the first AggregateData with vbUseIIDs set would not be found in a QueryInterface call.
49) (VBoost.bas) COM+ cannot load VBoost6.dll directly because the types are not designed to be marshaled. However, all of the objects work correctly. Added VBOOST_DIRECTLOAD* conditionals to VBoost.bas to enabled use of VBoost6.dll under COM+. See comments in VBoost.bas.
50) (EditCompat) The analyze command in EditCompat did not recognize aliases in compatibility files generated by the original (no service pack) VB5. VB5 added _IID_* resources, but did not add aliases for previous interface versions to the type library. Also note that EditCompatVB5.dll loaded in the original VB5 IDE allows these interfaces to be edited with the Interface Guids command, which replaces the Event Guids command in this environment.
51) (TLBEditor) Loading a type library with an unresolved external type would simply replace the type with IUnknown* and not generate an error. This error is no longer swallowed.
52) (TLBEditor) The type for an alias to IUnknown or IDispatch would display with an extra* (IUnknown* or IDispatch*).
53) (TLBEditor) Hitting enter when the Update button was disabled because of an invalid state would incorrectly commit the last valid state. Now it just beeps.
54) (TLBEditor) Added a 'Custom Data...' entry to the context menu for all typelib elements. This was the only part of a typelib that could not be edited with TLBEditor.ocx.
55) Enabled PostBuild.dll, EditCompat.dll, ReplaceIcon.exe, and ReplaceResource.exe to work on Windows 95/98/Me (using unicows.dll).
56) Setting the button images on the VB toolbars would occasionally fail and take down the add-in. A failure in in this case is now ignored.
57) The add-in toolbar bitmaps and recorder glyphs (current statement and breakpoint) are now transparent and reflect the appropriate system background colors.
58) Add-ins with toolbar buttons were clearing the clipboard on load. A reasonable attempt is now made to restore the clipboard (VB.Clipboard recognized formats are preserved).
59) Added several accessibility enhancements (invalid fields are now shown in bold as well as red, the external type redirection menu is now accessible with the keyboard context menu key, the toolbar buttons in the type library editor add-in now have corresponding keyboard commands).
60) Adding ThreadingAPIs and VBoostTypes qualifiers in all threading files to avoid name conflicts. In particular, CoCreateInstance was declared differently in ThreadAPI.olb and ObjCreate.olb. (This was done for VBoost.bas in fix 17.)
61) Updated comments on conditionals in FunctionDelegator.bas. The comments for the two supported conditional values were switched.
62) ReadMe statement regarding void returns on lightweight properties incorrectly stated that the return value came back in the last parameter, equivalent to an [out,retval] parameter. This is incorrect. The return value actually comes back as a normal return value, which means that structures >8 bytes (including Variant) are passed as the second parameter (immediately after this), not the last parameter.
May 5, 2002
63) (TLBEditor) Reenabled loading V1 type libraries. (Failure on my part to merge changes 45 and 54).
64) (TLBEditor) Added an 'External Types...' entry to the context menu for the library node and enabled loading of typelibs with broken external references (improves on change 51). See Type Library Editor Overview for more information.
65) (TLBEditor) The current setting of the 'Add items with library's primary HelpFile and HelpStringDll' help option was not recorded, leading to random playback if multiple help files were used during a recording session. This change required the LEH file version to be incremented (this build can read earlier versions, but not vice-versa).
66) The 'Don't save HelpString if HelpStringDll is set' help option could not be set from the command line in EditTLB.exe. Added the /d (dontbackuphelpstringdll) command-line option to control this setting.
67) Enhanced fix 58 to support restoring multiple recognized clipboard formats instead of only the first known format encountered.
68) Enabled dialogs from all add-ins and the core editor to appear in the task bar and alt-tab dialog.
69) A command-line launch of EditTLB.exe unintentionally registered an unregistered typelib if a typelib was specified without a full path.
70) MakeBuild2.exe (used to build tools directory) would fail on 95/98/Me if VB6.exe was installed on a path with a directory that had a long file name. Updated to use ANSI API.
71) VB5 compatibility editor was not correctly determining a VB5 service pack installation. (Interface aliasing is handled differently in the original VB5.)
72) The PostBuild editor add-in was showing a bogus error message during a build of an unsaved project.
73) Improve performance closing a large type library in the editor by collapsing the tree during the unload action.
74) Added the Code\Threading\FireOnceTimersLockExternal.bas file. The FireOnceTimers.bas file does not work if the proxy to the cross-thread object is released before the timer fires. Use AddTimerLock from this file instead of the original AddTimer if you find that your timer is not firing.