Sign in to follow this  
Followers 0
supersonic

How to create "just" an object like in VB?

11 posts in this topic

Hi!

I'm trying to convert VB functions (using .NET "System.Collections.ArrayList [binarySearch]") into AU3.

In VB you can simply create an object like this:

Dim myObjectOdd As Object = 3

Is there a way to achieve this in AU3?

Greets,

-supersonic.

Share this post


Link to post
Share on other sites



In AutoIt this seems not to be needed.

Just define the variable using "Global $myObjectOdd". Then use ObjCreate to create the object and assign it to the variable.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

You can think of all AutoIt variables as being the same thing as object in .Net.

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

Hi,

currently I have no luck at all... :)

When running the following code:

Local $oArrayList = ObjCreate("System.Collections.ArrayList")

$oArrayList.Add("test1")
$oArrayList.Add("test2")
$oArrayList.Add("test3")

Local $iTmp = 1

MsgBox(0, "", $oArrayList.BinarySearch($iTmp))

the following message returns:

D:\TEMP\test.au3 (9) : ==> The requested action with this object has failed.:

MsgBox(0, "", $oArrayList.BinarySearch($iTmp))

MsgBox(0, "", $oArrayList.BinarySearch($iTmp)^ ERROR

Regarding to http://msdn.microsoft.com/en-us/library/aa317752(v=vs.71).aspx

the variable "$iTmp" has to be an object...

Any ideas?

Greets,

-supersonic.

Edited by supersonic

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

If I use

Local $oArrayList = ObjCreate("System.Collections.ArrayList")
$oArrayList.Add("test1")
$oArrayList.Add("test2")
$oArrayList.Add("test3")
$Result = $oArrayList.Contains("test2")
ConsoleWrite($Result & @CRLF)
it works.

Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Object is a super class. Every other type can be put in an object variable.

Share this post


Link to post
Share on other sites

Hi water,

yes, ".Contains" works well, I know.

I'm trying to use ".BinarySearch" for a partial search.

Any ideas?

Greets,

-supersonic.

Share this post


Link to post
Share on other sites

Any ideas?

Unfortunately: no.

Both methods require an object. "Contains" works, "BinarySearch" does not.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

I just looked at the documents for ArrayList.BinarySearch and my guess is that it is throwing an InvalidOperationException because you have a type mismatch. You are putting strings into the list but then searching for an integer.

If you convert it to a string first, it may work fine.

Edited by Richard Robertson

Share this post


Link to post
Share on other sites

I tried this without luck:

Local $oArrayList = ObjCreate("System.Collections.ArrayList")

$oArrayList.Add("test1")
$oArrayList.Add("test2")
$oArrayList.Add("test3")

Local $result = $oArrayList.BinarySearch("test1")

MsgBox(0, "", $result)

Share this post


Link to post
Share on other sites

$oMyError = ObjEvent("AutoIt.Error","MyErrFunc")    ; Initialize a COM error handler

Local $oArrayList = ObjCreate("System.Collections.ArrayList")

$oArrayList.Add("test1")
$oArrayList.Add("test2")
$oArrayList.Add("test3")

Local $result = $oArrayList.BinarySearch("test1")

MsgBox(0, "", $result)

; This is my custom defined error handler
Func MyErrFunc()

  Msgbox(0,"AutoItCOM Test","We intercepted a COM Error !"      & @CRLF  & @CRLF & _
             "err.description is: "    & @TAB & $oMyError.description    & @CRLF & _
             "err.windescription:"     & @TAB & $oMyError.windescription & @CRLF & _
             "err.number is: "         & @TAB & hex($oMyError.number,8)  & @CRLF & _
             "err.lastdllerror is: "   & @TAB & $oMyError.lastdllerror   & @CRLF & _
             "err.scriptline is: "     & @TAB & $oMyError.scriptline     & @CRLF & _
             "err.source is: "         & @TAB & $oMyError.source         & @CRLF & _
             "err.helpfile is: "       & @TAB & $oMyError.helpfile       & @CRLF & _
             "err.helpcontext is: "    & @TAB & $oMyError.helpcontext _
            )
            
    Local $err = $oMyError.number
    If $err = 0 Then $err = -1
    
    $g_eventerror = $err  ; to check for after this function returns
Endfunc

BinarySearch throws 2 exceptions: InvalidOperationException where "value is not of the same type as the elements of the ArrayList." which happens if you search 123. OR ArgumentException where the values do not implement IComparable interface. I'm guessing, considering the error, that's the case.

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