#c #file #io
#c #файл #io
Вопрос:
Итак, я использую C , чтобы попытаться найти файл. Однако на компьютере моих друзей он хранит файл в другом каталоге, чем у меня. Кроме того, у него другое имя пользователя, чем у меня, поэтому мой поиск C:UsersZero и он ищет что-то другое. Это означает, что даже если он находится в том же каталоге, что и я, он не будет найден, потому что его имя пользователя на ПК отличается от моего. Файл, который мы пытаемся найти, является файлом DLL. И я понятия не имею, как его найти. Я попытался использовать fstream, чтобы помочь, но позже в коде это вызывается WriteProcessMemory(hProc, loc, dllPath, strlen(dllPath) 1, 0);
с ошибками в strlen, потому что он не может преобразовать его в LPCVOID. В настоящее время я пишу строку следующим образом: const char* dllPath = "C:\Users\Zero\Documents\GitHub\ExtensionProject\32-Bit\Debug\Extension.dll";
Поэтому я пытаюсь выяснить, как пропустить весь C:Users thing, и мне интересно, есть ли какой-нибудь способ просто прочитать из папки, в которой он находится в данный момент? Потому что dll и .exe, который находит dll, скомпилированы в одной папке. Если вам нужно, чтобы я предоставил больше информации, дайте мне знать! Я с удовольствием предоставлю больше. Кроме того, я довольно новичок в C и понимаю, что C непростой, но я бы оценил самый простой способ сделать это, но в то же время я возьму то, что смогу получить.
Ответ №1:
Если ваша библиотека загружается в исполняемый файл при запуске, вы можете получить ее местоположение из загрузчика библиотеки ( GetModuleInfo
или что-то в этом роде).
Комментарии:
1. Я не верю, что знаю. Позвольте мне быть более конкретным: у меня есть DLL с именем Extension. dll, расположенная по адресу C:UsersZeroDesktopExtensionProject . ExtensionProject — это папка. Эта папка имеет расширение. dll внутри него, а также ExtensionLoader. внутри него находится dll. Таким образом, загрузчик и расширение находятся по одному и тому же пути. Когда я запускаю exe (загрузчик) Он пытается найти DLL, чтобы вставить ее в определенный процесс. Однако, если я не буду жестко кодировать dllPath, я не знаю, как заставить его работать. Кроме того, мой друг не сможет его использовать, поскольку его имя пользователя в Windows отличается от моего.
2. @Zero03 если загрузчик и целевая библиотека DLL находятся в одной папке, то загрузчик может получить свой собственный путь через
GetModuleFileName()
, а затем заменить конечную часть имени файла на имя целевой библиотеки DLL.