Hi Jan,

thanks, for the prompt reply.
We will try to implement the VB test in _vbscript_.
However, I think it should not be a Problem as long as _vbscript_ does provide a predefinition of variables, i.e.
dim MyBridge as Bridgeamplifier.

According to OLEView the interface of "Bridgeamplifier" is "IInput"  and the Interface of "IInput" is "IDispatch", therefore I thought I'd only need support for IDispatch?! The object.methods I need are just "hidden" by the wrong (parent) type defined by the API for the return-value of the item(i) method.

Anyway, we will try in _vbscript_ and see.
Thanks again,

Thomas
--------------------------------------------------------------------------------------
Dr. Thomas Bruns                        <[EMAIL PROTECTED]>

        Physikalisch-Technische Bundesanstalt
                               Braunschweig
Arbeitsgruppen: 1.31 & 1.34
Bundesallee 100                         Tel: 0531/592 -  1220
D-38116 Braunschweig              Fax: 0531/592-69-1220
--------------------------------------------------------------------------------------



"Jan Dubois" <[EMAIL PROTECTED]>

27.10.2006 22:37

An
<[EMAIL PROTECTED]>, <perl-win32-users@listserv.activestate.com>
Kopie
Thema
RE: OLE-object type cast





Hi Thomas,
 
Every COM object can only have a single IDispatch interface, regardless how many other interfaces it may support.  It is up to the implementer of the object to make sure all the functionality of the different VTBL interfaces is accessible to scripting languages through the IDispatch interface.
 
Visual Basic is not using IDispatch, so it can access all COM interfaces of an object.  If you can find a way to access the functionality you need from _vbscript_ (which is also restricted to IDispatch), then I’m sure there’ll be a way to access it from Perl as well.  But if there isn’t, then you may have to implement a wrapper object in e.g. VB to expose the additional functionality through IDispatch.
 
Cheers,
-Jan
 
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED]
Sent:
October 27, 2006 9:22 AM
To:
perl-win32-users@listserv.activestate.com
Subject:
OLE-object type cast

 

Hi,


in a project we want to use the DCOM-API of a Win98-based measurement instrument.

We need to access different so called Inputs which have some common settings but also some individual settings.

This is mapped to the API by creating a Class "IInput" (which is IDispatch type according to OLEViewer.exe) for all the settings common to all the channels, and to derive other Classes like "IBridgeInput" (which is IInput type according to OLEViewer.exe) for the specific settings.

To my understanding so far IBridgeInput inherits the structure from IInput and adds the additional special features.


Well, so far so good:

The problem arises from the way of access to the objects.

+++The only way+++ to access the API is by referencing a structure in a way like:


my $MyInput = $InputBoard->Inputs->Item(3)  


here the method Item($i) return ++always++ an IInput-type, however the physical situation is:

Item(1) and Item(2) are in fact IInput (only common settings)

Item (3) is an IBridgeInput (certain special settings)

Item (4) is a IIPCInput (other certain special settings)

Item(5) is a ICounterInput (again other special settings)


The API defines this types and exports them, i.e. when I do the same in Visual Basic I just do


Dim MyInput as BridgeInput;   REM make it a bridge input, no matter what is returned

Set MyInput = InputBoard.Inputs.Item(3)


and violas, I can access common ++and++ special settings.


So my question is: Is there a way to cast  an OLE-Object type onto an existing/returned Object of parent-type.
Like:
my $MyInput = $InputBoard->Inputs->Item(3);

castObjectType($MyInput, BridgeInput); # function non-existent


which is a replacement for the explicit "DIM .... as ...." in Visual Basic.


Sorry for the long description, but it's a difficult issue I think,

TIA,

Thomas

 

--------------------------------------------------------------------------------------
Dr. Thomas Bruns                        <[EMAIL PROTECTED]>

       Physikalisch-Technische Bundesanstalt
                              Braunschweig
Arbeitsgruppen: 1.31 & 1.34
Bundesallee 100                         Tel: 0531/592 -  1220
D-38116 Braunschweig              Fax: 0531/592-69-1220
--------------------------------------------------------------------------------------

_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to