home *** CD-ROM | disk | FTP | other *** search
- // (C) Copyright 1995 - 1999 Microsoft Corporation. All rights reserved.
-
- #pragma hdrstop
-
- #define INITGUID 1
- #include <windows.h>
- #include "native.h" // Raw Native Interface declarations.
-
-
- typedef RECT *PRECT, **PPRECT;
-
-
-
- #ifdef __cplusplus
- #define EXTERNC extern "C"
- #else
- #define EXTERNC
- #endif
-
-
- // Macro for declaring RNI Java methods's (and encapsulating the java class package.)
- // TODO: Replace "RectMarshaler" with the name of your hook class.
- #define JAVAMETHOD(typ, name) \
- __declspec(dllexport) \
- EXTERNC \
- typ __cdecl RectMarshaler_##name
-
- #define LOGCALL(hookname) OutputDebugString("RectMarshaler." hookname "() called.\n")
-
- // Export that tells what RNI version we were built under.
- DWORD __cdecl RNIGetCompatibleVersion()
- {
- return RNIVER;
- }
-
- // Cache the various class and fields we will need.
- ClassClass* gRectangleClass;
- struct fieldblock* gRectangleXField;
- struct fieldblock* gRectangleYField;
- struct fieldblock* gRectangleWidthField;
- struct fieldblock* gRectangleHeightField;
-
-
-
- //==========================================================================
- // toJava
- //==========================================================================
- JAVAMETHOD(OBJECT*, toJava) (OBJECT*x, PPRECT ppRECT, int flags)
- {
-
- PRECT prect = *ppRECT;
-
- LOGCALL("toJava");
-
-
-
- return execute_java_constructor(NULL,
- NULL,
- gRectangleClass,
- "(IIII)",
- prect->left,
- prect->top,
- prect->right - prect->left,
- prect->bottom - prect->top);
- }
-
-
-
- void copyToExternalWorker(OBJECT *javaval, PRECT pRECT)
- {
-
- int x, y, width, height;
-
- x = Field_GetInt(javaval, gRectangleXField);
- y = Field_GetInt(javaval, gRectangleYField);
- width = Field_GetInt(javaval, gRectangleWidthField);
- height = Field_GetInt(javaval, gRectangleHeightField);
-
- pRECT->left = x;
- pRECT->top = y;
- pRECT->right = x + width;
- pRECT->bottom = y + height;
- }
-
-
- //==========================================================================
- // copyToExternal
- //==========================================================================
- JAVAMETHOD(void, copyToExternal) (OBJECT*x, OBJECT* javaval, PPRECT ppRECT, int flags)
- {
- LOGCALL("copyToExternal");
-
- copyToExternalWorker(javaval, *ppRECT);
- }
-
-
-
-
-
-
- //==========================================================================
- // toExternal
- //==========================================================================
- JAVAMETHOD(void, toExternal) (OBJECT*x, OBJECT* javaval, int flags, PPRECT ppRECT)
- {
- PRECT pRECT = NULL;
-
- LOGCALL("toExternal");
-
- pRECT = (RECT*)CoTaskMemAlloc(sizeof(RECT));
- if (!pRECT) {
- SignalErrorPrintf("java/lang/OutOfMemoryError", "Could not allocate from task heap!");
- } else {
- char msg[100];
- wsprintf(msg, "Hook allocated RECT at %lxh\n", pRECT);
- OutputDebugString(msg);
- copyToExternalWorker(javaval, pRECT);
- *ppRECT = pRECT;
- }
- }
-
-
- //==========================================================================
- // releaseExternal
- //==========================================================================
- JAVAMETHOD(void, releaseExternal) (OBJECT*x, PPRECT ppRECT, int flags)
- {
- PRECT pRECT = *ppRECT;
- char msg[100];
-
- LOGCALL("releaseExternal");
- wsprintf(msg, "Hook freeing RECT at %lxh\n", pRECT);
- OutputDebugString(msg);
- if (pRECT) {
- CoTaskMemFree(pRECT);
- }
- }
-
-
- //==========================================================================
- // classInit (one time initialization routine)
- //==========================================================================
- JAVAMETHOD(void, classInit) (OBJECT*x)
- {
- gRectangleClass = FindClass(NULL, "java/awt/Rectangle", TRUE);
- if (!gRectangleClass) {
- SignalErrorPrintf("java/lang/ClassNotFoundException", "Could not preload java.awt.Rectangle class!");
- }
-
- gRectangleXField = Class_GetField(gRectangleClass, "x");
- if (!gRectangleXField) {
- SignalErrorPrintf("java/lang/ClassNotFoundException", "Bogus java.awt.Rectangle class!");
- }
-
- gRectangleYField = Class_GetField(gRectangleClass, "y");
- if (!gRectangleYField) {
- SignalErrorPrintf("java/lang/ClassNotFoundException", "Bogus java.awt.Rectangle class!");
- }
-
- gRectangleWidthField = Class_GetField(gRectangleClass, "width");
- if (!gRectangleWidthField) {
- SignalErrorPrintf("java/lang/ClassNotFoundException", "Bogus java.awt.Rectangle class!");
- }
-
- gRectangleHeightField = Class_GetField(gRectangleClass, "height");
- if (!gRectangleHeightField) {
- SignalErrorPrintf("java/lang/ClassNotFoundException", "Bogus java.awt.Rectangle class!");
- }
- }
-
-
-
-
-
- //==========================================================================
- // TODO: Remove this copy of DllMain if you are embedding this file in your
- // own DLL.
- // DLL Loader entry Rectangle.
- //==========================================================================
- BOOL WINAPI DllMain(HINSTANCE hmod, DWORD dwReason,
- PVOID pvReserved)
- {
- return TRUE;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-