Solved

How to define IDL methods, callable from VB?

Posted on 2001-07-10
7
576 Views
Last Modified: 2013-11-25
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!
0
Comment
Question by:JeffGrigg
  • 4
  • 2
7 Comments
 
LVL 3

Expert Comment

by:jrspano
ID: 6270770
why don't you just let c++ do it for you? Visual C++ 6 will generate everything you need when makeing com objects.
0
 
LVL 3

Expert Comment

by:jrspano
ID: 6270777
there is also some stuff about idl in the msdn library.  it has a fractal sample.
0
 

Author Comment

by:JeffGrigg
ID: 6270847
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.  ;->
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 

Author Comment

by:JeffGrigg
ID: 6270992
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
0
 

Author Comment

by:JeffGrigg
ID: 6277330
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.)
0
 
LVL 49

Accepted Solution

by:
DanRollins earned 100 total points
ID: 7153031
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
0
 

Author Comment

by:JeffGrigg
ID: 7153217
Good suggestion.

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

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

If you have ever used Microsoft Word then you know that it has a good spell checker and it may have occurred to you that the ability to check spelling might be a nice piece of functionality to add to certain applications of yours. Well the code that…
Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now