in reply to Re^2: parsing Win32::OLE::Variant
in thread parsing Win32::OLE::Variant

You need to import the in function from Win32::OLE. Read the documentation on how to import and use in. Alternatively, you likely can call the ->Item method on your object, because most collections use that name to access their entries. Again, I can also only refer you to the documentation that the vendor provides.

Replies are listed 'Best First'.
Re^4: parsing Win32::OLE::Variant
by Anonymous Monk on Sep 26, 2008 at 18:13 UTC
    Hello: Many thanks for your quick reply. The documentation is lacking, it is written for VB/VBA and it just sort-a-kinda works.

    In VB the return is Variant/Variant(0 to 0, 0 to 2). And it behaves like a two dimension array.

    . I will import the IN function as you suggested.

    thanks for your assistance.

    KD
Re^4: parsing Win32::OLE::Variant
by Anonymous Monk on Sep 26, 2008 at 20:01 UTC
    I gave the documentation a good read through and do not have clue how to import the IN function. I am certain that the data is in $bbData but I clueless as how to get at it.

    how do you know that $bbData is a collection?

    KD

      Because collections are the usual datatype to pass around list. I think they use the ICollection interface and possibly can also be accessed through the string dispatch methods.

      I still wonder how you failed to notice the Overloading section in Win32::OLE, but maybe we have different notions of what "a good read through" means.

      Maybe if you can show us some VB code, we can give you more ideas of what to try to replicate the same behaviour in Perl. My approach is to open up Excel, press Alt-F11 to launch the VB environment, then add the OLE object I want from the menu under Tools\References, and then press F2 to browse the object model of said OLE object. This is usually available even when the documentation is bad. But maybe you want to use a different approach.

        I realize that you are being very patient with me.

        Here is some VBA code that gets the job done.

        Sub testSubscribeC() On Error GoTo Handler: Dim oBlp As BLP_DATA_CTRLLib.BlpData Dim ReqSecurities As Variant Dim ReqFields As Variant Dim vtResult As Variant Dim n As Integer Set oBlp = New BlpData ReqSecurities = Array("VDE.A Equity") ReqFields = Array("NAME", "ID_SEDOL1", "ID_CUSIP", "ID_ISIN", "ETF_UND +L_INDEX_TICKER") With oBlp .SubscriptionMode = ByRequest .Subscribe ReqSecurities, 3, ReqFields, , , vtResult End With Stop 'and look at the results in Local or Watch Window For n = 0 To UBound(vtResult, 2) Debug.Print n, vtResult(0, n) Next Handler: If Err.Number <> 0 Then MsgBox Err.Description, vbCritical End If Set oBlp = Nothing End Sub
        vtResult is two dimension array. As follows:
        2 0 VANGUARD ENERGY ETF 1 B031N66 2 92204A306 3 US92204A3068 4 MSCIEN
        so what would this look like in Perl?
        There has to be a way to get VBA out of my life.
        Many thanks.

        KD