| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > вызов функции из dll |
| Автор: kerser 26.4.2008, 10:13 |
| Функция в dll должна вызвать функцию, которая находится в windows-приложении. Т. е. bool func() { double pr=1.2; if (asd(pr)) //функция в windows-приложении return 1; else return 0; } В windows-приложении: bool asd(double pr) { return 1; } При компиляции выдаются ошибки: [Linker error] undefined reference to `_Z10asdd@8' ld returned 1 exit status c:\Dev-Cpp\KT\Makefile.win [Build Error] [Ktdll.dll] Error 1 ide - dev-c++ |
| Автор: xvr 28.4.2008, 10:44 |
| Передать функцию asd из приложения в dll при инициализации последней. Явный экспорт функций из exe в dll невозможен (IMHO). Можно еще попробовать динамически через GetProcAddress(GetModuleHandle(NULL),"asd"). Но функция asd в таком случае должна экспортироваться из exe (например через __declspec( dllexport) ) |
| Автор: kerser 29.4.2008, 18:22 | ||
Есть приложение proc5. В нем вызываю ф-цию func из dll: case WM_PAINT: { PAINTSTRUCT ps; char str[3]; int a=func(12); // функция func находится в dll wsprintf(str, "%d", a); HDC hDC=BeginPaint(hwnd, &ps); TextOut(hDC, 10, 10, str, 3); EndPaint(hwnd, &ps); break; } В dll в ф-ции func вызываю ф-цию qw, которая находится в приложении qwert: int func(int k) { typedef int (*ggg) (int); HMODULE hm=GetModuleHandle("qwert.exe"); ggg aaa=(ggg)GetProcAddress(hm, "qw"); // функция qw находится в приложении qwert k=k+7; if (aaa!=0) { k=aaa(k); } return k; } В qwert.h: __declspec(dllexport) int __stdcall qw(int); В qwert.cpp: int qw(int k) { k=k+1000; return k; } Ошибка в том, что ф-ция GetModuleHandle возвращает 0. Подскажите, пожалуйста, как исправить. |
| Автор: xvr 29.4.2008, 20:59 | ||||||||
Нужно GetModuleHandle(NULL) - вернет handle приложения
__declspec(dllexport) int __stdcall qw(int); скобками extern "C" :
|
| Автор: kerser 29.4.2008, 21:40 | ||||
| Переделал так В dll:
В qwert.h
GetProcAddress возвращает 0, не пойму, где ошибка |
| Автор: 586 29.4.2008, 22:40 |
| Таблицу экспорта не дано посмотреть? |
| Автор: kerser 1.5.2008, 15:09 | ||||||
С помощью dumpbin смотрю таблицу импорта dll (хотя я ее и не вижу):
Таблица экспорта dll, но здесь все нормально, dll экспортирует функцию func:
Таблица экспорта приложения qwert (ее тоже нет):
Т. е. получается, что функция qw не импортируется в длл, и не экспортируется из приложения? GetProcAddress возвращает 0. Подскажите, пожалуйста, что не правильно. |
| Автор: kerser 3.5.2008, 06:46 | ||
Таблица экспорта приложения qwert, где находится функция, которую надо вызвать из dll:
А вот таблицы импорта dll нет, чего я только уже не делал. |
| Автор: xvr 3.5.2008, 08:50 | ||||||
О! Экспорт уже появился (только почему то без подчеркивания).
|