![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
kerser |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Функция в 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 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Передать функцию asd из приложения в dll при инициализации последней. Явный экспорт функций из exe в dll невозможен (IMHO).
Можно еще попробовать динамически через GetProcAddress(GetModuleHandle(NULL),"asd"). Но функция asd в таком случае должна экспортироваться из exe (например через __declspec( dllexport) ) |
|||
|
||||
kerser |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Есть приложение 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 |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Нужно GetModuleHandle(NULL) - вернет handle приложения
__declspec(dllexport) int __stdcall qw(int); скобками extern "C" :
|
||||||||
|
|||||||||
kerser |
|
||||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Переделал так
В dll:
В qwert.h
GetProcAddress возвращает 0, не пойму, где ошибка |
||||
|
|||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Таблицу экспорта не дано посмотреть?
|
|||
|
||||
kerser |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
С помощью dumpbin смотрю таблицу импорта dll (хотя я ее и не вижу):
Таблица экспорта dll, но здесь все нормально, dll экспортирует функцию func:
Таблица экспорта приложения qwert (ее тоже нет):
Т. е. получается, что функция qw не импортируется в длл, и не экспортируется из приложения? GetProcAddress возвращает 0. Подскажите, пожалуйста, что не правильно. |
||||||
|
|||||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Значит, в приложении дело.
|
|||
|
||||
kerser |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Таблица экспорта приложения qwert, где находится функция, которую надо вызвать из dll:
А вот таблицы импорта dll нет, чего я только уже не делал. |
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
О! Экспорт уже появился (только почему то без подчеркивания).
|
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |