Anonymous
login
| 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.
C | LotusScript | Comments |
BYTE | Byte | does not exist in LotusScript prior to Notes Domino 6 |
WORD | Integer | Signed in LotusScript |
SWORD | Integer | Signed word/integer |
DWORD | Long | -“”- |
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
Or
ByRef someWord as Integer | Pointer to word value; arguments contain a pointer to value – usually Long or DWORD |
* * DWORD hSomeWord | somePointer as Long
or
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 |
|