Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вызов из Dll функции, находящейся в другой Dll

472
10 февраля 2005 года
Vovka
139 / / 10.02.2005
Программа подключает две DLL-ки. Потом вызывает функцию из первой DLL, которая в свою очередь вызывает функцию в другой DLL.
А как из DLL вызвать функцию в программе?
Функции вызываются с параметрами.
Подскажите пожайлуста, как это реализовать?
262
10 февраля 2005 года
Iktomy
1.2K / / 11.10.2004
Смотри тут, много полезного:
http://www.codenet.ru/progr/visualc/dll.php
472
11 февраля 2005 года
Vovka
139 / / 10.02.2005
Цитата:
Originally posted by Iktomy
Смотри тут, много полезного:
http://www.codenet.ru/progr/visualc/dll.php



Спасибо, буду разбираться что к чему...

472
12 февраля 2005 года
Vovka
139 / / 10.02.2005
Цитата:
Originally posted by Iktomy
Смотри тут, много полезного:
http://www.codenet.ru/progr/visualc/dll.php



Что-то у меня не получается...
Помогите простеньким исходником!
Допустим, в проге есть функция-1, которая выводит переданное ей сообщение.
Прога загружает первую DLL, в которой есть функция-2 для вывода переданного ей сообщения.
В окне программы есть единственная кнопка, по нажатию - загрузка второй DLL, в которой есть окно с полем ввода и двумя кнопками.
Вводим сообщение и нажимаем на кнопку-1 - сообщение выводится функцией-1, кнопка-2 - функцией-2.
Ну ооочень надо!!!

368
12 февраля 2005 года
rostyslav
629 / / 13.07.2004
Нужно определить указатель на ф-ю в dll. И после загрузки присвоить адрес ф-ии из основной программы.

Код:
файл TestDll.def
--------------------
LIBRARY TestDll
EXPORTS

fn1
fn2
--------------------

Файл TestDll.dll
--------------------
#include <windows.h>

void (*pFunc)(char*); // указатель на ф-ю из осн.программы

void fn2(char *ch)  
{
  (*pFunc)(ch);
}

void fn1(void *v)
{
  pFunc = (void (__cdecl *)(char *))v;
}

Использование

void f1(char *ch)
{
  MessageBox(0, ch, "Привет из осн.модуля", 0);
}

void CDlgDlg::OnButton1()
{
  typedef void (* dll_setf)(void *);
  typedef void (* dll_f2)(char *);
  dll_setf setf;
  dll_f2 f2;

  HINSTANCE hMyDll = ::LoadLibrary("TestDll.dll"); 
  setf = (dll_setf)::GetProcAddress(hMyDll,"fn1");
  f2 = (dll_f2)::GetProcAddress(hMyDll,"fn2");
  setf(f1); //Присвоим адрес f1
  f2("Hi!");    
  FreeLibrary(hMyDll);
}

А если ф-я, в другом dll, то наверно нужно, что-то типа
 
Код:
typedef void (* dll_setf)(void *);
  typedef void (* dll_f2)(char *);
  dll_setf setf;
  dll_f2 f2;

  HINSTANCE hMyDll = ::LoadLibrary("TestDll.dll"); 
  setf = (dll_setf)::GetProcAddress(hMyDll,"fn1");
  HINSTANCE hMyDll2 = ::LoadLibrary("TestDll2.dll");   
  f2 = (dll_f2)::GetProcAddress(hMyDll2,"fn2");
  setf(f2);

Первый код работает, второй не проверял, но должен работать..
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог