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

Re: [amibroker] Re: IDispatch and VB ?



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