Anonymous
ага
Anonymous
сек
Anonymous
ну хоть не линупс, и на том спасибо
Еслибы тип выше ещё бы по русски написал... был бы эпик
Anonymous
я полагаю ты получаешь после вызова первой апи INVALID_HANDLE_VALUE
Anonymous
который передаешь во вторую функу
Stanislav
а момент
Anonymous
значит ты ошибся в имени либы, либо её нет в PATH или текущей директории
Stanislav
это длл, this_lib = GetModuleHandleA("my_dll.dll"); получает свой путь тут
Anonymous
тут длл получает не путь а некий хэндл, число отвечающее за объект ядра
Anonymous
типа дескриптора
Stanislav
которая на основе этого получает путь где она лежит и грузит из подпапок нужные длл
Stanislav
и это работает
Stanislav
но в логах ошибка
Berkus
какая ошибка то
Anonymous
не так, в этот момент, после вызова
Anonymous
она подгружается в память
Anonymous
а ты получаешь некий идентификатор её, как объекта ядра
Stanislav
какая ошибка то
инвалид хэндл
Anonymous
значит она не подгрузилась в память, если после первой апи INVALID_HANDLE_VALUE
Stanislav
на последней строчке я получаю что хочу
Anonymous
проверь this_lib == INVALID_HANDLE_VALUE
Berkus
Return value If the function succeeds, the return value is a handle to the specified module. If the function fails, the return value is NULL.
Anonymous
т.е. функа из либы срабатывает, а в лог идёт ошибка?
Stanislav
проверь this_lib == INVALID_HANDLE_VALUE
если я проверю оно все сломается, вопрос то был, почему ошибка и почему оно работает как ожидалось
Anonymous
твой логер работает в отдельном потоке?
Stanislav
причем тут это?
Stanislav
для других функций системных он 0 показывает
Anonymous
GetLastError() выдает ошибку последней вызванной апи
Berkus
GetModuleFileNameA(this_lib, this_lib_name, MAX_PATH); а почему ты не проверяешь возвращаемое значение у этой функции
Anonymous
он говорит это что-то сломает
Berkus
а в примере МСДН проверяют это раз https://msdn.microsoft.com/en-us/library/windows/desktop/ms683500(v=vs.85).aspx а в доке на функцию написано что она возвращает 0 в случае ошибки это два
Anonymous
два мы говорили о функе которая возвращает хэндл
Anonymous
GetModuleHandleA
Berkus
проверяете то вы не ее
Berkus
логгер вызывается после GetModuleFileNameA
Anonymous
да, но эта ошибка идёт через GetLastError()
Berkus
на которую GetModuleFileNameA тоже влияет
Anonymous
разумеется
Berkus
ну и причем тут GetModuleHandleA если вы пытаетесь ошибку от GetModuleFileNameA проверить, не проверяя на самом деле ее return value
Anonymous
очевидно что INVALID_HANDLE_VALUE в этом случае может быть только тогда когда INVALID_HANDLE_VALUE == this_lib
Berkus
который не может быть, т.к. GetModuleHandleA возвращает NULL а не INVALID_HANDLE_VALUE
Anonymous
потому как другие аргументы там вообще ни причём
Stanislav
и это отлично все работает
Anonymous
смотри, первая функа возвращает NULL, на вход второй подается неверный хэндл о чём и говорит GetLastError()
Stanislav
кроме момента с ошибкой
Anonymous
либо второй вариант, GetLastError() в другом потоке
Anonymous
т.е. ошибка может быть от другой апи
Berkus
ну логгер вызывается вроде в том же потоке
Stanislav
брр, щас вытащу все эти куски кода на гитхаб
Anonymous
я других вариантов не вижу честно говоря
Stanislav
https://gist.github.com/crackedmind/4d7ff0eca65e13d17600fcef546bb0cf
Anonymous
стоп, а зачем ты в this_lib потом тыкаешь строку?
Anonymous
GetModuleFileNameA(this_lib, this_lib_name, MAX_PATH);
Anonymous
а нет
Stanislav
вот тоже который день думаю
Berkus
так, а в this_lib_name ты что-нибудь получаешь в результате?
Anonymous
путь дальше верно определяется?
Stanislav
так, а в this_lib_name ты что-нибудь получаешь в результате?
да, весь код после этого отлично работает
Stanislav
что на вин10 и на таргете в виде ХП ембед
Stanislav
вопрос то такой был, какого х это работает если ошибку хэндла показывает?
Anonymous
пробани без логера просто в stdout тыкнуть GetLastError() вместо вызова логера
Anonymous
самое вероятное, это происходит просто не тут
Anonymous
логер в потоке?
Stanislav
открывает файл, пишет туда, и закрывает
Stanislav
на каждый вызов
Stanislav
плохо, но такая специфика
Anonymous
а есои файл не открывается?
Anonymous
по сути ты когда открываешь файл - тоже получаешь его хэндл
Stanislav
файл логгера? это бывает только под вин10 из за новых прав
Stanislav
по сути ты когда открываешь файл - тоже получаешь его хэндл
ошибка не логгере, ошибка в том что мне винда говорит что на этот вызов у меня неверный дескриптор
Stanislav
мне похер
Stanislav
а вот заказчки волнуется