Получение названия DLL из dll

Если вы расширите предупреждающее сообщение, вы найдете его причину

Кроме того, в Java 9 модуль может скрывать некоторые из своих классов, не экспортируя свои пакеты. [ 1110]

Если публичный API класса в экспортированном пакете ссылается на класс из неэкспортированного пакета, такой API бесполезен вне модуля.

Причина, по которой такой API бесполезен, состоит в том, что никакой другой модуль не может создать экземпляр класса / access Server.

Примечательно, что в дескриптор вашего модуля вы включили

opens com.money.heist.server.core.network to com.google.guice;

, который обеспечит доступ во время выполнения, но не во время компиляции (возможно, причина, по которой IntelliJ не имеет смысла) к типам public и protected в пакете, а также к элементам public и protected этих типов к модулям, для которых они открыты.

В связи с вышесказанным, если вы измените директиву opens на exports, вы больше не увидите предупреждение от IntelliJ.

5
задан EylM 31 July 2018 в 11:52
поделиться

2 ответа

да, вам нужно сохранить hModule в DllMain

BOOL WINAPI DllMain(HINSTANCE hinstDLL,  DWORD fdwReason,  LPVOID lpvReserved)
{
  switch (fdwReason)
  {
    case DLL_PROCESS_ATTACH:
      hModule = hinstDLL;
      break;
  }
}
7
ответ дан 13 December 2019 в 19:34
поделиться

Вам необходимо предоставить функцию DllMain , сохранить переданный вами дескриптор модуля в статической переменной, а затем использовать эту переменную для вызова GetModuleFilename . Вам следует избегать вызова GetModuleFilename (или любой другой функции) в самом DllMain, поскольку Windows очень разборчива в отношении того, что вы можете и чего не можете там делать.

4
ответ дан 13 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: