User Tools

Site Tools


vo_to_net:pcall

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
vo_to_net:pcall [2018/07/11 15:10] wolfgangriedmannvo_to_net:pcall [2018/07/29 05:22] (current) wolfgangriedmann
Line 4: Line 4:
  
 The X# compiler needs a typed function pointer for ''PCall()'' to work (and you need the compiler switch /vo6 "Resolve function pointers to PTR"): The X# compiler needs a typed function pointer for ''PCall()'' to work (and you need the compiler switch /vo6 "Resolve function pointers to PTR"):
-<code>STATIC FUNCTION __GetRealOsVersion( struOS AS _winOSVERSIONINFOEX) AS DWORD PASCAL  // typed function pointer+<code visualfoxpro>STATIC FUNCTION __GetRealOsVersion( struOS AS _winOSVERSIONINFOEX) AS DWORD PASCAL  // typed function pointer
   RETURN 0   RETURN 0
 .... ....
Line 10: Line 10:
 dword( _cast , PCALL( hFunc ,@struOS) )</code> dword( _cast , PCALL( hFunc ,@struOS) )</code>
 The alternative (to not define such a function) is to use ''PCallNative()'': The alternative (to not define such a function) is to use ''PCallNative()'':
-<code>local hFunc as ptr+<code visualfoxpro>local hFunc as ptr
 PCALLNative<dword>( hFunc ,@struOS )</code> PCALLNative<dword>( hFunc ,@struOS )</code>
  
 The .NET way would be the definition of a delegate (i.e. a typed function pointer). Please see [[:delegates|Delegates]].  The .NET way would be the definition of a delegate (i.e. a typed function pointer). Please see [[:delegates|Delegates]]. 
 A sample for the delegate version is the following: A sample for the delegate version is the following:
-<code>delegate RtlGetVersionDelegate( struOS as _winOSVERSIONINFOEX) as dword+<code visualfoxpro>delegate RtlGetVersionDelegate( struOS as _winOSVERSIONINFOEX) as dword
 local oFunc as RtlGetVersionDelegate local oFunc as RtlGetVersionDelegate
  
Line 22: Line 22:
  
 To simplify the code, a static method could help: To simplify the code, a static method could help:
-<code>static class DelegateHelper+<code visualfoxpro>static class DelegateHelper
  
 static method CreateDelegate<T>( hFunc as ptr ) as T static method CreateDelegate<T>( hFunc as ptr ) as T
Line 36: Line 36:
 end class</code> end class</code>
 and to be used: and to be used:
-<code>oFunc := DelegateHelper.CreateDelegate<RtlGetVersionDelegate>( hFunc )</code>+<code visualfoxpro>oFunc := DelegateHelper.CreateDelegate<RtlGetVersionDelegate>( hFunc )</code>
 (Code courtesy of Chris Pyrgas) (Code courtesy of Chris Pyrgas)
  
vo_to_net/pcall.1531321837.txt.gz · Last modified: 2018/07/11 15:10 by wolfgangriedmann