JeffGrigg
asked on
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"
Thanks!
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"
Thanks!
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.
ASKER
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. ;->
It's that last little step I'm having trouble with. ;->
ASKER
Found partial answer on http://www.yukondude.com/articletamevbwithidl.asp
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
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
ASKER
I seem to recall reading an article from Developmentor (http://www.developmentor.com) 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.)
_ _ _
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.)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Good suggestion.
Thank you for tracking down and cleaning up outdated questions. (You can have the points for that. ;-)
Thank you for tracking down and cleaning up outdated questions. (You can have the points for that. ;-)