Предпочтительный способ получения имени файла модуля dll в C ++ / CLI - PullRequest
1 голос
/ 08 декабря 2010

У меня есть C ++ / CLI dll, и я хотел бы знать, какой будет предпочтительная альтернатива функции Win32 API GetModuleFilename. Я нашел Assembly::GetExecutingAssembly()->ManifestModule->FullyQualifiedName ( MSDN ). Кажется, это работает, но я хотел бы знать, есть ли другой или «лучший» способ. Конечно, я знаю, что технически ничто не запрещает мне использовать GetModuleFilename напрямую, но я ненавижу смешивать различные API, и это также потребует создания строкового буфера, который я затем должен будет преобразовать обратно в System::String. Я знаю, что это всего лишь две строки кода, но все же ...; -)

1 Ответ

5 голосов
/ 08 декабря 2010

Не используйте GetModuleFileName(). В CLR .NET 4.0 пропущен некоторый код приложения, который делает загруженную сборку похожей на обычную DLL.Кроме того, HMODULE является проблемой, вы не можете использовать трюк VirtualQuery для преобразования адреса кода в HMODULE.

Assembly::GetExecutingAssembly()->Location дает вам полный путь к сборке, из которой был загружен IL для текущего метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...