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

[amibroker] Re: Help with ActiveX component



PureBytes Links

Trading Reference Links

Hi,

Snip from 45607:


***************
The CSTR thing was mentioned by TJ to me: 
 
As for this CStr():  the real reason for such strange behaviour is 
that Stocks.Item( ticker) accepts VARIANT
as a TICKER. This is so to allow the user to reference ticker by both 
number and symbol.
As you probably know Variant can hold any type. 
 
AmiBroker does the following:
struct StockInfo * AStocks::FindStockInfoByVariant(const VARIANT 
&Item)
{
 struct StockInfo *si = NULL;
 
    if (Item.vt == VT_BSTR)
    {
         si = FindStock( CString( Item.bstrVal ) ) ;
    }
    else
    {
        // coerce to VT_I4
        VARIANT va ;
        VariantInit( &va );
        if (SUCCEEDED(VariantChangeType( &va, (VARIANT FAR*)&Item, 0, 
VT_I4 )))
        {
            si = StockInfoFromIndex( (int)va.lVal );
        }
    }                 
 
 return si;
}

- it checks if variant is of string type (VT_BSTR) and then treats it 
as a symbol,
otherwise it tries to coerce it to the 32bit integer index (this is 
because numbers passed in variant
may be floats R4, real R8, short, long integers, etc).
 
Strangely enough if you do not use explicit conversion VB puts some 
strange variant (I didn't checked it yet it is)
instead of simple string as anyone may think.
***********

- Gordon

--- In amibroker@xxxxxxxxxxxxxxx, "Email" <romadd64@xxxx> wrote:
> Gordon,
> 
> I have searched for CStr, but I haven't seen messages from Tomasz 
> about that (beyond the message on this thread).
> Can you kindly show me that message ?
> 
> Thanks, romadd64
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "Gordon" <amibroker@xxxx> wrote:
> > This is explained just a few days ago. It basically has to do 
with 
> > the fact that the collection takes a string or number as the key. 
A 
> > search in the newsgroup on CStr should get you to Tomasz' precise 
> > explanation.
> > 
> > Gordon
> > 
> > --- In amibroker@xxxxxxxxxxxxxxx, "Email" <romadd64@xxxx> wrote:
> > > Tomasz,
> > > 
> > > why we must convert the var Ticker (it is already a string 
type), 
> > to 
> > > another string via CStr ?
> > > 
> > > 
> > > 
> > > --- In amibroker@xxxxxxxxxxxxxxx, "au99991" <auttley@xxxx> 
wrote:
> > > > Tomasz,
> > > > 
> > > > Your experience is as invaluable as ever!  Many thanks.
> > > > 
> > > > Andy.
> > > > 
> > > > --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" 
> > > <amibroker@xxxx> 
> > > > wrote:
> > > > > Hello,
> > > > > 
> > > > > You have to call CStr as follows:
> > > > > 
> > > > > Set oStk = oStocks.Item( CStr( Ticker ) )   
> > > > > 
> > > > > Best regards,
> > > > > Tomasz Janeczko
> > > > > amibroker.com
> > > > > ----- Original Message ----- 
> > > > > From: "au99991" <auttley@xxxx>
> > > > > To: <amibroker@xxxxxxxxxxxxxxx>
> > > > > Sent: Saturday, August 09, 2003 1:10 PM
> > > > > Subject: [amibroker] Help with ActiveX component
> > > > > 
> > > > > 
> > > > > > I'm trying to access the Amibroker object collection from 
a 
> > VB 
> > > > > > activex function.  Please ignore what the function is 
> doing - 
> > > I'm 
> > > > > > just trying to get the basic function-calling correct.
> > > > > > 
> > > > > > The function in VB reads:
> > > > > > 
> > > > > > Public Function StockFN() As Variant
> > > > > >     
> > > > > >     Dim Ticker As String, oAB As Object, oStocks As 
Object, 
> > > oStk 
> > > > As 
> > > > > > Object
> > > > > >     
> > > > > >     Set oAB = CreateObject("Broker.Application")
> > > > > > 
> > > > > >     Ticker = oAB.ActiveDocument.Name
> > > > > > 
> > > > > >     Set oStocks = oAB.Stocks
> > > > > >     
> > > > > >     Set oStk = oStocks.Item
(Ticker)                      '!!
> > > Error 
> > > > line
> > > > > >     
> > > > > >     StockFN = oStk.Fullname
> > > > > > 
> > > > > > End Function
> > > > > > 
> > > > > > I call it in a guru commentary with the following code:
> > > > > > myAB = CreateObject("MyAB.Common");
> > > > > > myAB.StockFN();
> > > > > > 
> > > > > > This gives an 'Object variable not set error' in VB.  
> > However, 
> > > I 
> > > > know 
> > > > > > that the Ticker variable is correctly loaded and if I 
> replace 
> > > > Ticker 
> > > > > > for a hardcoded ticker value in the error line above, the 
> > > > function 
> > > > > > returns a value albeit obviously for the hardcoded ticker 
> > > value.  
> > > > > > Would much appreciate a pointer on what I'm doing wring 
as 
> > I'm 
> > > > > > getting no where!
> > > > > > 
> > > > > > Many thanks
> > > > > > 
> > > > > > Andy.
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > Send BUG REPORTS to bugs@xxxx
> > > > > > Send SUGGESTIONS to suggest@xxxx
> > > > > > -----------------------------------------
> > > > > > Post AmiQuote-related messages ONLY to: 
> > > amiquote@xxxxxxxxxxxxxxx 
> > > > > > (Web page: 
http://groups.yahoo.com/group/amiquote/messages/)
> > > > > > --------------------------------------------
> > > > > > Check group FAQ at: 
> > > > http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
> > > > > > 
> > > > > > Your use of Yahoo! Groups is subject to 
> > > > http://docs.yahoo.com/info/terms/ 
> > > > > > 
> > > > > > 
> > > > > >


------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Ink Cartridges or Refill Kits for Your HP, Epson, Canon or Lexmark
Printer at Myinks.com. Free s/h on orders $50 or more to the US & Canada. http://www.c1tracking.com/l.asp?cid=5511
http://us.click.yahoo.com/l.m7sD/LIdGAA/qnsNAA/GHeqlB/TM
---------------------------------------------------------------------~->

Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/