1. Bernhard Stoeter
  2. PowerBuilder
  3. Monday, 18 December 2017 12:30 PM UTC

Hey,
I'm using PowerBuilder 2017, Build 1681, OS Win8.1 and Win10.

I like to call the WinApi function MonitorFromPoint (user32.ddl)
which is defined as:
// Definition in Windows SDK, WinUser.h
WINUSERAPI HMONITOR WINAPI MonitorFromPoint(__in POINT pt,__in DWORD dwFlags);
So I declared a local external function:
function ulong MonitorFromPoint( str_point pt, ulong dwFlags ) library "user32.dll" alias for "MonitorFromPoint"

str_point is defined as:
global type str_point from structure
    long        cx
    long        cy
end type

If I use this code in the open event of a window:
constant ulong        MONITOR_DEFAULTTONEAREST = 2    //    0x00000002

str_point    lstr_Point
ulong            lul_hMonitor

lstr_Point.cx = this.X
lstr_Point.cy = this.Y
lul_hMonitor = MonitorFromPoint( lstr_Point, MONITOR_DEFAULTTONEAREST )

the application crashed with:
PowerBuilder application execution error (R0042):
Error: Specified argument type differs from required argument type
at runtime in DDL function monitorfrompoint.
(invalid stack pointer on return from function call) at line ...
in open event of object w_...

Altering the local external function definition to:
function ulong MonitorFromPoint( long ptx, long pty, ulong dwFlags ) library "user32.dll" alias for "MonitorFromPoint"
which is technically identical (12 bytes, long, long, ulong) and adjust my code to:
lstr_Point.cx = this.X
lstr_Point.cy = this.Y
lul_hMonitor = MonitorFromPoint( lstr_Point.cx, lstr_Point.cy, MONITOR_DEFAULTTONEAREST )
everything works as expected.

What am I missing?

Kind regards
Bernhard

Roland Smith Accepted Answer Pending Moderation
  1. Monday, 18 December 2017 20:12 PM UTC
  2. PowerBuilder
  3. # 1

It appears that the Microsoft documentation is either wrong or misleading. There are three arguments: long x, long y, long dwflags. You don't need the POINT structure. Do a web search for VB6 examples using the function.

 

Comment
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.
We use cookies which are necessary for the proper functioning of our websites. We also use cookies to analyze our traffic, improve your experience and provide social media features. If you continue to use this site, you consent to our use of cookies.