Sign in to follow this  
Followers 0
Vano

DllCall returns nothing for Interger functions

6 posts in this topic

#1 ·  Posted (edited)

I'm using autoit to call functions from my custom DLL.

But when calling functions that return Integers, i always get zeros.

I can actually see (in debugger) that the DLL returns integer 1 (and it gets stored in autoit's memory)

but the script keeps displaying 0's or empty strings.

I tries the same with a system DLL and got the same result!

Here's an example script:

MSGBox(0,"", DllCall("kernel32.dll", "int", "GetCurrentProcess"))
MsgBox(0,"",@error)

The same thing if i use 'long' or 'dword' or 'hwnd' instead of 'int'

Looks like is the same problem as Formatting API return result creates problems, Fixed 3.2.3.7

version 3.2.4.9

Edited by Vano

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Please post questions like this in the Supportforum first to ensure its not a pilot error :whistle:

DllCall returns an Array thus indeed will show nothing when used in a MsgBox()

Also the Second MsgBox() shos the @error generated by the first MsgBox() NOT the DllCall !

If the function call fails then @error is set to 1. Otherwise an array is returned that contains the function return value and a copy of all the parameters (including parameters that the function may have modified).

$return[0] = function return value

$return[1] = param1

$return[2] = param2

...

$return[n] = paramn

Edited by JdeB

Visit the SciTE4AutoIt3 Download page for the latest versions  - Beta files                                How to post scriptsource        Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

If the function call fails then @error is set to 1. Otherwise an array is returned that contains the function return value and a copy of all the parameters (including parameters that the function may have modified).

$return[0] = function return value

...

Dammit. I've read the article for many times but somehow missed this very paragraph :whistle:

Share this post


Link to post
Share on other sites

Dammit. I've read the article for many times but somehow missed this very paragraph :whistle:

$ret = DllCall("kernel32.dll", "int", "GetCurrentProcess")
Msgbox(0,"",$ret[0])

Returns -1

$ret = DllCall("kernel32.dll", "hwnd", "GetCurrentProcess")
Msgbox(0,"",$ret[0])

Returns a handle

Share this post


Link to post
Share on other sites

DllCall returns an Array thus indeed will show nothing when used in a MsgBox()

Also the Second MsgBox() shos the @error generated by the first MsgBox() NOT the DllCall !

That's quite strange, however. If a variable contains a non-empty value, it should also evaluate to something non-empty when converted to string.

Share this post


Link to post
Share on other sites

That's quite strange, however. If a variable contains a non-empty value, it should also evaluate to something non-empty when converted to string.

No it is not ... any array variable will return EMPTY when referred to without the [x] behind it ....

Moving this thread to Support ....

:whistle:


Visit the SciTE4AutoIt3 Download page for the latest versions  - Beta files                                How to post scriptsource        Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

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
Sign in to follow this  
Followers 0