MORE INFORMATION
On 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:<BR/>
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,int
d8,
#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 );