Sieg,

Thanks for your help.

I did not catch what you said.
Should I change that application written in C++?
Could you tell me something more about it?
Thanks in advance.

On 6/7/05, Siegfried Heintze <[EMAIL PROTECTED]> wrote:
> J,
> I just reviewed the notes I used to teach COM from. I'm feeling more certain
> that if you want to pass arrays with the dispatch interface, you can either
> pass a variant or pass a SAFEARRAY. You appear to be doing neither in your
> C++ code.
> Sieg
> 
> -----Original Message-----
> From: J aperlh [mailto:[EMAIL PROTECTED]
> Sent: Friday, June 03, 2005 12:05 AM
> To: Siegfried Heintze
> Cc: beginners@perl.org
> Subject: Re: Argument passing between perl and a C function.
> 
> Siegfried,
> 
> Thank you.
> I am sure it's a dispatch interface.
> 
> 
> On 6/3/05, Siegfried Heintze <[EMAIL PROTECTED]> wrote:
> > J,
> > Is this a custom interface or a dispatch interface? I assumed it was a
> > dispatch interface. Perl and many other languages like VB and javascript
> > work well with dispatch interfaces because dispatch interfaces were
> > specifically designed to accommodate languages like these.
> >
> > All dispatch interfaces are various implementations of IDispatch, a set of
> > function prototypes defined my Microsoft.
> >
> > I think you have a custom interface because you are not using SAFEARRAYs.
> I
> > doubt Win32::OLE can accommodate custom interfaces. Can you implement your
> > object using a dispatch or dual interface? You might have to have the
> author
> > of your COM object wrap it in C++ with a dispatch interface so you can
> call
> > it from perl. Wraping it with a C++ dispatch interface is not hard with
> > Visual Studio's code generators. I would not want to do it without visual
> > studio, however.
> >
> > Custom interfaces are a big problem. Not even microsoft's most recent
> > languages, VB.NET and C# can consistently call custom interfaces. I would
> > not want to try to do so directly in perl.
> >
> > Siegfried
> >
> > -----Original Message-----
> > From: J aperlh [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, June 02, 2005 7:59 PM
> > To: Siegfried Heintze
> > Cc: beginners@perl.org
> > Subject: Re: Argument passing between perl and a C function.
> >
> >
> ---------------------------------------------------------------------------
> > Thanks for you guys help.
> >
> > There is an application written in C language by my colleague.
> > We are not allowed to share this application for security reason.
> >
> > What I am going to do is to call a set of functions in this
> > application (OLE server) from a PERL script (OLE controller).
> >
> > So far, all the functions are works well, except a reference(pointer)
> > related functions:
> >
> ---------------------------------------------------------------------------
> > BOOL Calculate(BSTR* names, double* values, short number_of_names);
> > names: a list of names
> > values: a list of corresponding values,
> > number_of_names: size of the array
> >
> > I don't know that I should pass to this funtion.
> > Array reference or something else?
> >
> > I know that if the OLE controller is in C language, things will be easier,
> > Passing the first element of the array to this function is ok
> >
> >
> >
> > On 6/3/05, Siegfried Heintze <[EMAIL PROTECTED]> wrote:
> > > J,
> > > You need more information about the function that is contained in the
> IDL
> > or
> > > the type library. Unfortunately, not all COM objects have an IDL file or
> > > type library.
> > >
> > > Both the IDL file and the type library would tell us exactly what the
> "*"
> > > means in C because it is ambiguous. The "*" could mean we are passing a
> > > single value by reference, or multiple values.
> > >
> > > I can tell you that it is not looking for a variant, however.
> > >
> > > Often COM uses a special data structure called a SAFEARRAY to pass
> arrays
> > so
> > > it could be that your function is looking for scalars, not arrays.
> > >
> > > Perhaps there is some documentation?
> > >
> > > S
> > >
> > > -----Original Message-----
> > > From: J aperlh [mailto:[EMAIL PROTECTED]
> > > Sent: Wednesday, June 01, 2005 8:44 PM
> > > To: beginners@perl.org
> > > Subject: Argument passing between perl and a C function.
> > >
> > > Argument passing between perl and C function.
> > >
> > >
> > > There is C function in a OLE server:
> > > What kind of variable should I pass to this function?
> > >
> #########################################################################
> > > BOOL Calculate(BSTR* names, double* values, short number_of_names);
> > >
> > >
> > > I tried the following script, but there is always an error like "Type
> > > mismatch" ...
> > > Is there any simple way to pass argument between perl and C function?
> > >
> #########################################################################
> > > #! perl -W
> > >
> > >
> > > use strict;
> > > use Win32::OLE;
> > > use Win32::OLE::Variant;
> > >
> > >
> > > my $names = Variant(VT_BSTR|VT_ARRAY, 3);
> > > my $values = Variant(VT_R8|VT_ARRAY, 3);
> > >
> > >
> > > $names->Put(['name1', 'name2', 'name3']);
> > > $values->Put([0, 0, 0]);
> > >
> > >
> > > my $ret = $app->Calculate($names, $values, 3);
> > >
> > > --
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > <http://learn.perl.org/> <http://learn.perl.org/first-response>
> > >
> > >
> > >
> >
> > --
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > <http://learn.perl.org/> <http://learn.perl.org/first-response>
> >
> >
> >
> > --
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > <http://learn.perl.org/> <http://learn.perl.org/first-response>
> >
> >
> >
> 
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
> 
> 


-- 

Besh wishes,
Japerlh

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to