C ++ LoadLibrary () из текущего пути - PullRequest
1 голос
/ 27 декабря 2010

Я в основном разработчик .net, делаю что-то маленькое на C ++, поэтому у меня небольшие проблемы.

Я загружаю еще одну C ++ dll, используя hInst = LoadLibrary(TEXT("mydll.dll"));, и я понял, что этоDLL я пытаюсь загрузить в 'C: \' или в 'system32'.

Может кто-нибудь показать мне, как загрузить DLL из текущего каталога (не зная, что текущий каталог раньше времени) ??

Я знаю, что должен использовать что-то вроде GetFullPathName, но у меня небольшие проблемы с тем, чтобы заставить его работать самостоятельно ...

Ответы [ 3 ]

4 голосов
/ 27 декабря 2010

Я считаю, что загрузка из текущего каталога - это поиск по умолчанию и первый поиск. См. Справочник MSDN

Первый найденный каталог каталог, содержащий файл изображения используется для создания вызывающего процесса (для получения дополнительной информации см. Функция CreateProcess). Делая это разрешает приватную динамическую библиотеку (DLL) файлы, связанные с процессом можно найти без добавления установленный каталог процесса в Переменная окружения PATH

http://msdn.microsoft.com/en-us/library/ms684175(v=vs.85).aspx

4 голосов
/ 27 декабря 2010

Текущий каталог процесса можно получить с помощью функции GetCurrentDirectory():

TCHAR bufCurrentDirectory[MAX_PATH + 1] = { 0 };
DWORD dwNumCharacters = ::GetCurrentDirectory(MAX_PATH, bufCurrentDirectory);
if(dwNumCharacters == 0) error();

Теперь путь к текущему каталогу процесса находится в bufCurrentDirectory, если только функция не завершилась. Просто добавьте "\\mydll.dll" к пути, и у вас будет абсолютный путь к DLL.

Поскольку текущий каталог процесса является несколько переменным, может быть лучше использовать путь к исполняемому файлу. Чтобы получить путь к текущему исполняемому файлу, вы можете сделать:

TCHAR bufExePath[MAX_PATH + 1] = { 0 };
DWORD dwNumCharacters = ::GetModuleFileName(NULL, bufExePath, MAX_PATH);
if(dwNumCharacters == 0) error();

Теперь bufExePath содержит весь путь к exe, включая "\\my.exe". Замените my.exe на mydll.dll, и вы получите абсолютный путь к DLL. Я бы рекомендовал этот метод по сравнению с GetCurrentDirectory() из-за соображений безопасности.

2 голосов
/ 27 декабря 2010

Использовать GetCurrentDirectory .

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