import "oaidl.idl"; //necessary includes for COM
import "ocidl.idl";
[
object, //denotes ORPC, always include this tag
uuid(638094E5-758F-11d1-8366-0000E83B6EF3), // GUID for this
// interface
dual, // support both IDispatch and Early Binding
oleautomation, // see sidebar "proxy DLL's"
helpstring("ICalc Interface"), // user friendly help
pointer_default(unique) // tells RPC how to chase down
// pointer, almost always
// include this
]
interface ICalc : IDispatch
// Inheriting from IDispatch means it will support and early late
// binding. Inheriting from IUnknown means it will only support
// early binding
{
// below: your methods. [in] denotes an in only parameter, [out]
// means you will be passing by reference. [out, retval] means
// that you want the #import generated proxy class for this
// interface to have the method in the form result=Add(1,2) as
// opposed to Add(1,2, &result). Except for dispinterfaces (not
// discussed here) all interface methods in COM must return an
// HRESULT for error handling. This is why the [out, retval] tag
// is necessary.
[id(1), helpstring("method Add")] HRESULT
Add([in] int x, [in] int y, [out,retval] int * r );
[id(2), helpstring("method Divide")] HRESULT
Divide([in] int x, [in] int y, [out,retval] int * r);
};
[
uuid(638094E1-758F-11d1-8366-0000E83B6EF3), // GUID for the
// type library
version(1.0), // version of the server/type library
helpstring("calcsdk 1.0 Type Library")
]
library COMCALCLib
{
importlib("stdole32.tlb"); // necessary includes
importlib("stdole2.tlb");
[
uuid(638094E0-758F-11d1-8366-0000E83B6EF3), // GUID of
// the COM
// Class
helpstring("Calc Class")
]
// Below: This is the declaration of you COM class. This is what
// you actually instantiate and use. A COM Server's IDL file may
// have as many CoClasses as it likes. You must declare all the
// interfaces you wish your class to support in the CoClass
// block. Notice that it is always enclosed in the type library
// block.
coclass COMCalc
{
[default] interface ICalc;
//other interface declarations if desired
};
};
//NOTE: VC++ ATL projects will generate and maintain IDL files for
//you to a large degree via wizards.