home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 14 / IOPROG_14.ISO / soft / sdkjava / sdkjava.exe / SDKJava.cab / Include / native.h < prev   
Encoding:
C/C++ Source or Header  |  1998-03-05  |  24.6 KB  |  606 lines

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