Jump to content

Why array variable do not work with _IEQuit?


Recommended Posts

Referring to following coding, I would like to know on why array variable do not work with _IEQuit.

#include <IE.au3>
Local $Item_No_max = 2
Local $aOIE[$Item_No_max + 1]; Create
For $Item_No = 1 to $Item_No_max
   Local $aOIE[$Item_No] = _IECreate("http://www.google.com")
   Sleep(5000)
   _IEQuit($aOIE[$Item_No])
Next

OIE.png

Does anyone have any suggestions?
Thanks in advance for any suggestions

 

 

Edited by oemript
Link to comment
Share on other sites

I would like to know on what difference is on following 2 cases, both works well without any problem


Case 1

Local $oIE1 = _IECreate("http://www.google.com")
Sleep(5000)
_IEQuit($OIE1)

Case 2

$oIE2 = _IECreate("http://www.google.com")
Sleep(5000)
_IEQuit($OIE2)

Do you have any suggestions?
Thank you very much for any suggestions (^v^)

Link to comment
Share on other sites

First example: local creates the variable called $oIE1, then the bit after the = assigns its value

The second example does the same thing, (but called $oIE2) if the variable isn't already created then AutoIT automatically creates it.
AutoIT sees the code $oIE2, and sees there isn't a variable with that name yet, so it goes ahead and makes a new variable called $oIE2

dim global and local all create variables or arrays of variables.
This page explains it in further detail: https://www.autoitscript.com/autoit3/docs/keywords/Dim.htm

The problem with your first post's code is that you already made the array $aOIE
you then tried to declare an array called $aOIE with the size of [$Item_No

If you want to recreate/resize your array (which I don't think is what you were trying to do)
you can use redim (https://www.autoitscript.com/autoit3/docs/keywords/ReDim.htm)

To help understand this concept better,
If you use

Opt("MustDeclareVars",1)

at the start of your script, you will be forced to declare every variable you use (similar to some other programming languages)
you will then better appreciate the use of dim/global/local.

Link to comment
Share on other sites

Its best practice not to use Dim when declaring variables, but use Local or Global.  Below is a basic explanation of how variables are viewed with AutoIt.

;~ This following three variables are all within the Global scope range aka able to be seen by all functions
Global $sVariable = "String"
$hVariable = WinGetHandle("title", "text")
;~ Declaring Local Variable in Global scope would also be treated like a Global variable
Local $iVariable = 1

Func _Example()
    ;~ The following example is within the Local scope range aka only able to be seen by the "Example" function
    Local $aVariable[1] = ["Array"]
    $bVariable = True
    ;~ NOTE: It is best practice not declare Global variables within functions
EndFunc

 

Link to comment
Share on other sites

@oemript using your opening example I get from Au3Check this following errors:

Quote

>"Z:\AutoItPortable\App\SciTE\..\AutoIt3.exe" "Z:\AutoItPortable\App\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3" /UserParams    
+>10:58:21 Starting AutoIt3Wrapper v.17.224.935.11 SciTE v.4.0.2.0   Keyboard:00000415  OS:WIN_10/  CPU:X64 OS:X64  Environment(Language:0415)  CodePage:65001  utf8.auto.check:4
+>         SciTEDir => Z:\AutoItPortable\App\SciTE   UserDir => Z:\AutoItPortable\App\SciTE\AutoIt3Wrapper
>Running AU3Check (3.3.15.1)  from:Z:\AutoItPortable\App  input:Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3
"Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3"(5,28) : error: syntax error
   Local $aOIE[$Item_No] = _IECreate

~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3"(5,28) : error: Statement cannot be just an expression.
   Local $aOIE[$Item_No] = _IECreate

~~~~~~~~~~~~~~~~~~~~~~~~~~~^
Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3 - 2 error(s), 0 warning(s)
!>10:58:21 AU3Check ended. Press F4 to jump to next error.rc:2
+>10:58:21 AutoIt3Wrapper Finished.
>Exit code: 2    Time: 1.194
 

When I run it without AutoItWrapper then I get:

Quote

Line 7  (File "Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3"):

_IEQuit($aOIE[$Item_No])
_IEQuit(^ ERROR

Error: Expected a variable in user function call.
 

As few members said, you should not decalare variables inside loop.
But the main problem in this case is that you do not understand the difference between declaring and assigning variables.

This is declaration of variable

Local $aOIE[$Item_No]

This is declaration with assigment - wrong assigment (syntax error)

Local $aOIE[$Item_No] = _IECreate("http://www.google.com")

Here is first example with declaration and proper assigment:

Local $aOIE[$Item_No] = [Null, Null]

Here is second example with declaration and proper assigment:

Local $iArraySize = 3
Local $aSomeArray[$iArraySize] = [0, 1, 2]

Here is third example with declaration and "almost proper" assigment:

Local $aOIE[$Item_No] = [_IECreate("http://www.google.com"), _IECreate("http://www.autoitscript.com")]

 

Your example should work and look like this:

#include <IE.au3>
_Example()

Func _Example()
    Local $Item_No_max = 2
    Local $aOIE[$Item_No_max + 1] ; Create
    For $Item_No = 1 To $Item_No_max
;~      Local $aOIE[$Item_No] = _IECreate("http://www.google.com")
        $aOIE[$Item_No] = _IECreate("http://www.google.com")
        Sleep(5000)
    Next

    For $Item_No = 1 To $Item_No_max
        _IEQuit($aOIE[$Item_No])
    Next
EndFunc   ;==>_Example

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library * Include Dependency Tree (Tool for analyzing script relations) * Show_Macro_Values.au3 *

 

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) * PDF Related:How to get reference to PDF object embeded in IE * IE on Windows 11

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

I also encourage you to check awesome @trancexx code:  * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuffOnHungApp handlerAvoid "AutoIt Error" message box in unknown errors  * HTML editor

winhttp.au3 related : * https://www.autoitscript.com/forum/topic/206771-winhttpau3-download-problem-youre-speaking-plain-http-to-an-ssl-enabled-server-port/

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2023-04-24

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...