тоже глючит системная iphlpali.dll 64 бит
От: ksd Россия  
Дата: 10.01.17 16:46
Оценка:
Есть чужая exe-шка, которая грузит мою dll, которая использует GetNetworkParams из iphlpali -- 64 битная dll-ка в Win8+ крашится при вызове GetNetworkParams; 32 битная версия работает нормально.
При этом вот щито:
        typedef DWORD (WINAPI* lclGetNetworkParams)(PFIXED_INFO pFixedInfo, PULONG pOutBufLen);
    static lclGetNetworkParams pGetNetworkParams = 0;
    static HMODULE hLib = 0;
    if (0 == hLib || 0 == pGetNetworkParams)
    {
        wchar_t t[1024] = {0};
        GetSystemDirectoryW(t, 1024);
        lstrcatW(t, L"\\IPHLPAPI.DLL");
        hLib = LoadLibraryW(t);
        if (0 != hLib)
        {
            pGetNetworkParams = (lclGetNetworkParams)GetProcAddress(hLib, "GetNetworkParams");            
        }
    }
        // pGetNetworkParams != &GetNetworkParams !!!

соответственно, что не используй и pGetNetworkParams, и GetNetworkParams --> крашится одинаково. Как крашится? Не знаю, exe-шка висит в диспетчере задач, параллельные треды работают.

Что делать то? А?
Re: тоже глючит системная iphlpali.dll 64 бит
От: EreTIk EreTIk's Box
Дата: 10.01.17 17:19
Оценка:
Здравствуйте, ksd, Вы писали:

ksd>Как крашится? Не знаю, exe-шка висит в диспетчере задач, параллельные треды работают.

Откуда тогда инфа о том, что происходит краш? Нет твоего треда? Может он просто вышел?
Как вариант: код exe-файла, который вызывает код из DLL использует SEH. Соответственно, перехватывает и обрабатывает исключение.

ksd>Что делать то? А?

Воспользоваться отладчиком (== запустить exe под отладкой), который покажет исключение, когда оно возникает: Understanding Exceptions while debugging with Visual Studio: First Chance Exceptions или Windbg, команда SXE.
Re[2]: и отладчик ничего не ловит
От: ksd Россия  
Дата: 11.01.17 10:11
Оценка:
Здравствуйте, EreTIk, Вы писали:

ETI>Здравствуйте, ksd, Вы писали:


ksd>>Как крашится? Не знаю, exe-шка висит в диспетчере задач, параллельные треды работают.

ETI>Откуда тогда инфа о том, что происходит краш? Нет твоего треда? Может он просто вышел?
ETI>Как вариант: код exe-файла, который вызывает код из DLL использует SEH. Соответственно, перехватывает и обрабатывает исключение.
да, похоже.

ksd>>Что делать то? А?

ETI>Воспользоваться отладчиком (== запустить exe под отладкой), который покажет исключение, когда оно возникает: Understanding Exceptions while debugging with Visual Studio: First Chance Exceptions или Windbg, команда SXE.
отладчик студии что то не показывает ничего, после очередного call внутри iphlpapi перестает адекватно работать.
Re: тоже глючит системная iphlpali.dll 64 бит
От: VTT http://vtt.to
Дата: 11.01.17 11:36
Оценка:
Для начала сделать отдельный exe и попробовать вызвать GetNetworkParams из него.
Я вот попробовал — все нормально.
Если проблема воспроизводится только в dll, то может в ней и надо искать причину?
Вы случаем не дергаете эти методы из dllmain или какие нибудь другие безобразия не нарушаете?
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[2]: само собой
От: ksd Россия  
Дата: 11.01.17 12:06
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>Для начала сделать отдельный exe и попробовать вызвать GetNetworkParams из него.

VTT>Я вот попробовал — все нормально.
VTT>Если проблема воспроизводится только в dll, то может в ней и надо искать причину?
VTT>Вы случаем не дергаете эти методы из dllmain или какие нибудь другие безобразия не нарушаете?
из обычного тестового exe-шника все работает. а из необычного -- вот.
Re: тоже глючит системная iphlpali.dll 64 бит
От: ononim  
Дата: 11.01.17 15:22
Оценка:
ksd>Что делать то? А?
для начала показать остальной код, который собственно и крэшится
Как много веселых ребят, и все делают велосипед...
Re[2]: крэшится в т.ч. и пример из msdn
От: ksd Россия  
Дата: 11.01.17 17:58
Оценка:
Здравствуйте, ononim, Вы писали:

ksd>>Что делать то? А?

O>для начала показать остальной код, который собственно и крэшится
крэшится в т.ч. и пример из msdn
проблема в правах или еще чем?
Re: тоже глючит системная iphlpali.dll 64 бит
От: Temnikov Россия  
Дата: 11.01.17 18:04
Оценка:
На вскидку, может разница в разных рантаймах которые подгружает ваша библиотека и сторонняя программа. Смешивание разных библиотек debug-release одного и того же рантайма тоже может приводить к разным результатам. Оптимизация, соглашения о вызовах и т.п.
Re[2]: тоже глючит системная iphlpali.dll 64 бит
От: ksd Россия  
Дата: 13.01.17 11:26
Оценка:
Здравствуйте, Temnikov, Вы писали:

T>На вскидку, может разница в разных рантаймах которые подгружает ваша библиотека и сторонняя программа. Смешивание разных библиотек debug-release одного и того же рантайма тоже может приводить к разным результатам. Оптимизация, соглашения о вызовах и т.п.

рантаймы? причем тут они? и точно разные: прога собрана не знаю чем, но GCC точно, а у меня ms vs.
в 64 бит 1 соглашение о вызовах.
короче, поменял функцию на GetComputerNameEx и проблема ушла.
Re[3]: и отладчик ничего не ловит
От: Burbulis1978  
Дата: 13.04.17 07:20
Оценка:
Здравствуйте, ksd, Вы писали:

ksd>Здравствуйте, EreTIk, Вы писали:


ETI>>Здравствуйте, ksd, Вы писали:


ksd>>>Как крашится? Не знаю, exe-шка висит в диспетчере задач, параллельные треды работают.

ETI>>Откуда тогда инфа о том, что происходит краш? Нет твоего треда? Может он просто вышел?
ETI>>Как вариант: код exe-файла, который вызывает код из DLL использует SEH. Соответственно, перехватывает и обрабатывает исключение.
ksd>да, похоже.

ksd>>>Что делать то? А?

ETI>>Воспользоваться отладчиком (== запустить exe под отладкой), который покажет исключение, когда оно возникает: Understanding Exceptions while debugging with Visual Studio: First Chance Exceptions или Windbg, команда SXE.
ksd>отладчик студии что то не показывает ничего, после очередного call внутри iphlpapi перестает адекватно работать.

Запустить в WinDBG и посмотреть что и как. Незабыть указать WinDBG расположение отладочных символов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.