файл 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 функции, находящейся в другой Dll
А как из DLL вызвать функцию в программе?
Функции вызываются с параметрами.
Подскажите пожайлуста, как это реализовать?
Смотри тут, много полезного:
Цитата:
Спасибо, буду разбираться что к чему...
Цитата:
Что-то у меня не получается...
Помогите простеньким исходником!
Допустим, в проге есть функция-1, которая выводит переданное ей сообщение.
Прога загружает первую DLL, в которой есть функция-2 для вывода переданного ей сообщения.
В окне программы есть единственная кнопка, по нажатию - загрузка второй DLL, в которой есть окно с полем ввода и двумя кнопками.
Вводим сообщение и нажимаем на кнопку-1 - сообщение выводится функцией-1, кнопка-2 - функцией-2.
Ну ооочень надо!!!
Код:
А если ф-я, в другом 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);
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);
Первый код работает, второй не проверял, но должен работать..