Я прошу прощения, если это тривиальный вопрос, но я искал столько, сколько могу и не могу найти какое-либо решение.
У меня есть приложение Delphi / FMX, которое создает DLL для Win32 и DYLIB дляmacOS (High Sierra), 32 бита.
В устройстве я просто использовал GetModuleName(hInstance)
, чтобы получить имя модуля, который использовал устройство, и это отлично работает в Win32 и Win64.Например, если основная программа использует устройство, оно вернет имя основной программы.Однако, если DLL, используемая основной программой, использует модуль, она вернет имя DLL.Я использую это для создания отдельных файлов журнала для основной программы и любых библиотек DLL, которые она вызывает, и использую имя, перенастроенное в имени файла журнала.
Код, который работает (в единице, используемой DYLIB (OSX) / DLL (Win32), созданной с FMX) в Windows:
sModuleName := TPath.GetFileNameWithoutExtension(GetModuleName(hInstance));
GetModulename
находится вдля модуля System.SysUtils и AFAIK не существует условного определения для Windows / OSX и т. д. Мое предположение, очевидно ошибочное, заключается в том, что он должен работать при сборке для OSX.Это не так, он висит на этой строке без ошибок, просто «(не отвечает)» в окне FORCE QUIT.Я пробовал это как на виртуальной машине MacOS, так и на жесткой системе MacOS с тем же результатом.
Есть ли что-то еще, что мне нужно сделать, чтобы GetModuleName работал с OSX?
и/ или
Есть ли что-то (похожее), которое получит имя модуля, если я соберу для OSX?