Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с LoadLibrary 
:(
    Опции темы
rainbow86
  Дата 12.12.2005, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



smile
Гружу библиотеку LoadLibrary("My.dll");
А он мне говорит- No symbols loaded
Где то прочитал что надо добавлять динамически подгружаемые библиотеки в параметр additionals dll's пункта project settings, только чего-то я не нашел там такого.
Может кто знает чего?

И ещё один вопрос: Обязательна ли функция DllMain() в dll файле?
PM MAIL   Вверх
bel_nikita
Дата 12.12.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Ошибку приведи


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Fixin
Дата 12.12.2005, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


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

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



Цитата(rainbow86 @ 12.12.2005, 20:51)
А он мне говорит- No symbols loaded
Кто "ОН"?
Цитата(rainbow86 @ 12.12.2005, 20:51)
Обязательна ли функция DllMain() в dll файле?
Есть еще 16-ти разрядная LibMain. Может есть другие варианты.
PM MAIL ICQ   Вверх
rainbow86
  Дата 13.12.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вообщем ситуация такая: у меня есть два модуля один exe и другой dll для этого ехе'шника.
Вызываю из главного модуля функцию которая прописана в dll:

HMODULE dllhook=LoadLibrary("My.dll");
HOOKPROC hook=(HOOKPROC)GetProcAddress(dllhook,"MyFunction");
HHOOK hhook=SetWindowsHookEx(WH_KEYBOARD,hook,dllhook,0);

Но функция почемуто не вызывается.
В dll у меня примерно вот что
функция:

_declspec(dllexport) LRESULT CALLBACK MyFunction(int code, WPARAM wParam,LPARAM lParam)
{

Код обработки сообщения

}

Мож кто знает в каком направлении искать ошибку???
smile
PM MAIL   Вверх
Aleksandor
Дата 13.12.2005, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

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



А что говорят коды ошибок ? Я пользую вот такую штуку для получения инфы об ошибках (на примере функции LoadLibrary:
Код

int i, n;
LPVOID lpMsgBuf;
char szDebug[250];

HMODULE dllhook;

if (NULL==(dllhook=LoadLibrary("My.dll"))) {
 i=GetLastError();
 n=FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,   NULL, i, 0, (LPTSTR) &lpMsgBuf, 0, NULL);
    wsprintf(szDebug,"Error %d: ",i);
  i=lstrlen(szDebug);
  if (n>249-i) n=249-i;
  strncat(szDebug, (LPCTSTR)lpMsgBuf, n); 
  szDebug[n+i]='\0';  
  LocalFree(lpMsgBuf );
  MessageBox(NULL,szDebug,NULL,MB_OK); // или печать в файл
  // errorexit
}

Если LoadLibrary окей проверь следующие smile

А DllMain() не обязательна если нет нужды проводить инициализацию. При отсутствии DllMain() линкер сам подключит реализацию по умолчанию из run-time.


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
rainbow86
Дата 14.12.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



в файле exports.def у меня вот что:
LIBRARY My
EXPORTS
MyFunction

Цитата(Aleksandor @ 13.12.2005, 19:44)
А что говорят коды ошибок ?

Ошибок как таковых нет, все компилируется нормально, и
в exe все работает нормально, я проверял, а вот функция в dll не выполняется?
Может я чего-то забыл по неопытности?

smile
PM MAIL   Вверх
Aleksandor
Дата 14.12.2005, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

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



А что говорит DUMPBIN -exports my.dll



--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
Mad
Дата 14.12.2005, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(rainbow86 @ 13.12.2005, 17:37)
_declspec(dllexport) LRESULT CALLBACK MyFunction(int code, WPARAM wParam,LPARAM lParam)


Цитата(rainbow86 @ 13.12.2005, 17:37)
HOOKPROC hook=(HOOKPROC)GetProcAddress(dllhook,"MyFunction");

он просто не находит функцию по имени, C++ добавляет служебные символы к имени по умолчанию (определяющие параметры функции)

попробуя так
Код

extern "C" _declspec(dllexport) LRESULT CALLBACK MyFunction(int code, WPARAM wParam,LPARAM lParam)



--------------------
user posted image
PM MAIL   Вверх
rainbow86
Дата 14.12.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот это мой exe, может поможет:
Код

#include <windows.h>

/*#pragma(linker,"/MERGE:.rdata=.text")
#pragma(linker,"/SECTION:.text,EWRX")
#pragma(linker,"/ENTRY:WinMain")*/

int  WinMain( HINSTANCE,HINSTANCE ,LPSTR,int)
{    
    HINSTANCE dllhook=LoadLibrary("My.dll");
     HOOKPROC hook=(HOOKPROC)GetProcAddress(dllhook,"MyFunction");
if(hook!=NULL)
    {
    
        HHOOK hhook=SetWindowsHookEx(WH_KEYBOARD,hook, dllhook,0);
        if(hhook!=NULL)
        {
            Sleep(INFINITE);
            FreeLibrary(dllhook);
            return 0;
        }
        return 0;
    }
    return 0;
}



А это примерный dll

Код


#include "stdafx.h"
extern "C" _declspec(dllexport) LRESULT CALLBACK MyFunction(int code, WPARAM wParam,LPARAM lParam) 
{    
    MessageBox(NULL,"Работает","Ура", MB_OK);
       return TRUE;
}    
                                                                                      

PM MAIL   Вверх
Aleksandor
Дата 14.12.2005, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

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



А это зачем - Sleep(INFINITE); !?



--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
rainbow86
Дата 15.12.2005, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Aleksandor @ 14.12.2005, 18:32)
А это зачем - Sleep(INFINITE); !?

Для того что бы прога работала, до тех пор пока не убьеш процесс!

Всем спасибо, эта проблема вроде-бы решена. Но появилась другая: каким способом надо отлаживать dll файлы. Ставлю точки остановки, но почему-то они игнорируются хотя финкция сама выполняется???
smile

Ёще раз всем спасибо!
PM MAIL   Вверх
Romikgy
Дата 16.12.2005, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Сначала проверяешь все ф-ции в обычном ехе-шнике, если все работают как те надо, переносятся в Dll


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
rainbow86
Дата 16.12.2005, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



smile
Неплохой совет, спасибо!
PM MAIL   Вверх
Romikgy
Дата 19.12.2005, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Нема за шо smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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