The errata list is a list of errors and their corrections that were found after the product was released.
The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.
Version |
Location |
Description |
Submitted by |
Date submitted |
Printed |
Page 1
Example code |
Hi all,
When reading this great book I found a small (but very serious :)) error in it. This
error can cause some menu function in IShellView.UIActivate's implemention not work
exactly.
In VbShell.odl file (and in VbShell.tbl too, of cause) some constant were declared
like that:
typedef enum {
FCIDM_SHVIEWFIRST = 0x0000,
FCIDM_SHVIEWLAST = 0x7fff,
FCIDM_BROWSERFIRST = 0xa000,
FCIDM_BROWSERLAST = 0xbf00,
FCIDM_GLOBALFIRST = 0x8000,
FCIDM_GLOBALLAST = 0x9fff,
} FCIDM;
//#define FCIDM_GLOBALLAST 0x9fff
typedef enum {
FCIDM_MENU_FILE = (0x9fff+0x0000),
FCIDM_MENU_EDIT = (0x9fff+0x0040),
FCIDM_MENU_VIEW = (0x9fff+0x0080),
FCIDM_MENU_VIEW_SEP_OPTIONS = (0x9fff+0x0081),
FCIDM_MENU_TOOLS = (0x9fff+0x00c0),
FCIDM_MENU_TOOLS_SEP_GOTO = (0x9fff+0x00c1),
FCIDM_MENU_HELP = (0x9fff+0x0100),
FCIDM_MENU_FIND = (0x9fff+0x0140),
FCIDM_MENU_EXPLORE = (0x9fff+0x0150),
FCIDM_MENU_FAVORITES = (0x9fff+0x0170),
} FCIDM_MENU;
But in Micrisoft's SHLOBJ.H file these constant were declared as follow:
#define FCIDM_SHVIEWFIRST 0x0000
#define FCIDM_SHVIEWLAST 0x7fff
#define FCIDM_BROWSERFIRST 0xa000
#define FCIDM_BROWSERLAST 0xbf00
#define FCIDM_GLOBALFIRST 0x8000
#define FCIDM_GLOBALLAST 0x9fff
//
// Global submenu IDs and separator IDs
//
#define FCIDM_MENU_FILE (FCIDM_GLOBALFIRST+0x0000)
#define FCIDM_MENU_EDIT (FCIDM_GLOBALFIRST+0x0040)
#define FCIDM_MENU_VIEW (FCIDM_GLOBALFIRST+0x0080)
#define FCIDM_MENU_VIEW_SEP_OPTIONS (FCIDM_GLOBALFIRST+0x0081)
#define FCIDM_MENU_TOOLS (FCIDM_GLOBALFIRST+0x00c0)
#define FCIDM_MENU_TOOLS_SEP_GOTO (FCIDM_GLOBALFIRST+0x00c1)
#define FCIDM_MENU_HELP (FCIDM_GLOBALFIRST+0x0100)
#define FCIDM_MENU_FIND (FCIDM_GLOBALFIRST+0x0140)
#define FCIDM_MENU_EXPLORE (FCIDM_GLOBALFIRST+0x0150)
#define FCIDM_MENU_FAVORITES (FCIDM_GLOBALFIRST+0x0170)
0x9fff is FCIDM_GLOBALLAST not FCIDM_GLOBALFIRST, so your must change 0x9fff by
0x8000 and run MAKETLB.BAT again to create new VbShell.tbl file.
|
Anonymous |
|
Printed |
Page 1
1 |
To all of those who are trying to get the shell examples to work under 2000 / XP
without success I suggest having a look at
http://www.domaindlx.com/e_morcillo/default.asp (If this is becomes a deed link try
search the web for 'Edanmo's VB Page').
This excellent web site has examples that work under Windows ME and XP.
|
Anonymous |
|
Printed |
Page 10
Sample code |
I've just downloaded the sample code. It's a .zip file dated 8/16/00. I
believe it has problems:
"Chapter 02ANIMALS.VBP" in Chapter 2 contains the following lines:
class=animal; cow.cls
class=cow; ..cow.cls
1) The animal class should be contained in animal.cls, not cow.cls.
2) COW.CLS does not exist in .., rather it exists in .
3) The contents of COW.CLS is really the text for ANIMAL.CLS
|
Anonymous |
|
Printed |
Page 10
Example 2-1 |
The Enum "Kingdoms" is declared as "Private" in Animal.cls. But the enum is used as a return type for the Kingdoms function. It mus
t be made a "Public" enum. It is correctly declared as "Public" in the downloadable code.
|
Anonymous |
|
Printed |
Page 10
Box about half way down |
Quote:
"This source code is from a class module, Animal.cls, that you should add to a
standard VB EXE project named Animals. Set the Instancing property of the class to
PublicNotCreatable"
In my version of VB6, you can't have a public not creatable class module in a
Standard EXE project. Moreover, the downloadable code has the type of project as an
ActiveX DLL project.
|
Anonymous |
|
Printed |
Page 11
note on the page |
The Web address given in the note on this page for the source code is very vague. "http://vb.oreilly.com,"
should be:
http://examles.oreilly.com/9781565926707
|
Anonymous |
|
Printed |
Page 12
The first line of the second paragraph |
Reads "The Animal and Cow interfaces are unique."
But "Animal" is an interface, "Cow" is a class!!
|
Anonymous |
|
Printed |
Page 24
Second paragraph |
I believe I have found a bug on page 24, where you have this little code
block:
Private Sub GetTypeInfoCount() As Long
GetTypeInfoCount = 1
End Sub
Presumably this should be either Property or Function, not Sub, as I don't
suppose too many people have had success returning a result to a Sub call.
|
Anonymous |
|
Printed |
Page 25
figure 2-6 Animal Interface diagram |
Figure 2-6 diagrams IUnknown sans "Release" (i.e. shows only QueryInterface and
Addref). As far as I know, this error is not repeated elsewhere in the text. If
a reader used this diagram to create an offset for the vtable swapping
technique used throughout the book...boom!
|
Anonymous |
|
Printed |
Page 34
1st paragraph, second sentence |
The second sentence of the first paragraph states "A stub project with the
appropriate settings is included with the book's downloadable code for this
chapter". This sentence is part of chapter 3, but there is no code for
chapter 3.
The second paragraph (next to the last paragraph) on page 34 also states
"The source code that is provided with this chapter in the book's sample
code serves as a template for future chapters". This sentence is also part
of chapter 3, and there is no code for chapter 3.
|
Anonymous |
|
Printed |
Page 35
2nd Paragraph |
The vb shell IDL file is shown here as "9781565926707.idl", but is named "vbshell.odl" in
downloadable source code examples. The file does match what is listed in Appendix A.
[Chapter 4] Chapter 4;
I downloaded the exaples file and tested them in Win2K.
The example of Chapter 4 just don't work on my system, it
register dll properly and then crashes the shell.
{CH 4} Downloaded code datahandler.bas;
Private Function GetBitmap(ByVal pDataObject As IDataObject, pmedium As
STGMEDIUM) As Long
' GetPicture = DV_E_FORMATETC <*****Wrong***************
GetBitmap = DV_E_FORMATETC '< Corrected
Dim dataObj As clsDataHandler
Dim szType As String
Dim lBitmap As Long
Set dataObj = pDataObject
'Get Animal type
szType = Space(255)
GetPrivateProfileString "Animal", _
"Type", _
"Unknown", _
szType, _
Len(szType), _
dataObj.FileName
szType = TrimNull(szType)
Select Case UCase$(szType)
Case "ARMADILLO"
lBitmap = IDB_ARMADILLO
Case "CAT"
lBitmap = IDB_CAT
Case "COW"
lBitmap = IDB_COW
Case "DOG"
lBitmap = IDB_DOG
Case "FISH"
lBitmap = IDB_FISH
Case Else
Exit Function
End Select
pmedium.pData = LoadBitmap(App.hInstance, lBitmap)
pmedium.TYMED = TYMED_GDI
Set pmedium.pUnkForRelease = pDataObject
Set dataObj = Nothing
'GetPicture = S_OK <********WRONG****************************
GetBitmap = S_OK '< Corrected
End Function
|
Anonymous |
|
Printed |
Page 40
2nd paragraph and Figure 4-2 |
Under W2000, by default, Reged32, under the described key, doesn't show a
"shell" sub-key (only a ShellEx) and so, none of the seven canonical verbs is
displayable and none seems to be possibly added.
Is there a special setting, a command line option to be applied to Reged32 to
make those visible under W2000? Downloaded RadEx but not able to reproduce any
effect as described in Ch4 (under W2000). (Nice application of interesting VB
techniques, by the way).
I assume W2000 is too different and the overall solution for Ch4 just don't
work under that OS?
|
Anonymous |
|
Printed |
Page 41
Figure 4-3 |
I altered the 'dllfile' registry entry as described starting on page 40 in
the section "Static Context Menus." When I right-click on an icon that
represents a DLL, I see neither the "Register" nor the "Unregister" items
in the context menu. I "End"ed the explorer.exe process and restarted it
but they still don't appear. I rebooted ... still don't appear. I'm using
Windows 2000 Professional. Are there shell differences that aren't mentioned
in the book?
|
Anonymous |
|
Printed |
Page 57
2nd paragraph |
There may be errors compiling the .odl file. http://msdn.microsoft.com/
library/books/inole/S111F.HTM contains a listing of the errors you may
encounter. If you get this:
"Error generating type library: MKTYPLIB cannot preprocess the file."
use this:
mktyplib /nocpp 9781565926707.odl
If you get a bar file or error then you need to ensure you have the
mktyplib.exe on your machine and my advice is to copy it to the same directory
as your batch file.
|
Anonymous |
|
Printed |
Page 57
mktyplib line |
"Fatal error M0006: unable to pre-process input file" using vs 6, sp4 on Microsoft ME.
This, indeed, will be a serious problem UNLESS the user adds all of the appropriate
Visual Studio directories to the user's PATH environment variable. For Visual Studio
.NET 2003, run a .CMD file with the following line in it:
SET PATH=%PATH%;C:Program FilesMicrosoft Visual Studio .NET
2003Common7ToolsBin;C:Program FilesMicrosoft Visual Studio .NET
2003Vc7in;C:Program FilesMicrosoft Visual Studio .NET 2003Common7IDE
to fix this problem
|
Anonymous |
|
Printed |
Page 58
Example 4-4 |
Not clear that reader should be creating 2 modules: handler.bas & clsContextMenu.cls.
|
Anonymous |
|
Printed |
Page 58
Example 4-4 |
variable m_nFiles is declared as "Public", but in the downloadable code is declared
as "Private". In the example should be declared as "Private".
|
Anonymous |
|
Printed |
Page 58
Example 4-4 |
After the line:
'handler.bas
should be
Option Explicit
for consistency with clsContextMenu.cls
|
Anonymous |
|
Printed |
Page 60
3rd paragraph (not counting paragraph in "Pointers" box) |
First sentence reads "The value of nFiles allows us...." should be "The value of
m_nFiles allows us..."
|
Anonymous |
|
Printed |
Page 61
Example 4-5 |
CopyMemory is not declared in the example as DragQueryFile and ReleaseStgMedium were
declared in Example 4-4.
|
Anonymous |
|
Printed |
Page 86
Last registry key listed (above sidebar) |
The last registry key shows that under the Shell ExtensionsApproved key, a
value of {61E9A1D1-5985-BB7C-444553540000} = "RAD file icon handler". Where
does that GUID come from ? The RadEx.reg file has the following key in it:
... Shell ExtensionsApproved "{B3213FAC-EB84-11D2-9FD9-00550076E06F}" = "RAD
file icon handler". The GUID of B3213... is the CLSID of clsIconHandler.cls.
|
Anonymous |
|
Printed |
Page 107
1st paragraph |
Erroneously claims that a function can't be called from a pointer in Visual
Basic.
|
Anonymous |
|
Printed |
Page 149
Listing of Private Function GetBitmap |
At the beginning of this function:
GetPicture = DV_E_FORMATETC
At the end of ths function
GetPicture = S_OK
In both of these lines, should GetPicture be replaced with GetBitmap? Without
this change RadEx.vbp will not compile.
|
Anonymous |
|
Printed |
Page 206
The 7th line of Example 11-9 |
Now reads
'Query view for IShellFolder.
Should read:
'Query view for IShellView.
The shell wants a pointer to the object that implements the passed-in riid,
the IShellView.
|
Anonymous |
|
Printed |
Page 208
The first line of Example 11-11 |
The first line of Example 11-11 indicates that this code goes inShellFolder.cls. It actually goes in ShellView.cls.
|
Anonymous |
|
Printed |
Page 223
The comment in the GetPidlType function (line 18) of Example 11-20 |
Now reads:
'The "level" of the pidl is stored in bytes 3-6
Should read:
'The "type" of the pidl is stored in bytes 3-6
|
Anonymous |
|
Printed |
Page 223
Example 11-20, GetPidlType function |
The function GetPidlType as a return type of PIDLTYPE. PIDLTYPE is defined as
an Enum. Enums are Longs in VB. The variable pt is declared as an integer,
which, as stated on the previous page, is 2 bytes long. The function reads 4
bytes in this 2 byte variable. pt should be declared as a Long.
|
Anonymous |
|
Printed |
Page 231
2nd, 3rd, 4th paragraph |
The descriptions of the parameters for GetUIObjectOf are messed up. The 2nd
paragraph starts "The third parameter, apidl", then goes on to describe the
4th parameter, which is a GUID. The 3rd paragraph then starts "the fourth
parameter, prgfInOut". That is actually the 5th parameter. The 4th paragraph
starts "the fifth parameter, ppvOut". That is actually the 6th parameter. So,
there ends up being no actual description of the 3rd parameter.
|
Anonymous |
|
Printed |
Page 242
Sample code from DemoSpace.reg file |
The last key in the sample .reg file gives the key path as ".../WindowsNT/
CurrentVersion/ShellExtensions/Approved". Is the "WindowsNT" portion of the
key path correct? The other .reg files used a key path of "Windows/
CurrentVersion/ShellExtensions".
|
Anonymous |
|
Printed |
Page 303
Project Sample for Chapter 14 |
I get the following error when compiling the sample project for Chapter 14.
Compile Error:
Procedure declaration does not match description of event or procedure having
the same name.
The following procedure header, found in the clsInetSpeak class, is responsible
for the compilation error:
Private Sub IOleCommandTarget_Exec( _
ByVal pguidCmdGroup As VBShellLib.LPGUID, _
ByVal nCmdID As VBShellLib.DWORD, _
ByVal nCmdExecOpt As VBShellLib.DWORD, _
ByVal pvaIn As VBShellLib.LPVARIANTARG, _
pvaOut As VBShellLib.LPVARIANTARG
It should be:
Private Sub IOleCommandTarget_Exec( _
ByVal pguidCmdGroup As VBShellLib.LPGUID, _
ByVal nCmdID As VBShellLib.DWORD, _
ByVal nCmdExecOpt As VBShellLib.DWORD, _
pvaIn As Variant, _
pvaOut As Variant)
|
Anonymous |
|
Printed |
Page 311
5th bolded section of code |
The following produces 'Automation Error':
Set m_pDockingWindowFrame = _
pServiceProvider.QueryService(VarPtr(clsidShellBrowser), _
VarPtr(clsidDockWndFrame))
If I skip this line of code the next error is:
Object Variable type not set...
m_pDockingWindowFrame.AddToolbar pDockWnd, ByVal StrPtr(szToolbar), 0
|
Anonymous |
|
Printed |
Page 325
All of Appendix A |
I was unable to locate an electronic copy of the VBShell library. Is it
possible that you could make one available? I am required on this project
to provide detailed step-by-step instructions on how to re-create all
non-standard libraries from source.
(colophon) The animal on the book's cover is by all means a single cell
organism and NOT a sea urchin. I first though it was a colony of
reprsentatives of the "Actinozoa" class of the phylum "Actinopodea" that
belong to the kingdom "Protozoa."
But it also could be a single Globigerina foraminifer, which belongs to
the "Globigerinidae" family of the "Foraminifera" order, of the
"Granulareticulosea" class of the phylum "Rhizopoda" of "Protozoa."
Tired yet? There is more...
The "Protozoa" kingdom consists of single-cell eukaryotic (=with formed
nucleus) organisms - few of them are actually visible with the bare eye.
Globigerina foraminifer has a calcium carbonate exoskeleton with mastigia
(=wheeps) of exoplasm penetrating the exoskeleton's microscopic holes.
Chalk is actually a sedimentary rock made by fossilized "Foraminifera."
The Actinozoa are quite like the former - except that they have a silicon
oxide exoskeleton of a single spheric compartment. Their silicon
exoskeleton allows them to live in great sea depths - where the calcium
exoskeleton of the former would dissolve.
|
Anonymous |
|