[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [amibroker] Re: IDispatch and VB ?



PureBytes Links

Trading Reference Links

pushed the send button too quick. I was meaning to say there might be a
naming space mismatch between VB and C, you could check your linking option
in VB as well. just a thought.
/Paul.

  _____  

From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf
Of Paul Ho
Sent: Wednesday, 13 December 2006 11:39 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: RE: [amibroker] Re: IDispatch and VB ?




mich,
have you tried doing that in C first.
I havent done it before myself, but Tomasz has shown us how its done in C, I
think its posted in the DLL forum
/Paul.

  _____  

From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf
Of tomy_frenchy
Sent: Wednesday, 13 December 2006 5:26 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Re: IDispatch and VB ?



Thanks Steve to look for my problem.
But problem don't come from here.

In the program, it is well :
"result = MyActiveXDLL.test(C, Extern_Object);"
I just change name variable when i writed the mail to be more 
explicit (and so add a "e" in the mail when i writed the mail).

Another other ideas ?

IDispatch seems to be a type of variable in C.
But for Visual Basic is it ok as variant ?

Thanks.
Mich.

--- In amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com> ps.com,
"Steve Dugas" <sjdugas@xxx> wrote:
>
> Hi - Did you mispell Extern_Object in this line?
> 
> result = MyActiveXDLL.test(C, Externe_Object); // send price array 
> 
> Steve
> 
> ----- Original Message ----- 
> From: "tomy_frenchy" <michel_b_g@xxx>
> To: <amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com> ps.com>
> Sent: Tuesday, December 12, 2006 11:08 PM
> Subject: [amibroker] Re: IDispatch and VB ?
> 
> 
> > It makes two days i try to make it work and nothing to do.
> > Sorry to come back with this problem.
> > If someone can help me please, i will be more than happy.
> > I don't know if problem come from AB, the connection between AB 
and 
> > DLL or the DLL.
> > 
> > In fact, when i create an object in Amibroker with Create.Object 
> > function, it returns an IDispatch object (_trace confirm it).
> > 
> > From an IDispatch object, i have read that we can retrieve object 
> > method by using something like that :
> > idmethod = IDispatch.GetIDsOfNames("name_method")
> > method = IDispatch.Invoke(idmethod)
> > 
> > I call an COM/ActiveX DLL from amibroker where i pass the 
IDispatch 
> > as parameters function.
> > Problem is that the COM/ActiveX DLL side see nothing... like if 
> > sending IDispatch was null. But _trace from Amibroker see the 
> > variable like an IDispatch object.
> > 
> > So the problem can be :
> > 1- Amibroker don't send the IDispatch object to the ActiveX DLL
> > 2- At some point between Amibroker and the ActiveX DLL the 
IDispatch 
> > object is lost
> > 3- The ActiveX DLL don't catch the IDisaptch object
> > 
> > For 1, if IDispatch is send to _TRACE function, why it wouldn't 
be 
> > send to the ActiveX DLL...? so i don't think it come from here
> > For 2, the array type are well transmitted to the ActiveX DLL, so 
the 
> > Dispatch object should be too well transmitted
> > For 3, ActiveX DLL catch well array data coming from AFL so why 
not 
> > the IDispatch object...
> > 
> > So i am really lost here...
> > Only thing i was thinking is debbuger don't see IDispatch 
> > object...but when i send back the variable to Amibroker, and make 
a 
> > _trace of the result send back from the DLL, there is no more 
> > <IDispatch> but {empty} : (
> > 
> > 
> > Some very simple code to explain, with comments to important 
point 
> > and test i made :
> > 
> > AFL side :
> > //----------------------
> > Extern_Object = CreateObject("Library.Class"); //i cannot modify 
this 
> > object
> > MyActiveXDLL = CreateObject("MyDLL.MyClass"); // my Active X DLL
> > 
> > _TRACE("IDispatch object:"+Extern_Object); //return "<IDispatch>"
> > _TRACE("My ActiveX DLL:"+ActiveXDLL); //return "<IDispatch>"
> > 
> > result = MyActiveXDLL.test(C, Externe_Object); // send price 
array 
> > and IDispatch object to the activex dll
> > _TRACE("Result send back:"+result);
> > //----------------------
> > 
> > VBS side :
> > '-----------------------
> > Public Function test(ByRef price As Variant, ByRef externobject 
As 
> > Variant) As Variant
> > 
> > 'here debugging told me :
> > 'price contains the C array comming from AmiBroker, all is ok
> > 'externobject contain nothing !? arhhhh
> > 'i would like to call some methods of the externobject here
> > 
> > test = price
> > End Function
> > '-----------------------
> > 
> > 
> > In amibroker i got the price array as value for "result", not 
problem.
> > But if i put 'test = externobject' instead 'test = price' in the 
VBS 
> > side, "result" under Amibroker is empty, there is no more 
<IDispatch> 
> > (_trace say {empty})... he disapear at some point : )) !?
> > 
> > I tried "ByRef externobject" and "ByVal externobject" for 
function 
> > declaration. Change nothing to the problem.
> > 
> > 
> > Thanks,
> > Mich.
> > 
> > 
> > --- In amibroker@xxxxxxxxx <mailto:amibroker%40yahoogroups.com> ps.com,
"tomy_frenchy" <michel_b_g@> 
> > wrote:
> >>
> >> Hello,
> >> 
> >> I would like to create a static object in AFL and after send 
this 
> >> pointer (called IDispatch type variable) to a Visual Basic 
> >> COM/ActiveX DLL.
> >> After i would like to call this object created in AFL amibroker 
> > from 
> >> the VB code.
> >> 
> >> I need to use VB code because the COM object created fom AFL 
return 
> >> matrix, so i need to change the result to array before sending 
it 
> >> back to Amibroker.
> >> And another purpose of this is that create.object is long 
because 
> > it 
> >> is a heavy object, so during recursion with multiple call to the 
VB 
> >> code in AFL it is really slow. I would like to create the object 
> > just 
> >> one time with amibroker, and after call directly the method from 
> >> Visual Basic without create a new object.
> >> 
> >> The code i use are :
> >> 
> >> AFL code :
> >> ------------------------------------------
> >> aClass = CreateObject("carre.carreclass"); //object to be called 
in 
> >> the VB code, we can use CreateStaticObject too here
> >> myobj = CreateObject("Project1.Class1"); // VB COM/ActiveX DLL
> >> _TRACE("aClass:"+aClass); // return IDispatch type variable
> >> _TRACE("myobj:"+myobj); // return IDispatch type variable
> >> 
> >> result = myobj.test(200, aClass);
> >> ------------------------------------------
> >> 
> >> VB code :
> >> ------------------------------------------
> >> Public Function testVB(n As Variant, aClass As Variant) As 
Variant
> >> 'IF I DEBUG HERE "aClass" is empty !!
> >> Dim matrix As Variant
> >> Dim result() As Variant
> >> 
> >> Call aClass.fct1(matrix, n)
> >> 
> >> ... processing matrix variable and VB code here ...
> >> 
> >> ' IF I SEND BACK testVB = aClass to amibroker, a _trace under 
> >> amibroker no more say that variable is IDispatch, but say it is 
> >> empty !!
> >> 
> >> testVB = result
> >> 
> >> End Function
> >> ------------------------------------------
> >> 
> >> 
> >> Any help is welcome ! Thanks.
> >> 
> >> Cheers,
> >> Mich
> >>
> > 
> > 
> > 
> > 
> > Please note that this group is for discussion between users only.
> > 
> > To get support from AmiBroker please send an e-mail directly to 
> > SUPPORT {at} amibroker.com
> > 
> > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> > http://www.amibroke <http://www.amibroker.com/devlog/> r.com/devlog/
> > 
> > For other support material please check also:
> > http://www.amibroke <http://www.amibroker.com/support.html>
r.com/support.html
> > 
> > Yahoo! Groups Links
> > 
> > 
> > 
> >
>



 

Content-Description: "AVG certification"
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.432 / Virus Database: 268.15.16/582 - Release Date: 12/11/2006 4:32 PM