How to define IDL methods, callable from VB?

Where can I find appropriate documentation on the subset of IDL (Interface Definition Language) functionality I can use when writing COM objects I want to be callable from Visual Basic.

I'm writing a few C++ utility functions in COM objects to be used by Visual Basic.  I'm sure there must be some documentation on what's valid and what's not, but I'm having a hard time finding it!  ;->

Typical error --
  "Compile error:"
  "Function or interface marked as restricted, or the function uses an Automation type not supported in Visual Basic"

Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

DanRollinsConnect With a Mentor Commented:
JeffGrigg, an EE Moderator will handle this for you.
Moderator, my recommended disposition is:

    Refund points and save as a 0-pt PAQ.

DanRollins -- EE database cleanup volunteer
why don't you just let c++ do it for you? Visual C++ 6 will generate everything you need when makeing com objects.
there is also some stuff about idl in the msdn library.  it has a fractal sample.
Never miss a deadline with

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

JeffGriggAuthor Commented:
Well yes, VC++ 6 will "do all the IDL and C++ code generation for me," when I right click on the interface, select Add Method, and then type in the method name, and then >>> type in all the gory IDL details of all the parameters making sure to conform to all the *unknown* rules of types that Visual Basic is able to use <<<.

It's that last little step I'm having trouble with.  ;->
JeffGriggAuthor Commented:
Found partial answer on

It contains a table I found helpful:
  Visual Basic Data Type -> IDL Data Type
  Boolean -> VARIANT_BOOL
  Byte -> unsigned char
  Collection -> _Collection*
  Currency -> CURRENCY
  Date -> DATE
  Double -> double
  Integer -> short
  Long -> long
  Object -> IDispatch*
  Recordset -> _Recordset*
  Single -> float
  String -> BSTR
  Variant -> VARIANT
  no parameters -> void
Figure 2 / Visual Basic data types and their corresponding data types in IDL
JeffGriggAuthor Commented:
I seem to recall reading an article from Developmentor ( describing the limits of VB-implementable interfaces, but I can't find it.
_ _ _

On the other hand, I've found useful information in MSDN under the "oleautomation" keyword, from the MIDL language:  "The oleautomation attribute indicates that an interface is compatible with OLE Automation. The parameters and return types specified for its members must be OLE Automation-compatible, as listed in the following table."

Type -> Description
boolean -> The MIDL base type boolean is incompatible with the oleautomation attribute. Use VARIANT_BOOL instead.
unsigned -> char 8-bit unsigned data item.
Double -> 64-bit IEEE floating-point number.
Float -> 32-bit IEEE floating-point number.
Int -> Integer whose size is system dependent. On 32-bit platforms, MIDL treats int as a 32-bit signed integer.
Long -> 32-bit signed integer.
Short -> 16-bit signed integer.
BSTR -> Length-prefixed string, as described in the OLE Automation topicBSTR.
CY -> (Formerly CURRENCY) 8-byte fixed-point number.
DATE -> 64-bit floating-point fractional number of days since December 30, 1899.
SCODE -> Built-in error type that corresponds to HRESULT.
Enum -> Signed integer, whose size is system-dependent. In remote operations, enum objects are treated as 16-bit unsigned entities. Applying the v1_enum attribute to an enum type definition allows enum objects to be transmitted as 32-bit entities.
IDispatch * -> Pointer to IDispatch interface (VT_DISPATCH).
IUnknown * -> Pointer to interface that is not derived from IDispatch (VT_UNKNOWN). (Any OLE interface can be represented by its IUnknown interface.)
JeffGriggAuthor Commented:
Good suggestion.

Thank you for tracking down and cleaning up outdated questions.  (You can have the points for that.  ;-)
All Courses

From novice to tech pro — start learning today.