home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / Runimage / Cbuilder4 / Include / NATIVE.H < prev    next >
Encoding:
C/C++ Source or Header  |  1999-01-26  |  23.3 KB  |  569 lines

  1.  
  2. // (C) Copyright 1996-1997, Microsoft Corporation and it suppliers.
  3.  
  4. //----------------------------------------------------------------------------
  5. // Public header for facilities provided by MSJava.dll
  6. //----------------------------------------------------------------------------
  7.  
  8. #ifndef _NATIVE_
  9. #pragma option push -b -a8 -pc -A- /*P_O_Push_S*/
  10. #define _NATIVE_
  11.  
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15.  
  16. //----------------------------------------------------------------------------
  17. // Since handles have gone away, this is no op. The unhands() in this file
  18. // a redundant but useful for clarity.
  19. // Note: You can not just unhand an array to get at it's data, you must now 
  20. // use unhand(x)->body.
  21. //----------------------------------------------------------------------------
  22. #define unhand(phobj) (phobj)
  23.  
  24. //----------------------------------------------------------------------------
  25. //----------------------------------------------------------------------------
  26. #define JAVAPKG    "java/lang/"
  27.  
  28. //----------------------------------------------------------------------------
  29. // Standard Java declarations for built in types.
  30. //----------------------------------------------------------------------------
  31. typedef long OBJECT;
  32. typedef OBJECT Classjava_lang_Object;
  33. typedef OBJECT Hjava_lang_Object;
  34. typedef OBJECT ClassObject;
  35. typedef Hjava_lang_Object JHandle;
  36. typedef Hjava_lang_Object HObject;
  37.  
  38. typedef unsigned short unicode;
  39. typedef long int32_t;
  40. typedef __int64 int64_t;
  41. typedef int BOOL;
  42. typedef void *PVOID;    
  43. typedef unsigned long DWORD;
  44. #ifndef _SIZE_T_DEFINED
  45. #define _SIZE_T_DEFINED
  46. typedef unsigned int size_t;
  47. #endif
  48. #ifndef VOID
  49. #define VOID void
  50. #endif
  51. #ifndef _BOOL_T_DEFINED
  52. #define _BOOL_T_DEFINED
  53. typedef BOOL bool_t;
  54. #endif
  55.  
  56. //----------------------------------------------------------------------------
  57. // All RNI DLLs should export the following function to let the VM determine
  58. // if the DLL is compatible with it.
  59. //----------------------------------------------------------------------------
  60.  
  61. DWORD __declspec(dllexport) __cdecl RNIGetCompatibleVersion();
  62.  
  63. #ifndef RNIVER
  64. #define RNIMAJORVER         2
  65. #define RNIMINORVER         0
  66. #define RNIVER              ((((DWORD) RNIMAJORVER) << 16) + (DWORD) RNIMINORVER)
  67. #endif
  68.  
  69. //----------------------------------------------------------------------------
  70. // Use to get the length of an array an HObject.
  71. //----------------------------------------------------------------------------
  72. #define obj_length(hobj) (((ArrayOfSomething*)unhand(hobj))->length)
  73.  
  74. //----------------------------------------------------------------------------
  75. // Thread entry/exit functions.
  76. // These functions should wrap any calls into the virtual machine.
  77. //----------------------------------------------------------------------------
  78. typedef struct {
  79.     DWORD    reserved[6];
  80. } ThreadEntryFrame;
  81.  
  82. BOOL __cdecl PrepareThreadForJava(PVOID pThreadEntryFrame);
  83. VOID __cdecl UnprepareThreadForJava(PVOID pThreadEntryFrame);
  84.  
  85. //----------------------------------------------------------------------------
  86. // Garbage Collection.
  87. //----------------------------------------------------------------------------
  88. typedef struct {
  89.     DWORD    reserved[6];
  90. } GCFrame;
  91.  
  92. void    __cdecl GCFramePush(PVOID pGCFrame, PVOID pObjects, 
  93.                 DWORD cbObjectStructSize);
  94. void    __cdecl GCFramePop(PVOID pGCFrame);
  95.  
  96. // 'Weak' ptrs
  97. HObject** __cdecl GCGetPtr(HObject *phobj);
  98. void    __cdecl GCFreePtr(HObject **pphobj);
  99.  
  100. #define GCGetWeakPtr    GCGetPtr
  101. #define GCFreeWeakPtr   GCFreePtr
  102.  
  103. // 'Strong' ptrs
  104. HObject** __cdecl GCNewHandle(HObject *phobj);
  105. void __cdecl GCFreeHandle(HObject **pphobj);
  106.  
  107. // 'Internal reserved pinned ptrs
  108. HObject** __cdecl GCNewPinnedHandle(HObject *phobj);
  109. void __cdecl GCFreePinnedHandle(HObject **pphobj);
  110.  
  111. // GC write barrier support
  112.  
  113. void __cdecl GCSetObjectReferenceForObject (HObject** location, HObject* phobj);
  114. void __cdecl GCSetObjectReferenceForHandle (HObject** handle, HObject* phobj);
  115.  
  116.  
  117. int     __cdecl GCEnable();
  118. int     __cdecl GCDisable();
  119. int     __cdecl GCDisableCount();
  120. int     __cdecl GCEnableCompletely();
  121. void    __cdecl GCDisableMultiple(int cDisable);
  122.  
  123. //----------------------------------------------------------------------------
  124. // "Built-in" object structures...
  125. // These include helper macro's to get at array data.
  126. //----------------------------------------------------------------------------
  127.  
  128. #pragma pack(push,4)
  129.  
  130. typedef struct Classjava_lang_String Classjava_lang_String;
  131. #define Hjava_lang_String Classjava_lang_String
  132. typedef Hjava_lang_String HString;
  133.  
  134. typedef struct ClassArrayOfByte
  135. {
  136.     int32_t MSReserved;
  137.     unsigned long length;
  138.     char body[1];
  139. } ClassArrayOfByte;
  140. #define HArrayOfByte ClassArrayOfByte
  141. #define ArrayOfByte ClassArrayOfByte
  142.  
  143. typedef struct ClassArrayOfChar
  144. {
  145.     int32_t MSReserved;
  146.     unsigned long length;
  147.     unsigned short body[1];
  148. } ClassArrayOfChar;
  149. #define HArrayOfChar ClassArrayOfChar
  150. #define ArrayOfChar ClassArrayOfChar
  151.  
  152. typedef struct ClassArrayOfShort
  153. {
  154.     int32_t MSReserved;
  155.     unsigned long length;
  156.     short body[1];
  157. } ClassArrayOfShort;
  158. #define HArrayOfShort ClassArrayOfShort
  159. #define ArrayOfShort ClassArrayOfShort
  160.  
  161. typedef struct ClassArrayOfInt
  162. {
  163.     int32_t MSReserved;
  164.     unsigned long length;
  165.     long body[1];
  166. } ClassArrayOfInt;
  167. #define HArrayOfInt ClassArrayOfInt
  168. #define ArrayOfInt ClassArrayOfInt
  169.  
  170. typedef struct ClassArrayOfLong
  171. {
  172.     int32_t MSReserved;
  173.     unsigned long length;
  174.     __int64 body[1];
  175. } ClassArrayOfLong;
  176. #define HArrayOfLong ClassArrayOfLong
  177. #define ArrayOfLong ClassArrayOfLong
  178.  
  179. typedef struct ClassArrayOfFloat
  180. {
  181.     int32_t MSReserved;
  182.     unsigned long length;
  183.     float body[1];
  184. } ClassArrayOfFloat;
  185. #define HArrayOfFloat ClassArrayOfFloat
  186. #define ArrayOfFloat ClassArrayOfFloat
  187.  
  188. typedef struct ClassArrayOfDouble
  189. {
  190.     int32_t MSReserved;
  191.     unsigned long length;
  192.     double body[1];
  193. } ClassArrayOfDouble;
  194. #define HArrayOfDouble ClassArrayOfDouble
  195. #define ArrayOfDouble ClassArrayOfDouble
  196.  
  197. typedef struct ClassArrayOfObject
  198. {
  199.     int32_t MSReserved;
  200.     unsigned long length;
  201.     HObject *body[1];
  202. } ClassArrayOfObject;
  203. #define HArrayOfObject ClassArrayOfObject
  204. #define ArrayOfObject ClassArrayOfObject
  205.  
  206. typedef struct ClassArrayOfString
  207. {
  208.     int32_t MSReserved;
  209.     unsigned long length;
  210.     HString  *(body[1]);
  211. } ClassArrayOfString;
  212. #define HArrayOfString ClassArrayOfString
  213. #define ArrayOfString ClassArrayOfString
  214.  
  215. typedef struct ClassArrayOfArray
  216. {
  217.     int32_t MSReserved;
  218.     unsigned long length;
  219.     JHandle *(body[1]);
  220. } ClassArrayOfArray;
  221. #define HArrayOfArray ClassArrayOfArray
  222. #define ArrayOfArray ClassArrayOfArray
  223.  
  224. typedef struct
  225. {
  226.     int32_t MSReserved;
  227.     unsigned long length;
  228. } ArrayOfSomething;
  229.  
  230. #pragma pack(pop)
  231.  
  232. //----------------------------------------------------------------------------
  233. // We automatically track the execution environment so there's no EE() call
  234. // needed anymore, just pass NULL if an API needs one.
  235. //----------------------------------------------------------------------------
  236. #define EE() NULL
  237. typedef void ExecEnv;
  238.  
  239. //----------------------------------------------------------------------------
  240. // Exception handling stuff...
  241. //----------------------------------------------------------------------------
  242. void __cdecl SignalError(struct execenv *ee, const char *ename, const char *DetailMessage);
  243. void __cdecl SignalErrorPrintf( const char *ename, const char *pszFormat, ...);
  244.  
  245. bool_t __cdecl exceptionOccurred(ExecEnv *ee);
  246. void __cdecl exceptionDescribe(ExecEnv *ee);
  247. void __cdecl exceptionClear(ExecEnv *ee);
  248. void __cdecl exceptionSet( ExecEnv *ee, HObject *phThrowable );
  249.  
  250. HObject * __cdecl getPendingException(ExecEnv *ee);
  251.  
  252. //----------------------------------------------------------------------------
  253. // Standard exec functions...
  254. //----------------------------------------------------------------------------
  255. typedef PVOID ClassClass;
  256.  
  257. HObject* __cdecl execute_java_constructor(ExecEnv *ee, const char *classname,
  258.         ClassClass *cb, const char *signature, ...);
  259. HObject* __cdecl execute_java_constructorV(ExecEnv *ee, const char *classname,
  260.         ClassClass *cb, const char *signature, va_list args);
  261.         
  262. #ifndef execute_java_dynamic_method
  263. long __cdecl execute_java_dynamic_method(ExecEnv *ee, HObject *obj, const char
  264.         *method_name, const char *signature, ...);
  265. #endif
  266. int64_t __cdecl execute_java_dynamic_method64(ExecEnv *ee, HObject *obj, const char
  267.         *method_name, const char *signature, ...);
  268. int64_t __cdecl execute_java_dynamic_methodV(ExecEnv *ee, HObject *obj, const char
  269.         *method_name, const char *signature, va_list args);
  270.  
  271. #ifndef execute_java_interface_method
  272. long __cdecl execute_java_interface_method(ExecEnv *ee, HObject *pobj,
  273.         ClassClass j_interface, const char *method_name, const char *signature, ...);
  274. #endif
  275. int64_t __cdecl execute_java_interface_method64(ExecEnv *ee, HObject *pobj,
  276.         ClassClass j_interface, const char *method_name, const char *signature, ...);
  277. int64_t __cdecl execute_java_interface_methodV(ExecEnv *ee, HObject *pobj,
  278.         ClassClass j_interface, const char *method_name, const char *signature, va_list args);
  279.  
  280. #ifndef execute_java_static_method
  281. long __cdecl execute_java_static_method(ExecEnv *ee, ClassClass *cb, 
  282.         const char *method_name, const char *signature, ...);
  283. #endif
  284. int64_t __cdecl execute_java_static_method64(ExecEnv *ee, ClassClass *cb,
  285.         const char *method_name, const char *signature, ...);
  286. int64_t __cdecl execute_java_static_methodV(ExecEnv *ee, ClassClass *cb,
  287.         const char *method_name, const char *signature, va_list args);
  288.  
  289. //----------------------------------------------------------------------------
  290. // NB The resolve flag is ignored, classes found with this api will always
  291. // be resolved.
  292. //----------------------------------------------------------------------------
  293. ClassClass* __cdecl FindClass(ExecEnv *ee, char *classname, bool_t resolve);
  294.  
  295. //----------------------------------------------------------------------------
  296. // FindClassEx
  297. //
  298. // Similar to FindClass, but can take some flags that control how the class
  299. // load operation works.
  300. //
  301. // The valid flags are:
  302. //  
  303. //   FINDCLASSEX_NOINIT
  304. //      If the class is a system class, will prevent the classes static
  305. //      initializer from running.  
  306. //
  307. //   FINDCLASSEX_IGNORECASE
  308. //      Will perform a case-insensitive validation of the class name, as
  309. //      opposed to the case-sensitive validation that normally occurs.
  310. //
  311. //   FINDCLASSEX_SYSTEMONLY
  312. //       Will only look for the named class as a system class.
  313. //
  314. //----------------------------------------------------------------------------
  315.  
  316. #define FINDCLASSEX_NOINIT      0x0001
  317. #define FINDCLASSEX_IGNORECASE  0x0002
  318. #define FINDCLASSEX_SYSTEMONLY  0x0004
  319.  
  320. ClassClass* __cdecl FindClassEx(char *pszClassName,DWORD dwFlags);
  321.  
  322. //----------------------------------------------------------------------------
  323. // Helper function that returns a methodblock.
  324. //----------------------------------------------------------------------------
  325. struct methodblock* __cdecl get_methodblock(HObject *pjobj, const char
  326.         *method_name, char *signature);
  327.  
  328. //----------------------------------------------------------------------------
  329. // If you pass in a methodblock from get_methodblock the method name and
  330. // sig are ignored and so it's faster than a regular execute.
  331. //----------------------------------------------------------------------------
  332. #ifndef do_execute_java_method
  333. long __cdecl do_execute_java_method(ExecEnv *ee, void *obj, const char
  334.         *method_name, const char *signature, struct methodblock *mb,
  335.         bool_t isStaticCall, ...);
  336. #endif
  337. int64_t __cdecl do_execute_java_method64(ExecEnv *ee, void *obj, const char
  338.         *method_name, const char *signature, struct methodblock *mb,
  339.         bool_t isStaticCall, ...);
  340.  
  341. //----------------------------------------------------------------------------
  342. // isInstanceOf
  343. //
  344. // Returns true if the specified object can be cast to the named class
  345. // type.
  346. //----------------------------------------------------------------------------
  347.  
  348. BOOL __cdecl isInstanceOf(JHandle *phobj, const char *classname);
  349.  
  350. //----------------------------------------------------------------------------
  351. // is_instance_of
  352. //
  353. // Returns true if the specified object can be cast to the specified
  354. // class type.
  355. //----------------------------------------------------------------------------
  356.  
  357. BOOL __cdecl is_instance_of(JHandle *phobj,ClassClass *dcb,ExecEnv *ee);
  358.  
  359. //----------------------------------------------------------------------------
  360. // is_subclass_of
  361. //
  362. // Returns true if the class (cb) is a subclass of the specified class(dcb).
  363. //----------------------------------------------------------------------------
  364.  
  365. BOOL __cdecl is_subclass_of(ClassClass *cb, ClassClass *dcb, ExecEnv *ee);
  366.  
  367. //----------------------------------------------------------------------------
  368. // ImplementsInterface
  369. //
  370. // Returns true if the class (cb) implements the specified interface (icb).
  371. //----------------------------------------------------------------------------
  372.  
  373. BOOL __cdecl ImplementsInterface(ClassClass *cb,ClassClass *icb,ExecEnv *ee);
  374.  
  375. //----------------------------------------------------------------------------
  376. #define T_TMASK    034
  377. #define T_LMASK 003
  378. #define T_MKTYPE( t, l )  ( ( (t)&T_TMASK ) | ( (l)&T_LMASK) )
  379.  
  380. #define T_CLASS        2
  381. #define T_FLOATING    4    
  382. #define T_CHAR        5
  383. #define T_INTEGER    010
  384. #define T_BOOLEAN    4
  385.  
  386. #define T_FLOAT     T_MKTYPE(T_FLOATING,2)
  387. #define T_DOUBLE    T_MKTYPE(T_FLOATING,3)
  388. #define T_BYTE        T_MKTYPE(T_INTEGER,0)
  389. #define T_SHORT        T_MKTYPE(T_INTEGER,1)
  390. #define T_INT        T_MKTYPE(T_INTEGER,2)
  391. #define T_LONG        T_MKTYPE(T_INTEGER,3)
  392.  
  393. //----------------------------------------------------------------------------
  394. // Create an array of primitive types only (int, long etc).
  395. //----------------------------------------------------------------------------
  396. HObject* __cdecl ArrayAlloc(int type, int cItems);
  397.  
  398. //----------------------------------------------------------------------------
  399. // Create an array of objects.
  400. //----------------------------------------------------------------------------
  401. HObject* __cdecl ClassArrayAlloc(int type, int cItems, const char *szSig);
  402.  
  403. //----------------------------------------------------------------------------
  404. // Copy an array ala System.arrayCopy()
  405. //----------------------------------------------------------------------------
  406. void __cdecl ArrayCopy(HObject *srch, long src_pos, HObject *dsth, 
  407.         long dst_pos, long length);
  408.  
  409. //----------------------------------------------------------------------------
  410. // Create and return a new array of bytes initialized from the C string.
  411. //----------------------------------------------------------------------------
  412. HArrayOfByte* __cdecl MakeByteString(const char *str, long len);
  413.  
  414. //----------------------------------------------------------------------------
  415. // Create and return a new Java String object, initialized from the C string.
  416. //----------------------------------------------------------------------------
  417. Hjava_lang_String* __cdecl makeJavaString(const char *str, int len);
  418. Hjava_lang_String* __cdecl makeJavaStringW(const unicode *pszwSrc, int cch);
  419.  
  420. //----------------------------------------------------------------------------
  421. // Create and return a new Java String object, initialized from a null 
  422. // terminated, UTF8 formatted, C string.
  423. //----------------------------------------------------------------------------
  424. Hjava_lang_String* __cdecl makeJavaStringFromUtf8(const char *pszUtf8);
  425.  
  426. //----------------------------------------------------------------------------
  427. // Get the characters of the String object into a C string buffer.
  428. // No allocation occurs. Assumes that len is the size of the buffer.
  429. // The C string's address is returned.
  430. //----------------------------------------------------------------------------
  431. char* __cdecl javaString2CString(Hjava_lang_String *s, char *buf, int buflen);
  432.  
  433. //----------------------------------------------------------------------------
  434. // Return the length of the String object.
  435. //----------------------------------------------------------------------------
  436. int __cdecl javaStringLength(Hjava_lang_String *s);
  437.  
  438. //----------------------------------------------------------------------------
  439. // Return temporary ptr to first char of the String object.
  440. // May change when gc happens.
  441. //----------------------------------------------------------------------------
  442. unicode * __cdecl javaStringStart (HString *string);
  443.  
  444. //----------------------------------------------------------------------------
  445. // Note: The int passed to these API's must be an object ptr.
  446. //----------------------------------------------------------------------------
  447. #define obj_monitor(handlep) ((int) handlep)
  448. void __cdecl monitorEnter(unsigned int);
  449. void __cdecl monitorExit(unsigned int);
  450. void __cdecl monitorNotify(unsigned int);
  451. void __cdecl monitorNotifyAll(unsigned int);
  452. void __cdecl monitorWait(unsigned int, int64_t millis);
  453.  
  454. #define ObjectMonitorEnter(obj)         monitorEnter((int)obj)
  455. #define ObjectMonitorExit(obj)          monitorExit((int)obj)
  456. #define ObjectMonitorNotify(obj)        monitorNotify((int)obj)
  457. #define ObjectMonitorNotifyAll(obj)     monitorNotifyAll((int)obj)
  458. #define ObjectMonitorWait(obj,millis)   monitorWait((int)obj,millis)
  459.  
  460. //----------------------------------------------------------------------------
  461. // String helpers...
  462. //----------------------------------------------------------------------------
  463. int __cdecl jio_snprintf(char *str, size_t count, const char *fmt, ...);
  464. int __cdecl jio_vsnprintf(char *str, size_t count, const char *fmt, va_list 
  465.         args);
  466.  
  467. //----------------------------------------------------------------------------
  468. // Methods to get information about the caller of a native method.
  469. //----------------------------------------------------------------------------
  470.  
  471. ClassClass * __cdecl GetNativeMethodCallersClass();
  472. struct methodblock* __cdecl GetNativeMethodCallersMethodInfo();
  473.  
  474. //----------------------------------------------------------------------------
  475. // Member attributes, as appear in Java class file.
  476. //----------------------------------------------------------------------------
  477.  
  478. #define ACC_PUBLIC      0x0001       
  479. #define ACC_PRIVATE     0x0002       
  480. #define ACC_PROTECTED   0x0004       
  481. #define ACC_STATIC      0x0008       
  482. #define ACC_FINAL       0x0010       
  483. #define ACC_SYNCH       0x0020       
  484. #define ACC_SUPER       0x0020       
  485. #define ACC_THREADSAFE  0x0040       
  486. #define ACC_VOLATILE    0x0040        
  487. #define ACC_TRANSIENT   0x0080        
  488. #define ACC_NATIVE      0x0100        
  489. #define ACC_INTERFACE   0x0200        
  490. #define ACC_ABSTRACT    0x0400        
  491.  
  492. //----------------------------------------------------------------------------
  493. // Class information
  494. //----------------------------------------------------------------------------
  495.  
  496. // Total number of fields in the class, including supers
  497. unsigned __cdecl            Class_GetFieldCount(ClassClass *cls);
  498. struct fieldblock * __cdecl Class_GetField(ClassClass *cls, const char *name);
  499. struct fieldblock * __cdecl Class_GetFieldByIndex(ClassClass *cls, unsigned index);
  500. // Total number of methods, including supers.
  501. unsigned __cdecl            Class_GetMethodCount(ClassClass *cls);
  502. struct methodblock* __cdecl Class_GetMethod(ClassClass *cls, const char *name, const char *signature);
  503. struct methodblock* __cdecl Class_GetMethodByIndex(ClassClass *cls, unsigned index);
  504. ClassClass * __cdecl        Class_GetSuper(ClassClass *cls);
  505. const char * __cdecl        Class_GetName(ClassClass *cls);
  506. unsigned __cdecl            Class_GetInterfaceCount(ClassClass *cls);
  507. ClassClass * __cdecl        Class_GetInterface(ClassClass *cls, unsigned index);
  508. // Returns combination of ACC_* constants.
  509. int __cdecl                 Class_GetAttributes(ClassClass *cls);
  510.  
  511. //----------------------------------------------------------------------------
  512. // Field/method information
  513. //----------------------------------------------------------------------------
  514.  
  515. const char * __cdecl        Member_GetName(PVOID member);
  516. const char * __cdecl        Member_GetSignature(PVOID member);
  517. // class of the field/method is implemented in.
  518. ClassClass * __cdecl        Member_GetClass(PVOID member);
  519. // Returns combination of ACC_* constants.
  520. int __cdecl                 Member_GetAttributes(PVOID member);
  521.  
  522. // For non-static fields, Offset of field in object.  See also Field_Get/SetValue.
  523. unsigned __cdecl            Field_GetOffset(struct fieldblock * field);
  524. // Ptr to static value
  525. PVOID __cdecl               Field_GetStaticPtr(struct fieldblock * field);
  526.  
  527.  
  528. //----------------------------------------------------------------------------
  529. // Object accessors
  530. //----------------------------------------------------------------------------
  531. ClassClass * __cdecl        Object_GetClass(HObject *obj);
  532.  
  533. __int32 __cdecl             Field_GetValue(HObject *obj, struct fieldblock * field);
  534. __int64 __cdecl             Field_GetValue64(HObject *obj, struct fieldblock * field);
  535. float __cdecl               Field_GetFloat(HObject *obj, struct fieldblock * field);
  536. double __cdecl              Field_GetDouble(HObject *obj, struct fieldblock * field);
  537. void __cdecl                Field_SetValue(HObject *obj, struct fieldblock * field, __int32 value);
  538. void __cdecl                Field_SetValue64(HObject *obj, struct fieldblock * field, __int64 value);
  539. void __cdecl                Field_SetFloat(HObject *obj, struct fieldblock * field, float value);
  540. void __cdecl                Field_SetDouble(HObject *obj, struct fieldblock * field, double value);
  541.  
  542. #define Field_GetBoolean(obj,field)     ((bool_t)       Field_GetValue(obj,field))
  543. #define Field_GetByte(obj,field)        ((signed char)  Field_GetValue(obj,field))
  544. #define Field_GetChar(obj,field)        ((unicode)      Field_GetValue(obj,field))
  545. #define Field_GetShort(obj,field)       ((short)        Field_GetValue(obj,field))
  546. #define Field_GetInt(obj,field)                         Field_GetValue(obj,field)
  547. #define Field_GetLong(obj,field)                        Field_GetValue64(obj,field)
  548. #define Field_GetObject(obj,field)      ((HObject*)     Field_GetValue(obj,field))
  549. #define Field_GetFloat(obj,field)                       Field_GetFloat(obj,field)
  550. #define Field_GetDouble(obj,field)                      Field_GetDouble(obj,field)
  551.  
  552. #define Field_SetBoolean(obj,field,value)               Field_SetValue(obj,field,(bool_t)(value))
  553. #define Field_SetByte(obj,field,value)                  Field_SetValue(obj,field,(signed char)(value))
  554. #define Field_SetChar(obj,field,value)                  Field_SetValue(obj,field,(unicode)(value))
  555. #define Field_SetShort(obj,field,value)                 Field_SetValue(obj,field,(short)(value))
  556. #define Field_SetInt(obj,field,value)                   Field_SetValue(obj,field,value)
  557. #define Field_SetLong(obj,field,value)                  Field_SetValue64(obj,field,value)
  558. #define Field_SetObject(obj,field,value)                Field_SetValue(obj,field,(__int32)(value))
  559. #define Field_SetFloat(obj,field,value)                 Field_SetFloat(obj,field,value)
  560. #define Field_SetDouble(obj,field,value)                Field_SetDouble(obj,field,value)
  561.  
  562.  
  563. #ifdef __cplusplus
  564. }
  565. #endif
  566.  
  567. #pragma option pop /*P_O_Pop*/
  568. #endif
  569.