supersonic Posted March 3, 2011 Share Posted March 3, 2011 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 More sharing options...
water Posted March 3, 2011 Share Posted March 3, 2011 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 More sharing options...
Richard Robertson Posted March 3, 2011 Share Posted March 3, 2011 You can think of all AutoIt variables as being the same thing as object in .Net. Link to comment Share on other sites More sharing options...
supersonic Posted March 3, 2011 Author Share Posted March 3, 2011 (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 March 3, 2011 by supersonic Link to comment Share on other sites More sharing options...
water Posted March 3, 2011 Share Posted March 3, 2011 (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 March 4, 2011 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 More sharing options...
Richard Robertson Posted March 3, 2011 Share Posted March 3, 2011 Object is a super class. Every other type can be put in an object variable. Link to comment Share on other sites More sharing options...
supersonic Posted March 4, 2011 Author Share Posted March 4, 2011 Hi water, yes, ".Contains" works well, I know. I'm trying to use ".BinarySearch" for a partial search. Any ideas? Greets, -supersonic. Link to comment Share on other sites More sharing options...
water Posted March 4, 2011 Share Posted March 4, 2011 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 More sharing options...
Richard Robertson Posted March 4, 2011 Share Posted March 4, 2011 (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 March 4, 2011 by Richard Robertson Link to comment Share on other sites More sharing options...
supersonic Posted March 7, 2011 Author Share Posted March 7, 2011 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 More sharing options...
jvanegmond Posted March 7, 2011 Share Posted March 7, 2011 $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. github.com/jvanegmond Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now