The documentation for SldWorks::AddMenuItem2 states the following:
================================
Syntax (COM)
status = SldWorks->AddMenuItem2 ( DocumentType, Cookie, MenuItem,
Position, MenuCallback, MenuEnableMethod, HintString, &IsMenuItemAdded )
Input:
(long) DocumentType
Document type to which to add the menu item
Input:
(long) Cookie
Identifier of the menu as defined in swMenuIdentifiers_e; this is the
same Cookie that you specified in SwAddin::ConnectToSW
Input:
(BSTR) MenuItem
Menu string ("menuItem@subMenuString@menuString"); SolidWorks creates
menus and submenus only if they do not already exist
===================================
Note the description for the 'cookie' parameter. First it says that it
should be a value from the swMenuIdentifiers_e enumeration, and then
goes on to say that it should be the same cookie *I* specified in
ConnectToSW. The problem is, *I* don't specify a cookie in ConnectToSW.
The cookie is handed to me by SW. In any event, the point is moot,
because if I use the cookie, the addin crashes. I suspect that this a
another in a long list of cut and paste errors in the API docs.
If I call the above like this:
hr = sldWorks->AddMenuItem2 (
swDocNONE,
swToolsMenu,
menuItemInfo,
0,
menuFunction,
empty,
empty,
&added);
where:
menuItemInfo = a BSTR containing "Item@Addin"
menuFunction = a BSTR containing "helloWorldFromMenu "
empty = a BSTR containing ""
I expect this to add a submenu named 'Addin' to the 'Tools' menu, with a
single menu item named 'Item'.
What I get is a new menu named 'Addin', with no items under it. Upon
checking the eroror status, the 'added' variable is FALSE, which means
that the item was not added. Howevr the menu is, so clearly SW is not
doing what it should. If the call to add an item fails, all of its
parent should not be created.
It seems as though the 'cookie' parameter does nothing.
Why the call is returning FALSE for 'added' is a separate issue most
likely related to IDispatch, but if someone has made sense of this
horrible bit of API documentation, I would appreciate a snippet of code
showing the 'proper' way to do this.
Jim S.
- posted
18 years ago