Sign in to follow this  
Followers 0

HELP ActiveX/COM DLL method works in VB but not Autoit

3 posts in this topic

#1 ·  Posted

I am able to use other methods etc for the following DLL using AutoIT, but 1 specific method creates the following error- (using autoit v3.3.6.1)

; Piece of applicable code---NOT ALL CODE

; Setup model input output arrays per model - 
; CH wants inarray(1..numrows, 1..NumInputs), outarray(1..numrows, 1..3)
;
Local $InArr[$NumRows +1 ][$ch.NumInputs +1]        ; +1 necc, cause COM DLL ignores 0. 
;YES $ch.NumInputs is properly filled as int by a call to the COM DLL 

Local $OutArr[$NumRows +1 ][3 +1 ]          ; Always 3 on 2nd dimension, per CH documentaion 
Local $price[$NumRows]

;$InArr[1][0]= 51.39
$InArr[1][1]= 51.39
$InArr[1][2]= 51.26
$InArr[1][3]= 51.37
$InArr[1][4]= 2938964

_ArrayDisplay($InArr)
_ArrayDisplay($OutArr)
_ArrayDisplay($price)

; Call Prediction model But ensure enough data present in data file

$ret = $ch.Predict($NumRows, $InArr, $OutArr)

If $ret <> 0 Then
    ConsoleWriteError("ERROR: OpenModel returned: " & $ret)
    Exit
EndIf

_ArrayDisplay($OutArr)

Error output from SCite

C:\Users\khan\CODE\CHwrapper.au3 (62) : ==> The requested action with this object has failed.:
$ret = $ch.Predict($NumRows, $InArr, $OutArr)
$ret = $ch.Predict($NumRows, $InArr, $OutArr)^ ERROR
>Exit code: 1    Time: 4.779

Interestingly the same type of error occurs when i use $ret = $ch.Predict()! (that is no agrs given)

Yet it works w/ no problem using the following code in VB 2010-

'Piece of applicable code---NOT ALL CODE

Dim inar(,) As Object
        Dim outar(,) As Object
        Dim price() As Object
        Dim objname As String
        Dim strStartupArguments(), mdfile As String
        Dim i, ret, intCount, numinputs, numrows As Integer

        numrows = 1


numinputs = model.numinputs

        ReDim inar(numrows, numinputs)

        'the output array always has 3 columns
        ReDim outar(numrows, 3)
        

        strStartupArguments = System.Environment.GetCommandLineArgs

        'Skip 0th cause its the name of program
        For intCount = 1 To UBound(strStartupArguments)

            'Select Case strStartupArguments(intCount).ToLower

            'Case "-arg1"
            'Do your code for the arg1 argument
            'Console.WriteLine(strStartupArguments(intCount))

            inar(1, intCount) = strStartupArguments(intCount)

            Console.WriteLine(inar(1, intCount))

            'End Select
        Next


        'Apply the model
        'ret = model.Predict(1, inar, outar, price)
        'Not a trading strategy model

        ReDim price(numrows)
        'Apply the model
        ret = model.Predict(numrows, inar, outar) ', price)

        'Outar contains the following:
        'column 1: raw formula output
        'column 2: trade signals (0=no signal, 1=enter long, -1=enter short)
        'column 3: equity curve

        'if col 1 return = model.MissingValue, means could not be computed. E.g. SMA(X), doesnt have X vals yet!

        If outar(numrows, 1) = model.MissingValue Then
            Console.WriteLine("Model Returning = Missing Value, E.g x data point missing for sma(x) not computing")
        End If

    End Sub

End Module

I've looked at VB debugger info and all the arrays seems the same going in (for autoit and VB), pls help been banging my head against this wall for 24+ hours now! I would hate to end up using VB2010 at this point.

Share this post


Link to post
Share on other sites



#2 ·  Posted

btw used OLE/COM Browser(OLEview.exe) and here's what it says about this method-

[id(0x6003000e)]
VARIANT Predict(
                [in, out] VARIANT* numrows, 
                [in, out] VARIANT* inar, 
                [in, out] VARIANT* outar, 
                [in, out, optional] VARIANT* price);

Share this post


Link to post
Share on other sites

#3 ·  Posted

Why are you adding 1 to each array dimention in AutoIT and not VBScript?


There's no place like ~/

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0