Problem with Extern

BlitzMax Forums/BlitzMax Programming/Problem with Extern

Grey Alien(Posted 2006) [#1]
Sorry to ask so many questions, but everyone is totally helpful which rocks! Hopefully I'll be able to give more back later, like I did with Blitz PLus.

Anyway ... consider this test code:

Type TPoint
	Field X
	Field Y
End Type

Extern "win32"
	Function GetCursorPos%(point:TPoint) 
End Extern

Function ccGetCursorPos:TPoint()
	'Returns a TPoint
	Local point:TPoint = New TPoint
	If Not GetCursorPos(point) Then
    	RuntimeError ("Error Getting Cursor Pos")	
		Return Null
	Else
		Return point
	EndIf
End Function

Graphics 800,600,0

Repeat
	
	Cls
	Local point:Tpoint = ccGetCursorPos()		
	Flip

Until KeyHit(KEY_ESCAPE)


When I run it the BlitzMax output window fills up with error messages like this:

bad refs:obj=$10bbb40 refs=$1d1

Now this function used to work in BlitzPlus, I used this in the user32.decls file:

User32_GetCursorPos%(lpPoint*):"GetCursorPos"

note that lpPoint is a pointer to TPoint. I tried using var in Max like this:

	Function GetCursorPos%(var point:TPoint) 

but it won't compile.

Any ideas where I'm going wrong? I jsut want to pass a Tpoint to the windows function and have it filled out by the windows function, simple really.


Yan(Posted 2006) [#2]
Type TPoint
	Field X
	Field Y
End Type

Extern "win32"
	Function GetCursorPos%(point:Byte Ptr)'The API is expecting a byte ptr 
End Extern

Function ccGetCursorPos:TPoint()
	'Returns a TPoint
	Local point:TPoint = New TPoint
	If Not GetCursorPos(point) Then
    	RuntimeError ("Error Getting Cursor Pos")	
		Return Null
	Else
		Return point
	EndIf
End Function

Graphics 800,600,0

Repeat
	
	Cls
	Local point:Tpoint = ccGetCursorPos()
	
	DrawText point.X + " : " + point.Y, 12, 12
		
	Flip

Until KeyHit(KEY_ESCAPE)



Grey Alien(Posted 2006) [#3]
Spiffing! I knew it was something to do with Max Pointers, thanks :-)