Winhlp32 & Custom DLL Calling ConventionsLast reviewed: February 28, 1995Article ID: Q120737 |
The information in this article applies to:
SUMMARYThe Windows NT help system can call custom DLLs at specific times while viewing specific help files. In Windows 3.1 and Windows NT on 80x86 architectures, the DLL is called with the _pascal calling convention.
MORE INFORMATIONOn the MIPS and PowerPC architectures, Windows NT 3.1 and 3.5 use a workaround because the architectures use a register calling convention: they pass four (for the MIPS) or eight (for the PowerPC) dummy arguments followed by the actual arguments. For example, on the 80x86 you might do: abc.hpj [CONFIG] section: RegisterRoutine( "abc", "MyFunction", "UI" )abc.hlp macro call: MyFunction( hwndApp, 2 )abc.dll implementation: void MyFunction( HWND hwndApp, int i ){ if( i == 3 ) ....} On the MIPS, you would employ the dummy argument workaround, and do: abc.hpj [CONFIG] section: RegisterRoutine( "abc", "MyFunction", "UI" )abc.hlp macro call: MyFunction( hwndApp, 2 )abc.dll implementation: void MyFunction( int d1, int d2, int d3, int d4, HWND hwndApp, int i ){ if( i == 3 ) ....} Use these macros if you want your function declarations to be portable between various NT architectures: #if defined(_MIPS_) #define XR1STARGDEF int dummy1, int dummy2, int dummy3, int dummy4, #define XR1STARGREF 1,2,3,4,#elif defined(_PPC_) #define XR1STARGDEF int d1,int d2,int d3,int d4,int d5,int d6,int d7,intd8,
#define XR1STARGREF 1,2,3,4,5,6,7,8,#else #define XR1STARGDEF #define XR1STARGREF#endif abc.dll implementation: void MyFunction( XR1STARGDEF HWND hwndApp, int i ){ if( i == 3 ) ....} If another C routine calls your DLL function, use:
MyFunction( XR1STARGREF hwnd, 33 ); |
Additional reference words: prodnt 3.50 powerpc ppc
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |