Jump to content



Photo

COM access to Engineering application


  • Please log in to reply
22 replies to this topic

#1 faiz

faiz

    Seeker

  • Active Members
  • 11 posts

Posted 17 May 2012 - 09:03 PM

Hi,

I am trying out AutoIt to access a program called Pipesim. According to the authors:

"PIPESIM has been designed with "Openness" in mind. Therefore key modules can be "driven" from 3rd party applications, for example, Microsoft Excel, VB, C++, and so on."

one of the calls/commands i make is .GetNameList ()

From the documentation of Pipesim:

GetNameList (ObjectType As Long, pNameArray, Count As Long)

OLE/COM Object viewer gives this information about this method:


void GetNameList(
[in] long ObjectType,
[out] VARIANT* pNameArray,
[out] long* Count);

My AutoIt script uses this as : $p.GetNameList(7, $list, $count)

$list returns are an array with index 0 to 26 (matches the $count with returns 27). Elements $list[1] to [26] do contains the proper string values (e.g. 'RB-136H') but element [0] contains a left pointing arrow (seems to be line feed since when I copied it from the output of ConsoleWrite and pasted it here it takes me to a new line with no visible character).

Another Get method ( for which OLE/COM Object viewer says ):

VARIANT_BOOL GetPropertyStringAtObjectIndex(
[in] BSTR ObjectName,
[in] BSTR ParentName,
[in] BSTR PropName,
[out] BSTR* pValue,
[in] long Index);

It returns pValue with a value of '??\'

Are these limitations of AutoIt w.r.t. COM or am I doing something wrong?

Thanks for any insight into this. This will really decide if we adopt AutoIt as our chosen scripting solution of choice. It has given us an extremely good impression otherwise. The functions work fine with Excel/VBA but have problems with VBScript.

Regards,
Faiz





#2 water

water

    ?

  • MVPs
  • 10,616 posts

Posted 20 May 2012 - 09:15 AM

I think $list[0] has a different data type. Is the data you get in elements $list[1] to [26] complete or is there some data missing?
You could try to determine the datatype of element $list[0] by using the following functions:
ConsoleWrite("IsArray: " & IsArray($list[0]) & @CRLF) ConsoleWrite("IsObj: " & IsObj($list[0]) & @CRLF) ConsoleWrite("IsPtr: " & IsPtr($list[0]) & @CRLF)

Edited by water, 20 May 2012 - 09:15 AM.

UDFs:

Active Directory (2012-10-12 - Version 1.3.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

OutlookEX (2012-10-07 - Version 0.9.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

ExcelChart (2013-01-21 - Version 0.3.1.1 released) - Download - General Help & Support - Example Scripts

WordEX (2012-12-29 - Version 1.3 released) - Download

ExcelEX (2013-05-11 - Alpha 4 released) - Download


#3 faiz

faiz

    Seeker

  • Active Members
  • 11 posts

Posted 21 June 2012 - 08:23 AM

water: thanks for replying. Sorry for coming back so late. :-(

I "ConsoleWrite" the count, the value of each element and then the code you suggested and get this:

count = 27
list(0) 
list(1) RB-136H
list(2) RB-104V
list(3) RB-138H
list(4) RB-154H
list(5) RB-266H
list(6) RB-265V
list(7) RB-267H
list(8) RB-268H
list(9) RB-208H
list(10) RB-93H
list(11) RB-17V
list(12) RB-209H
list(13) RB-210H
list(14) RB-225H
list(15) RB-233V
list(16) RB-226HST
list(17) RB-307H
list(18) RB-308H
list(19) RB-207H
list(20) RB-202H
list(21) RB-92V
list(22) RB-311HST
list(23) RB-115
list(24) RB-84V
list(25) RB-309H
list(26) RB-203H
IsArray: 0
IsObj: 0
IsPtr: 0

I the data from elements $list[1] to [26] is correct but I am missing the first data (which I expected to be in [0]). Thanks for any pointers/help. Really appreciate it.

#4 faiz

faiz

    Seeker

  • Active Members
  • 11 posts

Posted 21 June 2012 - 08:28 AM

The list gave a character that looks like a left pointing arrow but what I copied from my console output and pasted it into this post it was (is) not visible.

I then also tried:

ConsoleWrite("VarType: " & VarGetType($list[0]) & @CRLF)

and got:

VarType: String

Edited by faiz, 21 June 2012 - 08:33 AM.


#5 water

water

    ?

  • MVPs
  • 10,616 posts

Posted 21 June 2012 - 08:40 AM

← (left arrow) is the character representation for 27. So it's the number of elements in the array. So the array seems to be a one-based array having the number of elements in element[0] and starting data with element[1].
What do you get if you access elements 27 and 28 of your array?
ConsoleWrite($list[27]) & @CRLF) ; Should give you a correct output ConsoleWrite($list[28]) & @CRLF) ; Should return an error

UDFs:

Active Directory (2012-10-12 - Version 1.3.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

OutlookEX (2012-10-07 - Version 0.9.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

ExcelChart (2013-01-21 - Version 0.3.1.1 released) - Download - General Help & Support - Example Scripts

WordEX (2012-12-29 - Version 1.3 released) - Download

ExcelEX (2013-05-11 - Alpha 4 released) - Download


#6 faiz

faiz

    Seeker

  • Active Members
  • 11 posts

Posted 21 June 2012 - 01:27 PM

Hi! Earlier I tried to run the loop from 0 to $count instead of $count - 1. It returned an error.

After your suggestion I get :

ConsoleWrite("27" & $list[27] & @CRLF)
ConsoleWrite("27" & ^ ERROR

Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.

#7 water

water

    ?

  • MVPs
  • 10,616 posts

Posted 21 June 2012 - 01:38 PM

Strange ;)
Element[0] contains the number of returned records = 27. They would be stored in Element[1] to Element[27]. But you can only access up to Element[26].
Could you query another object type (now you query type 7) so we can see what changes?

UDFs:

Active Directory (2012-10-12 - Version 1.3.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

OutlookEX (2012-10-07 - Version 0.9.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

ExcelChart (2013-01-21 - Version 0.3.1.1 released) - Download - General Help & Support - Example Scripts

WordEX (2012-12-29 - Version 1.3 released) - Download

ExcelEX (2013-05-11 - Alpha 4 released) - Download


#8 water

water

    ?

  • MVPs
  • 10,616 posts

Posted 21 June 2012 - 01:54 PM

My AutoIt script uses this as : $p.GetNameList(7, $list, $count)

How do you create $p?
Like this?
; Declare Network Model Object $NetModel = CreateObject("NET32COM.INETMODEL") ; Load model into Object $NetModel.OpenModel($ModelInput)

Edited by water, 21 June 2012 - 02:21 PM.

UDFs:

Active Directory (2012-10-12 - Version 1.3.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

OutlookEX (2012-10-07 - Version 0.9.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

ExcelChart (2013-01-21 - Version 0.3.1.1 released) - Download - General Help & Support - Example Scripts

WordEX (2012-12-29 - Version 1.3 released) - Download

ExcelEX (2013-05-11 - Alpha 4 released) - Download


#9 faiz

faiz

    Seeker

  • Active Members
  • 11 posts

Posted 21 June 2012 - 03:30 PM

Dim $m, $list, $count $m = "e:....trunk.bpn" $p = ObjCreate("Net32COM.INetModel") $p.OpenModel($m) $p.GetNameList(7, $list, $count) ConsoleWrite("count = " & $count & @LF) for $i = 0 to $count - 1 ConsoleWrite("list(" & $i & ") " & $list[$i] & @LF) next ConsoleWrite("IsArray: " & IsArray($list[0]) & @CRLF) ConsoleWrite("IsObj: " & IsObj($list[0]) & @CRLF) ConsoleWrite("IsPtr: " & IsPtr($list[0]) & @CRLF) ConsoleWrite("VarType: " & VarGetType($list[0]) & @CRLF) ConsoleWrite("27" & $list[27] & @CRLF) ; Should give you a correct output ConsoleWrite("28" & $list[28] & @CRLF) ; Should return an error
COmplete code is like this:

Edited by faiz, 21 June 2012 - 03:31 PM.


#10 water

water

    ?

  • MVPs
  • 10,616 posts

Posted 21 June 2012 - 05:37 PM

One thing to try. When you define $list as you do now it is just a string. Let's define it as an array and see what happens:
Global $m, $list[100], $count $m = "e:....trunk.bpn" $p = ObjCreate("Net32COM.INetModel") ConsoleWrite(@error & @CRLF) $p.OpenModel($m) ConsoleWrite(@error & @CRLF) $p.GetNameList(7, $list, $count) ConsoleWrite(@error & @CRLF) ConsoleWrite("count = " & $count & @LF) for $i = 0 to $count - 1     ConsoleWrite("list(" & $i & ") " & $list[$i] & @LF) next

UDFs:

Active Directory (2012-10-12 - Version 1.3.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

OutlookEX (2012-10-07 - Version 0.9.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

ExcelChart (2013-01-21 - Version 0.3.1.1 released) - Download - General Help & Support - Example Scripts

WordEX (2012-12-29 - Version 1.3 released) - Download

ExcelEX (2013-05-11 - Alpha 4 released) - Download


#11 faiz

faiz

    Seeker

  • Active Members
  • 11 posts

Posted 21 June 2012 - 09:34 PM

Error Subscript used with non-Array variable (in the ConsoleWrite line in the for loop)

#12 water

water

    ?

  • MVPs
  • 10,616 posts

Posted 22 June 2012 - 05:42 AM

And what's the output of all the ConsoleWrites?

UDFs:

Active Directory (2012-10-12 - Version 1.3.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

OutlookEX (2012-10-07 - Version 0.9.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

ExcelChart (2013-01-21 - Version 0.3.1.1 released) - Download - General Help & Support - Example Scripts

WordEX (2012-12-29 - Version 1.3 released) - Download

ExcelEX (2013-05-11 - Alpha 4 released) - Download


#13 water

water

    ?

  • MVPs
  • 10,616 posts

Posted 22 June 2012 - 06:16 AM

Another idea: When searching the Web I found the following VB script. If you get this running then it is an AutoIt problem else I think it could be a Pipesim bug.
In this PDF you can find another (larger) example.

Edited by water, 22 June 2012 - 06:18 AM.

UDFs:

Active Directory (2012-10-12 - Version 1.3.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

OutlookEX (2012-10-07 - Version 0.9.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

ExcelChart (2013-01-21 - Version 0.3.1.1 released) - Download - General Help & Support - Example Scripts

WordEX (2012-12-29 - Version 1.3 released) - Download

ExcelEX (2013-05-11 - Alpha 4 released) - Download


#14 faiz

faiz

    Seeker

  • Active Members
  • 11 posts

Posted 22 June 2012 - 11:39 AM

To your earlier question: there is no output (except the count output before the loop) since it hits the error.

The VB Script & PDF are part of my history with this. The PDF contains Excel/VBA example, and it works for me too. In fact that is the solution we used and I left this forum for over a month!

The VB Script is from a colleague and it does not work. This triggered an interest in an alternative and I googled and found AutoIt! AutoIt was better than VBScript since gave a Type Mismatch on the call which AutoIt does execute it and return everything, except the first element of the list.

I suspect it is the way arguments are handled in AutoIt specially when using with calls to COM objects. I can get some insight from an expert like you.

#15 water

water

    ?

  • MVPs
  • 10,616 posts

Posted 22 June 2012 - 11:45 AM

I forgot to ask. Which version of AutoIt do you use? Could you please run this line of code?Unfortunately I'm not very familiar with VBA and the AutoIt data structures. So I'm slowly running out of ideas ;)

Edited by water, 22 June 2012 - 11:46 AM.

UDFs:

Active Directory (2012-10-12 - Version 1.3.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

OutlookEX (2012-10-07 - Version 0.9.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

ExcelChart (2013-01-21 - Version 0.3.1.1 released) - Download - General Help & Support - Example Scripts

WordEX (2012-12-29 - Version 1.3 released) - Download

ExcelEX (2013-05-11 - Alpha 4 released) - Download


#16 faiz

faiz

    Seeker

  • Active Members
  • 11 posts

Posted 22 June 2012 - 11:50 AM

3.3.8.1

Actually just mow i was going to see if there is a new version...

#17 water

water

    ?

  • MVPs
  • 10,616 posts

Posted 22 June 2012 - 11:56 AM

There is a new beta (3.3.9.4) available here.

UDFs:

Active Directory (2012-10-12 - Version 1.3.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

OutlookEX (2012-10-07 - Version 0.9.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

ExcelChart (2013-01-21 - Version 0.3.1.1 released) - Download - General Help & Support - Example Scripts

WordEX (2012-12-29 - Version 1.3 released) - Download

ExcelEX (2013-05-11 - Alpha 4 released) - Download


#18 faiz

faiz

    Seeker

  • Active Members
  • 11 posts

Posted 22 June 2012 - 01:47 PM

SAme result. :-(

#19 water

water

    ?

  • MVPs
  • 10,616 posts

Posted 22 June 2012 - 01:52 PM

The code you posted misses a COM error handler. Let's try this:
AutoIt         
Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc") Global $m, $list[100], $count $m = "e:....trunk.bpn" $p = ObjCreate("Net32COM.INetModel") $p.OpenModel($m) $p.GetNameList(7, $list, $count) ConsoleWrite("count = " & $count & @LF) For $i = 0 to $count - 1     ConsoleWrite("list(" & $i & ") " & $list[$i] & @LF) Next ConsoleWrite("27" & $list[27] & @CRLF) ; Should give you a correct output Exit Func _ErrFunc($oError)     ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _     "err.windescription:" & @TAB & $oError.windescription & @CRLF & _     "err.description is: " & @TAB & $oError.description & @CRLF & _     "err.source is: " & @TAB & $oError.source & @CRLF & _     "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _     "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _     "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _     "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _     "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF) EndFunc ;==>_ErrFunc

Edited by water, 22 June 2012 - 01:54 PM.

UDFs:

Active Directory (2012-10-12 - Version 1.3.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

OutlookEX (2012-10-07 - Version 0.9.0.0 released) - Download - General Help & Support - Example Scripts - Wiki

ExcelChart (2013-01-21 - Version 0.3.1.1 released) - Download - General Help & Support - Example Scripts

WordEX (2012-12-29 - Version 1.3 released) - Download

ExcelEX (2013-05-11 - Alpha 4 released) - Download


#20 faiz

faiz

    Seeker

  • Active Members
  • 11 posts

Posted 22 June 2012 - 02:34 PM

I do not get any error reporting. Only the same error as before when the code refers to $list[27]




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users