Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при загрузке DLL 
:(
    Опции темы
lv151
Дата 4.6.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



HINSTANCE hLib = LoadLibrary("my.dll");
FormatMessage( 
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM | 
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    (LPTSTR) &lpMsgBuf,
    0,
    NULL);

MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); - Операция успешно завершена, но hLib = 0;
PM MAIL   Вверх
GremlinProg
Дата 4.6.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 2
Всего: 106



lv151, покажи DLLMain этой библиотеки


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
lv151
Дата 4.6.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Цитата(GremlinProg @  4.6.2009,  16:14 Найти цитируемый пост)
покажи DLLMain этой библиотеки 

что это?

читаю мсдн smile

Это сообщение отредактировал(а) lv151 - 4.6.2009, 16:16
PM MAIL   Вверх
GremlinProg
Дата 4.6.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 2
Всего: 106



Цитата(lv151 @  4.6.2009,  18:15 Найти цитируемый пост)
что это?

главная функция
Цитата(DllMain @ MSDN)

When the system calls the DllMain function with the DLL_PROCESS_ATTACH value, the function returns TRUE if it succeeds or FALSE if initialization fails. If the return value is FALSE when DllMain is called because the process uses the LoadLibrary function, LoadLibrary returns NULL. (The system immediately calls your entry-point function with DLL_PROCESS_DETACH and unloads the DLL.) If the return value is FALSE when DllMain is called during process initialization, the process terminates with an error. To get extended error information, call GetLastError.

When the system calls the DllMain function with any value other than DLL_PROCESS_ATTACH, the return value is ignored.



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
lv151
Дата 4.6.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Как отлаживать DllMain?
PM MAIL   Вверх
GremlinProg
Дата 4.6.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 2
Всего: 106



Цитата(lv151 @  4.6.2009,  18:29 Найти цитируемый пост)
Как отлаживать DllMain?

открываешь свойства DLL-проекта, заходишь на вкладку Debugging и заполняешь пункт Сommand
здесь нужно указать любую программу, которая загружает твою DLL
ставишь брейкпойнт в DllMain и отлаживаешь


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
lv151
Дата 4.6.2009, 16:57 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Так и делал, но у меня никогда не заходит в DllMain.
PM MAIL   Вверх
GremlinProg
Дата 4.6.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 2
Всего: 106



значит длл не загружалась, может в пути напутал чего
пробуй загружать длл статически:
Код

#pragma comment(lib,"путь/к/длл")



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
lv151
Дата 4.6.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



FormatMessage( 
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM | 
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    (LPTSTR) &lpMsgBuf,
    0,
    NULL);

MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); - Выдаёт - "Операция успешно завершена"
PM MAIL   Вверх
GremlinProg
Дата 4.6.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 2
Всего: 106



да мы уже поняли ))

Добавлено через 1 минуту и 9 секунд
я имел ввиду при отладке

Добавлено через 2 минуты и 18 секунд
говорю ж показывай DllMain, чего гадать-то


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
lv151
Дата 4.6.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Код

#include "afxdllx.h"

static AFX_EXTENSION_MODULE NEAR extensionDLL = { NULL, NULL };

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    if (dwReason == DLL_PROCESS_ATTACH)
    {
        // extension DLL one-time initialization
        if (!AfxInitExtensionModule(extensionDLL, hInstance))
           return 0;

     new CDynLinkLibrary(extensionDLL);
    }
    return 1;   // ok
}


PM MAIL   Вверх
GremlinProg
Дата 4.6.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 2
Всего: 106



ну, MFC в другом разделе


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
lv151
Дата 4.6.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



В смысле задавать вопрос в другой раздел форума?

Добавлено @ 17:29
В трэйсе при LoadLibrary наблюдается:
First-chance exception in My1.exe (NTDLL.DLL): 0xC0000139: (no name).

Я ошибся, не в том месте вызывал FormatMessage.
Ошибка - "Не найден указанный модуль".
Код


DWORD z = GetCurrentDirectory(256, tchBuffer);
MessageBox( NULL, (LPCTSTR)tchBuffer, "Folder", MB_OK | MB_ICONINFORMATION ); 
- в той же папке что и экзэшник.


Это сообщение отредактировал(а) lv151 - 4.6.2009, 17:35
PM MAIL   Вверх
GremlinProg
Дата 4.6.2009, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 2
Всего: 106



ну вот, а я уже переместил топик
Цитата(lv151 @  4.6.2009,  19:24 Найти цитируемый пост)
Ошибка - "Не найден указанный модуль".

Цитата(lv151 @  4.6.2009,  19:24 Найти цитируемый пост)
в той же папке что и экзэшник.

сложно сказать,
тут есть некоторые нюансы совместимости при загрузке образов в Vista/W7: http://www.wasm.ru/forum/viewtopic.php?id=32892
такое возможно, пожалуй, только если длл была скомпилирована, к примеру в XP, а загружается в висте
по крайней мере, на это может указывать ошибка в NTDLL


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
lv151
Дата 4.6.2009, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



нет, усё в хр. уже и явно путь прописал - та же ерунда :(.
PM MAIL   Вверх
bugmenot
Дата 5.6.2009, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

Репутация: 1
Всего: 1



Выложи exe и dll, если они не очень большие
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
Earnest
Дата 5.6.2009, 06:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Модуль может быть другой - используемый этой DLL. Нужно проверить зависимости. Но сначала 100% убедись, что имя \ путь правильно написал, до буквы...


--------------------
...
PM   Вверх
lv151
Дата 5.6.2009, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Цитата(Earnest @  5.6.2009,  06:07 Найти цитируемый пост)
Модуль может быть другой - используемый этой DLL

т.е.?
Цитата
Выложи exe и dll, если они не очень большие

Извини, не могу, рабочая(не имею права).

Пересобрал все подключённые lib-ки, то же самое.

А не может ли быть дело в exe-нике?

Это сообщение отредактировал(а) lv151 - 5.6.2009, 09:36
PM MAIL   Вверх
lv151
Дата 5.6.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Таким образом ведут себя некоторые MFC-ые DLL-ки в моём проекте.
p.s.
Я создал пустой проект и пробую их загружать.

Цитата(Earnest @  5.6.2009,  06:07 Найти цитируемый пост)
Модуль может быть другой - используемый этой DLL. Нужно проверить зависимости. Но сначала 100% убедись, что имя \ путь правильно написал, до буквы... 

проверил.

Пробовал через ::AfxLoadLibrary, то же самое.

Это сообщение отредактировал(а) lv151 - 5.6.2009, 10:47
PM MAIL   Вверх
bugmenot
Дата 5.6.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

Репутация: 1
Всего: 1



Цитата(lv151 @  5.6.2009,  08:54 Найти цитируемый пост)
А не может ли быть дело в exe-нике?

Если не работает банально LoadLibrary, наверняка дело в DLL.

Цитата(lv151 @  5.6.2009,  08:54 Найти цитируемый пост)
Извини, не могу, рабочая(не имею права).

PM?
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
lv151
Дата 5.6.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Цитата(bugmenot @  5.6.2009,  12:09 Найти цитируемый пост)
PM? 

???
PM MAIL   Вверх
bugmenot
Дата 5.6.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

Репутация: 1
Всего: 1



В смысле не хочешь ли ты кинуть мне DLL-ку в PM (личное сообщение)?
Обещаю не продавать smile
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
lv151
Дата 5.6.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Не имею права. 
PM MAIL   Вверх
bugmenot
Дата 5.6.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

Репутация: 1
Всего: 1



Ну тогда извини, не знаю, как тебе помочь.
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
lv151
Дата 5.6.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



И на этом спасибо.

Я раньше не понимал - что за "Ад DLL", вот он и наступил smile.

Это сообщение отредактировал(а) lv151 - 5.6.2009, 14:31
PM MAIL   Вверх
Andrey44
Дата 5.6.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Цитата(lv151 @  5.6.2009,  14:04 Найти цитируемый пост)
Я раньше не понимал - что за "Ад DLL", вот он и наступил

Что-то не совсем понятно что за "Ад"
Ты дллку через LoadLibrary в экзэшнике грузишь или в какой другой длл?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
lv151
Дата 5.6.2009, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Да, создал пустой exe проект, в нём

HINSTANCE hLib6 = ::AfxLoadLibrary("d:\\mydll.dll");

hLib6 всегда = NULL;

 smile  smile  smile 

Это сообщение отредактировал(а) lv151 - 5.6.2009, 15:13
PM MAIL   Вверх
jonie
Дата 5.6.2009, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



FileMon в зубы и смотреть чего он пытается найти и не может

Добавлено через 46 секунд
если не в том проблема (например динамически через ком чего грузится) тогда RegMon поможет


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
lv151
Дата 5.6.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



d:\WINSPOOL.DRV not found Attributes:Error

Всё сакссэс но hLib6 всегда = NULL; smile 

Это сообщение отредактировал(а) lv151 - 5.6.2009, 16:13
PM MAIL   Вверх
lv151
Дата 5.6.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Разобрался, DEPENDS.EXE решает. Дело в одной из подключаемых dll. УРА!
Всем спасибо!

Это сообщение отредактировал(а) lv151 - 5.6.2009, 17:41
PM MAIL   Вверх
Andrey44
Дата 9.6.2009, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



lv151, ага, значит твоя длл использовала еще одну длл которой не было рядом. smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
lv151
Дата 9.6.2009, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Нет, была старая версия вложенной DLL.
Dependency Walker всё показал.

http://ru.wikipedia.org/wiki/Dependency_Walker

Это сообщение отредактировал(а) lv151 - 9.6.2009, 11:01
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.