Если вы расширите предупреждающее сообщение, вы найдете его причину
Кроме того, в Java 9 модуль может скрывать некоторые из своих классов, не экспортируя свои пакеты. [ 1110]
Если публичный API класса в экспортированном пакете ссылается на класс из неэкспортированного пакета, такой API бесполезен вне модуля.
blockquote>Причина, по которой такой API бесполезен, состоит в том, что никакой другой модуль не может создать экземпляр класса / access
Server
.Примечательно, что в дескриптор вашего модуля вы включили
opens com.money.heist.server.core.network to com.google.guice;
, который обеспечит доступ во время выполнения, но не во время компиляции (возможно, причина, по которой IntelliJ не имеет смысла) к типам
public
иprotected
в пакете, а также к элементамpublic
иprotected
этих типов к модулям, для которых они открыты.В связи с вышесказанным, если вы измените директиву
opens
наexports
, вы больше не увидите предупреждение от IntelliJ.
да, вам нужно сохранить hModule в DllMain
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
hModule = hinstDLL;
break;
}
}
Вам необходимо предоставить функцию DllMain , сохранить переданный вами дескриптор модуля в статической переменной, а затем использовать эту переменную для вызова GetModuleFilename . Вам следует избегать вызова GetModuleFilename (или любой другой функции) в самом DllMain, поскольку Windows очень разборчива в отношении того, что вы можете и чего не можете там делать.