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