|
1 | 1 | /* |
2 | | - * Copyright (c) 1996, 2024, Oracle and/or its affiliates. All rights reserved. |
| 2 | + * Copyright (c) 1996, 2025, Oracle and/or its affiliates. All rights reserved. |
3 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 | 4 | * |
5 | 5 | * This code is free software; you can redistribute it and/or modify it |
@@ -102,17 +102,36 @@ extern void DWMResetCompositionEnabled(); |
102 | 102 | first loaded */ |
103 | 103 | JavaVM *jvm = NULL; |
104 | 104 |
|
| 105 | +/* Return a handle to the module containing this method, either a DLL in case |
| 106 | + * of a dynamic library build, or the .EXE in case of a static build. |
| 107 | + */ |
| 108 | +static HMODULE GetAwtModuleHandle() { |
| 109 | + HMODULE hModule = NULL; |
| 110 | + GetModuleHandleEx( |
| 111 | + GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, |
| 112 | + (LPCTSTR) &GetAwtModuleHandle, |
| 113 | + &hModule |
| 114 | + ); |
| 115 | + return hModule; |
| 116 | +} |
| 117 | + |
| 118 | +extern "C" { |
| 119 | + |
105 | 120 | JNIEXPORT jint JNICALL |
106 | 121 | DEF_JNI_OnLoad(JavaVM *vm, void *reserved) |
107 | 122 | { |
108 | 123 | TRY; |
109 | 124 |
|
| 125 | + AwtToolkit::GetInstance().SetModuleHandle(GetAwtModuleHandle()); |
| 126 | + |
110 | 127 | jvm = vm; |
111 | 128 | return JNI_VERSION_1_2; |
112 | 129 |
|
113 | 130 | CATCH_BAD_ALLOC_RET(0); |
114 | 131 | } |
115 | 132 |
|
| 133 | +} |
| 134 | + |
116 | 135 | extern "C" JNIEXPORT jboolean JNICALL AWTIsHeadless() { |
117 | 136 | static JNIEnv *env = NULL; |
118 | 137 | static jboolean isHeadless; |
@@ -246,32 +265,6 @@ BOOL AwtToolkit::activateKeyboardLayout(HKL hkl) { |
246 | 265 | return (prev != 0); |
247 | 266 | } |
248 | 267 |
|
249 | | -/************************************************************************ |
250 | | - * Exported functions |
251 | | - */ |
252 | | - |
253 | | -extern "C" BOOL APIENTRY DllMain(HANDLE hInstance, DWORD ul_reason_for_call, |
254 | | - LPVOID) |
255 | | -{ |
256 | | - // Don't use the TRY and CATCH_BAD_ALLOC_RET macros if we're detaching |
257 | | - // the library. Doing so causes awt.dll to call back into the VM during |
258 | | - // shutdown. This crashes the HotSpot VM. |
259 | | - switch (ul_reason_for_call) { |
260 | | - case DLL_PROCESS_ATTACH: |
261 | | - TRY; |
262 | | - AwtToolkit::GetInstance().SetModuleHandle((HMODULE)hInstance); |
263 | | - CATCH_BAD_ALLOC_RET(FALSE); |
264 | | - break; |
265 | | - case DLL_PROCESS_DETACH: |
266 | | -#ifdef DEBUG |
267 | | - DTrace_DisableMutex(); |
268 | | - DMem_DisableMutex(); |
269 | | -#endif // DEBUG |
270 | | - break; |
271 | | - } |
272 | | - return TRUE; |
273 | | -} |
274 | | - |
275 | 268 | /************************************************************************ |
276 | 269 | * AwtToolkit fields |
277 | 270 | */ |
|
0 commit comments