PureBytes Links
Trading Reference Links
|
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@xxxxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
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@xxxxxxxxxxxxxxx, "tomy_frenchy" <michel_b_g@xxx>
> 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.amibroker.com/devlog/
>
> For other support material please check also:
> http://www.amibroker.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
|