Не срабатывает LoadLibrary
От: Krio  
Дата: 31.10.08 12:03
Оценка:
Здравствуйте!
Возникла проблема с подгрузкой dll (как под WM5 так и PocketPC 2003). Сначала написал простенькую dll которая ничего не делает. Попробовал вызвать её через LoadLibrary в основном приложении...получил ошибку, т.е возврощаемое значение не 0, но вылетает ошибка и dll не подгружается. Подумал, что-то пошаманил...ничего не вышло.
Попробовал вызвать просто любую стандартнуюю dll: coredll.dll или taskdll.dll опять вернулся unused указатель.
GetLasError возвращает 0.
Помогите решить проблему!
Re: Не срабатывает LoadLibrary
От: Снег  
Дата: 31.10.08 13:56
Оценка:
Здравствуйте, Krio, Вы писали:

K>Здравствуйте!

K>Возникла проблема с подгрузкой dll (как под WM5 так и PocketPC 2003). Сначала написал простенькую dll которая ничего не делает. Попробовал вызвать её через LoadLibrary в основном приложении...получил ошибку, т.е возврощаемое значение не 0, но вылетает ошибка и dll не подгружается. Подумал, что-то пошаманил...ничего не вышло.
K>Попробовал вызвать просто любую стандартнуюю dll: coredll.dll или taskdll.dll опять вернулся unused указатель.
K>GetLasError возвращает 0.
K>Помогите решить проблему!

Если dll лежит рядом с приложением, то грузится так:
HMODULE hDLL = LoadLibrary(L"test.dll");


Что возвращает GetLastError в Вашем случае?
http://vishnyasoft.com/
Re[2]: Не срабатывает LoadLibrary
От: Снег  
Дата: 31.10.08 14:00
Оценка:
С>Что возвращает GetLastError в Вашем случае?
Мда, сначала написал, потом дочитал.

> но вылетает ошибка и dll не подгружается

Какая именно ошибка?

И было бы неплохо увидеть код...
http://vishnyasoft.com/
Re[3]: Не срабатывает LoadLibrary
От: Krio  
Дата: 01.11.08 07:25
Оценка:
Код самый примитивный
int wmain()
{

   HINSTANCE hm=NULL;
   DWORD Err=0;
   try
   {
     hm=LoadLibrary("coredll.dll");
   }
   catch(...)
   {
     err=GetLastError();
   }
}

VS пишет, что указатель "unused" и он постояно за пределами 0х8000000, какую бы dll не подгружал!
Со своей dll тоже самое (.
а err=0! почитал похожие треды и начал думать над стеком, но пока никаких идей (
Re[4]: Не срабатывает LoadLibrary
От: Снег  
Дата: 01.11.08 09:17
Оценка:
Есть небольшая разница между "coredll.dll" и L"coredll.dll" ...
Проект-то для winmobile. Все строки должны быть в юникоде.
А "coredll.dll" — это однобайтовый анси.
http://vishnyasoft.com/
Re[5]: Не срабатывает LoadLibrary
От: Krio  
Дата: 01.11.08 09:40
Оценка:
Здравствуйте, Снег, Вы писали:

С>Есть небольшая разница между "coredll.dll" и L"coredll.dll" ...

С>Проект-то для winmobile. Все строки должны быть в юникоде.
С>А "coredll.dll" — это однобайтовый анси.
Извиняюсь. ДА всё с L ) просто забыл дописать ). VS по умолчанию без L или обёртки TEXT("") не компилит в принципе!
Может мало памяти по умолчпнию комититься...я уже теряюсь в догадках (
Re[4]: Не срабатывает LoadLibrary
От: Nikita123 Россия  
Дата: 01.11.08 11:15
Оценка:
Здравствуйте, Krio, Вы писали:

K>Код самый примитивный

K>
K>int wmain()
K>{
K>   HINSTANCE hm=NULL;
K>   DWORD Err=0;
K>   try
K>   {
K>     hm=LoadLibrary("coredll.dll");
K>   }
K>   catch(...)
K>   {
K>     err=GetLastError();
K>   }
K>}
K>

По-моему, try и catch тут совсем не при чем.
Лучше напишите так:
HINSTANCE hm=LoadLibrary(L"coredll.dll");
DWORD Err=GetLastError();
if(Err!=0)
обработка ошибки
Желаю успеха,
Никита.
Re[5]: Не срабатывает LoadLibrary
От: Krio  
Дата: 01.11.08 15:29
Оценка:
Да всё тоже самое, проблему это не снимает! ( Ща попробую в VS2005 скомпилит...может это всё 2008 глючит!
Re[6]: Не срабатывает LoadLibrary
От: Krio  
Дата: 01.11.08 17:15
Оценка:
Ну ситуация проясняеться: VS2005 выдал 120 ошибку ERROR_CALL_NOT_IMPLEMENTED
Получаеться нету LoadLibrary...странно! гугл при поиске ERROR_CALL_NOT_IMPLEMENTED показал, что эта тема только на pocketpc сайтах обсуждаеться. ( Ничего не понимаю. А у кого-нить нормальео отрабатывает LoadLibrary, если да то напишите, пожалуйста
Re[7]: Не срабатывает LoadLibrary
От: Argo1978 США  
Дата: 02.11.08 11:18
Оценка:
Никогда с ней проблем не было. Попробуйте указать путь к вашей DLL-ке
Re[8]: Не срабатывает LoadLibrary
От: Krio  
Дата: 02.11.08 20:18
Оценка:
Здравствуйте, Argo1978, Вы писали:

A>Никогда с ней проблем не было. Попробуйте указать путь к вашей DLL-ке


А можно узнать параетры вашего проекта. интересуют память выделяемая под стек и heap
Re[9]: Не срабатывает LoadLibrary
От: Argo1978 США  
Дата: 04.11.08 21:49
Оценка:
Все по-умолчанию, проекты создавались визардом в VS2005.
Re[7]: Не срабатывает LoadLibrary
От: Alexander Shargin Россия RSDN.ru
Дата: 05.11.08 13:18
Оценка:
Здравствуйте, Krio, Вы писали:

K>Ну ситуация проясняеться: VS2005 выдал 120 ошибку ERROR_CALL_NOT_IMPLEMENTED

K>Получаеться нету LoadLibrary...странно! гугл при поиске ERROR_CALL_NOT_IMPLEMENTED показал, что эта тема только на pocketpc сайтах обсуждаеться. ( Ничего не понимаю. А у кого-нить нормальео отрабатывает LoadLibrary, если да то напишите, пожалуйста

LoadLibrary отсутствовать не может — она есть всегда. Скорее всего, функция отрабатывает успешно, поэтому на last error смотреть не имеет смысла. LoadLibrary возвращает хэндл загруженной DLL, это просто число. Если он не равен нулю (NULL), то значит всё в порядке. Вот цитата из хелпа на этот счёт:

A handle to the module indicates success.

NULL indicates failure.

To get extended error information, call GetLastError.


Что касается unused, это ты в окне watch его видишь, если хэндл развернуть? Тогда на него вообще обращать внимание не надо. В Win32 любой хэндл объявляется как указатель на структуру для проверки типов (чтобы его с другим хэндлом не перепутать). Фактически же, как я уже сказал, это никакой не указатель, а просто число.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[8]: Не срабатывает LoadLibrary
От: Krio  
Дата: 06.11.08 13:18
Оценка:
Спасибо за подробный ответ.
Дошли руки попробовать всё отработать на чистой винде с заново поставленной VS и SDK, как всё тут же заработало!
Видать в конец я замучал свою старушку! Всем спасибо за советы! Лучше стал понимать когда GetLastError применим, а когда не валиден!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.