Jump to content

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


Recommended Posts

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.

Link to comment
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 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
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 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

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
Link to comment
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)
Link to comment
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.

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...