Не могу подключить dll.
extern "C" _declspec(dllexport)
void MyBox()
{
MessageBox(“hello”);
}
есть приложение в котором написано (в MyApp.h)
extern "C" _declspec(dllimport)
void MyBox();
далее в функции – обработчике нажатия на кнопку идет вызов функции
MyBox();
И……….
Нифига
Конечно, если создать сначала проект с dll’кой, а потом включить в него(в workspace) проект в котором я буду пользоваться функцией MyBox(), а потом еще и в меню project->dependencies поставить галочку (для того чтобы использовать эту дллку)… ну в общем фигня (это я в тупорылой книжонке прочитал).
А вот сам вопрос, как мне из своей программы использовать функции которые я написал в дллке? (способ который я описал не подходит, потому что проект уже есть, да и вообще это как то туповато)
Если такого вида экпорт/импорт, делаю это вот так.
DLL:
int d()
{
return 1;
}
extern int __declspec(dllexport) d();
EXE:
extern int __declspec(dllimport) d();
.....
d();
есть dll’ка, в которой написано
extern "C" _declspec(dllexport)
void MyBox()
{
MessageBox(“hello”);
}
есть приложение в котором написано (в MyApp.h)
extern "C" _declspec(dllimport)
void MyBox();
далее в функции – обработчике нажатия на кнопку идет вызов функции
MyBox();
И……….
Нифига
Конечно, если создать сначала проект с dll’кой, а потом включить в него(в workspace) проект в котором я буду пользоваться функцией MyBox(), а потом еще и в меню project->dependencies поставить галочку (для того чтобы использовать эту дллку)… ну в общем фигня (это я в тупорылой книжонке прочитал).
А вот сам вопрос, как мне из своей программы использовать функции которые я написал в дллке? (способ который я описал не подходит, потому что проект уже есть, да и вообще это как то туповато)
По-моему, у нас непонимание. Чтобы подключить DLL без сборки с ней приложения (так скажем), нужно использовать след. ф-ции:
LoadLibrary(...);
GetProcAddress(...);
FreeLibrary(...);
Подробности в MSDN.
Но предыдущий автор был прав: без описанных функции вы не вытащите написанные функции из DLL.
Вот только пользование этих функции ни к чему хорошему не приводит. Мне когда-то тоже стукнула идея писать с DLL'ками, вот только никаким образом они не работали. Может быть у меня был кривой компилятор (MSDEV 6.0)?
У меня были косяки с DLL.
Но предыдущий автор был прав: без описанных функции вы не вытащите написанные функции из DLL.
Все зависит от желания и умения.
Реверс-инженеринг к примеру...
Вот только пользование этих функции ни к чему хорошему не приводит.
:D:D:D
Мне когда-то тоже стукнула идея писать с DLL'ками, вот только никаким образом они не работали. Может быть у меня был кривой компилятор (MSDEV 6.0)?
Думаю, что что-то другое кривое... :D
Смотрим сюда:
http://www.rsdn.ru/?article/default.asp?baseserv/dlluse.xml
Все зависит от желания и умения.
Реверс-инженеринг к примеру...
:D:D:D
Думаю, что что-то другое кривое... :D
Смотрим сюда:
http://www.rsdn.ru/?article/default.asp?baseserv/dlluse.xml
Спасибо за ссылку, помогла.
Что-то я совсем запутался с этими либами. Раньше я думал, что статически связываемые библиотеки – это lib, а динамически – dll. А в rsdn написано, что в либах находится таблица импорта. Может разъяснишь?
Спасибо за ссылку, помогла.
Что-то я совсем запутался с этими либами. Раньше я думал, что статически связываемые библиотеки – это lib, а динамически – dll. А в rsdn написано, что в либах находится таблица импорта. Может разъяснишь?
Ты правильно думал. Статически связываемые - это lib, а динамически - это dll.
Динамически связываемые могут быть связаны явно через вызовы в программе LoadLibrary, а могут связываться неявно на этапе загрузки программы загрузчиком. Загрузчик берет информацию из таблицы импорта загружаемого исполняемого файла. Таблица импорта была помещена в исполняемый файл на этапе его компоновки (линковки). Таблица эта берется из файла lib, который соответствует конкретной dll. В этом случае lib не содержит непосредственно кода, а лишь таблицу импорта для подключения и перехода к конкретным методам в DLL.
Т.о. получается что одни lib могут содержать непосредственно код некоторых методов, а другие lib - только механизм подключения и вызова методов из DLL.
Ты правильно думал. Статически связываемые - это lib, а динамически - это dll.
Динамически связываемые могут быть связаны явно через вызовы в программе LoadLibrary, а могут связываться неявно на этапе загрузки программы загрузчиком. Загрузчик берет информацию из таблицы импорта загружаемого исполняемого файла. Таблица импорта была помещена в исполняемый файл на этапе его компоновки (линковки). Таблица эта берется из файла lib, который соответствует конкретной dll. В этом случае lib не содержит непосредственно кода, а лишь таблицу импорта для подключения и перехода к конкретным методам в DLL.
Т.о. получается что одни lib могут содержать непосредственно код некоторых методов, а другие lib - только механизм подключения и вызова методов из DLL.
Ну спасибо что разъяснил, а то я совсем запутался, да кстати ты не мог бы немного рассказать о переменных окружения, а то я в них тоже не очень разбираюсь.
Ну спасибо что разъяснил, а то я совсем запутался, да кстати ты не мог бы немного рассказать о переменных окружения, а то я в них тоже не очень разбираюсь.
А что именно тебя интересует?
Пути?
А что именно тебя интересует?
Пути?
да все, что их касается(мне стыдно, но я ничего про них не знаю)