Data and reference types
The table below contains a cheat list of data type correspondence between C and LotusScript. One characteristic mismatching feature is that C may contain both signed and unsigned types. All LotusScript datatypes with the exception of BYTE and String are signed. If WORD value in C is from 0 to 65535, Integer value in LotusScript is from -32768 to 32767.
It does not mean much when passing variables or when they get processed by C code – in hexadecimal representation it makes in both cases 0 to 0xFFFF; however when calculating in LotusScript special provisions should be made to treat the overflow correctly.
|BYTE||Byte||does not exist in LotusScript prior to Notes Domino 6|
|WORD||Integer||Signed in LotusScript|
|LONG||Long||Signed in both – LotusScript and C|
|HANDLE, NOTEHANDLE, DBHANDLE||Integer||Macintosh, UNIXEes (except Linux, OS/390 and Solaris x86)|
|Long||OS/2, Win32, Linux, Solaris x86, OS/400, OS/390|
|MEMHANDLE||Long||Unsigned in C|
|Char *, Char * far||String|
Most of the parameters are passed by reference, i.e. passed a pointer to the variable; with little exceptions by value passed are WORD or DWORD flags and handles.
The following table shows when to pass variables by Value and when by Reference
|Declared in C||Declared in LotusScript||Comments|
|WORD someWord||ByVal someWord as Integer||The arguments contain one word (or 2 bytes) value of variable|
|* WORD pSomeWord||SomeWord as Integer
ByRef someWord as Integer
|Pointer to word value; arguments contain a pointer to value – usually Long or DWORD|
|* * DWORD hSomeWord||somePointer as Long
ByRef somePointer as Long
|Pointer to pointer; this one is a bit tricky; pointer is long in all OSes except OS400 where it is 16 bytes – so this is not applicable to OS/400|
|Char *, Char * far SomeStr||ByVal someStr as String||For some esoteric reason to pass a pointer to string we need to declare it by value; according to Designer help declaration byRef is possible, but C program must expect the specific format – C API does expect a normal pointer.|
|Char * far *far SomeStr||pSomeString as Long||Pointer to pointer to string|
|* SOMESTRTYPE someStr||SomeStr as SomeStrType||Structure by reference|
|SOMESTRTYPE someStr||ByVal SomeStrElement1 as Integer, ByVal SomeStrElement2 as Integer,||This one is nasty, structure is passed by value; only way in LotusScript is to declare several parameters byVal, besides there may be alignment issues between different platforms|