Jump to content
ProgAndy

AutoItObject UDF

Recommended Posts

I was playing with default method of an object but I have a situation and I not sure what is wrong. What I am missing?

#include-once
#include <AutoItObject.au3>

_AutoItObject_Startup()


$obj = Obj1()
$obj.ClickMe()              ; <<-- works fine
$obj.Something.Dummy()      ; <<-- also works fine
;$obj.Something("New")    <<--- why this line fails?

$obj2 = Obj2()
$obj2("New").ClickMe()  ; <<-- and this one does not

Func Obj1()
   Local $oClass = _AutoItObject_Class()
   With $oClass
      .AddMethod("ClickMe", "__obj1_clickme")
      .AddProperty("Something", $ELSCOPE_READONLY, Obj2())
   EndWith
   Return $oClass.Object
EndFunc

Func Obj2()
   Local $oClass = _AutoItObject_Class()
   With $oClass
      .AddMethod("__default__", "__default_object2_")
      .AddMethod("Dummy", "__obj2_clickme")
      .AddProperty("Object", $ELSCOPE_READONLY, Null)
      .AddProperty("Name", $ELSCOPE_READONLY, Null)
   EndWith
   Return $oClass.Object
EndFunc

Func Obj3()
   Local $oClass = _AutoItObject_Class()
   With $oClass
      .AddMethod("ClickMe", "__obj3_clickme")
   EndWith
   Return $oClass.Object
EndFunc

Func __default_object2_($oSelf, $sName)
   #forceref $oSelf
   If $oSelf.Object = Null Then $oSelf.Object = Obj3()
   $oSelf.Name = $sName
   Return $oSelf.Object
EndFunc

Func __obj1_clickme($oSelf)
   ConsoleWrite('clickme1' & @crlf)
EndFunc

Func __obj2_clickme($oSelf)
   ConsoleWrite('clickme2' & @crlf)
EndFunc

Func __obj3_clickme($oSelf)
   ConsoleWrite('clickme3' & @crlf)
EndFunc

 


When the words fail... music speaks

Share this post


Link to post
Share on other sites

For Obj1, Something is a readonly property.  I think you'll have to make it a method.  Right?  Been awhile since I did any coding.

 

Scratch that.

Edited by jaberwacky

Share this post


Link to post
Share on other sites

Would this basically achieve the same objective?

$obj.Something.New("NewThing")

Func Obj1()
   Local $oClass = _AutoItObject_Class()
   With $oClass
      .AddMethod("ClickMe", "__obj1_clickme")
      .AddMethod("New", "__obj1_new")
      .AddProperty("Something", $ELSCOPE_READONLY, Obj2())
   EndWith
   Return $oClass.Object
EndFunc

Func __obj1_new()
    ; ... new thing stuff
EndFunc

 

Share this post


Link to post
Share on other sites

People still using AIO these days? Any new performance or stability issues? I think I'm going to convert my project to it.

I did find that it wasn't working in Windows 10 x64 (unless using the 32-bit wrapper) but I found a v1.2.8.3 fork which works :)

Edited by JonusC

Share this post


Link to post
Share on other sites

I have the following object with a property that will store an array. This script work as I expected when I call Add method but crash when I call Destroy method. Functions __add and __destroy have a very similar code I obviously I can't see where the problem is. Even if I comment the line where I redimension the array or if I create a new array when I call Destroy method the script will crash. Some ideas why? 

#include <AutoItObject.au3>
#include <Array.au3>

_AutoItObject_Startup()

$oTest = Test()
$oTest.Add('Test1')
$aObjects = $oTest.Objects
_ArrayDisplay($aObjects)
$oTest.Add('Test2')
$aObjects = $oTest.Objects
_ArrayDisplay($aObjects)
$oTest.Destroy

Func Test()
    Local $aObjects[1]
    $oTest = _AutoItObject_Class()
    With $oTest
        .AddMethod('Destroy','__destory')
        .AddMethod('Add','__add')
        .AddProperty('Objects', $ELSCOPE_PUBLIC, $aObjects)
    EndWith
    Return $oTest.Object
EndFunc

Func __add($oThis, $Name)
    Local $aObjects = $oThis.Objects
    _ArrayAdd($aObjects,$Name)
    $oThis.Objects = $aObjects
EndFunc

Func __destroy($oThis)
    Local $aObjects = $oThis.Objects
    ReDim $aObjects[1]
    $oThis.Objects = $aObjects
EndFunc

 


When the words fail... music speaks

Share this post


Link to post
Share on other sites

It's always a good idea to post all error messages you get ;)


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-07-21 - Version 1.5.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites

The requested action with this object has failed.:
$oTest.Destroy
$oTest^ ERROR

 

Edit: I see where the problem is, a typo in function name :blink:

Edited by Andreik

When the words fail... music speaks

Share this post


Link to post
Share on other sites

I suggest to add a COM error handler. This gives us more detailed error information.
An example can be found in the help file for ObjEvent.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-07-21 - Version 1.5.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites

I know, but in this case the handler gave me same error so I didn't included in my posted script for a better read.


When the words fail... music speaks

Share this post


Link to post
Share on other sites

I see :)


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-07-21 - Version 1.5.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites

Andreik already noticed on 23th of May what caused th problem ;)

Quote

Edit: I see where the problem is, a typo in function name :blink:

 


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-07-21 - Version 1.5.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites

Can someone point me in the right direction?

I've just stumbled upon AutoIt Object when looking for a way to take full webpage screenshots.  The solution I found has AutoIt Object as a pre-requisite.

However, I'm struggling to find a way in.  I've got the AutoItObject.au3 file in the include folder but I can't find any instructions on what other files from the download package go where.  The screenshot code is currently failing to compile with _AutoItObject_WarpInterface(): undefined function.

Any pointers on where to look for guidance on how to install would be appreciated

Share this post


Link to post
Share on other sites
Posted (edited)

I don't know if this function is included in AutoItObject UDF but this is what are you looking for, just add it in your script:

Func _AutoItObject_WarpInterface($Obj, $IID, $Tag, $fNoUnknown = False)
    If Not IsDllStruct($IID) Then $IID = _AutoItObject_CLSIDFromString($IID)

    If Not IsObj($Obj) Then Return SetError(1, 0, 0)

    Local $pObj = _AutoItObject_IDispatchToPtr($Obj)
    If Not _AutoItObject_IUnknownAddRef($Obj) Then Return SetError(1, 0, 0)
    Local $ObjWarpped = _AutoItObject_WrapperCreate($pObj, $dtagIUnknown, $fNoUnknown)
    Local $aCall = $ObjWarpped.QueryInterface(Number(DllStructGetPtr($IID)), 0)
    If Not IsArray($aCall) And $aCall[0] <> 0 Then Return SetError(1, 0, 0)

    Local $pInterface = $aCall[2]
    Return _AutoItObject_WrapperCreate($pInterface, $Tag)
EndFunc   ;==>_AutoItObject_WarpInterface

 

Edited by Andreik

When the words fail... music speaks

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

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...