[fpc-pascal] support for usinganactivex
Ludo Brands
ludo.brands at free.fr
Mon May 30 20:46:23 CEST 2011
I created a small automation object with following IDL (part of it):
interface ItestAX: IDispatch
{
[
propget,
id(0x00000001)
]
HRESULT _stdcall Devices([out, retval] IDevices ** Value );
};
interface IIDevices: IDispatch
{
[
propget,
id(0x00000000)
]
HRESULT _stdcall Device([in] long Idx, [out, retval] IDevice ** Value );
[
propget,
id(0x00000002)
]
HRESULT _stdcall Count([out, retval] long * Value );
};
interface IIDevice: IDispatch
{
[
propget,
id(0x00000001)
]
HRESULT _stdcall Name([out, retval] BSTR * Value );
};
This matches pretty much the interface you described earlier. Note the
id(0x00000000) which makes Device the default member of IIDevices. This is
the same as id(DISPID_VALUE) in your case.
Now, the following lines do work for me to get the Name member of IIDevice
(ActX,a,b:variant;s:string):
ActX:=CreateOleObject(MyTestControl);
a:=ActX.Devices;
b:=a.Device[3];
s:=b.Name;
b:=ActX.Devices.Device[3];
s:=b.Name;
b:=ActX.Devices[3];
s:=b.Name;
Note that the default member does work correctly:
Devices.Device[3]===Devices[3].
I'm using fpc 2.5.1 svn 17599.
Ludo
More information about the fpc-pascal
mailing list