Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
n971030
150 / 97 / 1
Регистрация: 23.01.2010
Сообщений: 1,265
#1

Народ подскажите, чета я забыл DLL как экспортировать - C++

02.08.2012, 13:45. Просмотров 394. Ответов 7
Метки нет (Все метки)

Вот например есть в DLL код функции:

C++
1
2
3
4
5
6
void OpenAbout(HINSTANCE hInst, int cmdMode, HWND hWnds)
{
....
 
return;
}
а из основной программы как вызвать. dll уже готова функция экспортировал так:

C++
1
extern "C" __declspec(dllexport) void OpenAbout(HINSTANCE, int, HWND);
Добавлено через 2 минуты
я ее так вот пытался но не получилось!

C++
1
void OpenAbout(void (*) (HINSTANCE, int, HWND) ) = GetProcAddress(hModul, L"OpenAbout");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 13:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Народ подскажите, чета я забыл DLL как экспортировать (C++):

Как экспортировать структуру из DLL? - C++
Как експортировать структуру из DLL Добавлено через 1 час 5 минут Что же я в тупике?

Как экспортировать интерфейс из dll - C++
делал всё по примеру в инете, не работает код интерфейса struct I_MyInterface { virtual bool Init(int parms)=0; ...

Как экспортировать переменную (константу) из dll - C++
Понимаю что очень глупый вопрос, но нету времени.. Как экспортировать константу и потом ее получить, динамически подгрузив библу. ...

Как импортировать и экспортировать из dll класс? - C++
Помогите, плз. Создал dll: //... class __declspec(dllexport) a { public : a(); }; a::a() {

Как экспортировать функцию из dll? У меня ошибка выдаётся - C++
Как экспортировать ф-ю из dll? У меня ошибка выдаётся

Народ подскажите де ошибка пожалуста! Немогу разобратса((( - C++
Создать функцию, любым методом упорядочивает целочисленных массив. Входящие параметры - указатель на первый элемент, а также размерность...

7
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,797
Записей в блоге: 17
02.08.2012, 14:25 #2
Есть такое для Builder-a, но общий принцип можно посмотреть
Dynamic-Link Library: Теория + Практика
0
n971030
150 / 97 / 1
Регистрация: 23.01.2010
Сообщений: 1,265
02.08.2012, 15:11  [ТС] #3
Цитата Сообщение от Avazart Посмотреть сообщение
Есть такое для Builder-a, но общий принцип можно посмотреть
Dynamic-Link Library: Теория + Практика
не мне не это надо - а обьяснить что означает запись

C++
1
2
3
4
5
6
7
8
9
10
11
                void(*OpenAbout)(HINSTANCE, int, HWND); //<возращаемое значение><имя функции><переменные>
 
 
                //OpenAbout = *OpenAbout;
                OpenAbout = (void(*)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
                //void OpenAbout(void (*) (HINSTANCE)) = GetProcAddress(hModul, L"OpenAbout");
                OpenAbout(hInstA, cmdModeA, hwnd);
 
 
                    break;
                }
в плане не понимаю (точнее есть сомнение в правильности понимания) записи
C++
1
//void OpenAbout(void (*) (HINSTANCE)) = GetProcAddress(hModul, L"OpenAbout");
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,797
Записей в блоге: 17
02.08.2012, 15:15 #4
По ссылке которая вам не надо

C++
1
2
3
4
5
6
typedef void __cdecl (*dll_func)(const int A, const int B);
 
//....
 
// пытаемся найти в таблице экспорта необходимую нам функцию
pShowSum = (dll_func)GetProcAddress(hDLL, "_ShowSum"); // обратите название на название функции (объяснение будет ниже)
в плане не понимаю (точнее есть сомнение в правильности понимания) записи
Читайте про указатели на ф-ции
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2012, 16:40 #5
n971030, посмотри сюда GetFileType и GetCosoleCursorInfo и сюда
http://www.cyberforum.ru/visual-cpp/...ml#post1922643

DLL можно подгружать через LoadLibrary и тогда нужно инициализировать указатели на функции, а можно всё делать через lib файл. В любом случае в твоём коде не хватает этого
C++
1
2
3
4
5
6
7
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT void OpenAbout(HINSTANCE hInst, int cmdMode, HWND hWnds);
перед DllMain (иначе DLL слинкуется без этой функции) а также убери return; оно никчему в функции с типом void
1
n971030
150 / 97 / 1
Регистрация: 23.01.2010
Сообщений: 1,265
02.08.2012, 16:51  [ТС] #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
n971030, посмотри сюда GetFileType и GetCosoleCursorInfo и сюда
http://www.cyberforum.ru/visual-cpp/...ml#post1922643

DLL можно подгружать через LoadLibrary и тогда нужно инициализировать указатели на функции, а можно всё делать через lib файл. В любом случае в твоём коде не хватает этого
C++
1
2
3
4
5
6
7
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT void OpenAbout(HINSTANCE hInst, int cmdMode, HWND hWnds);
перед DllMain (иначе DLL слинкуется без этой функции) а также убери return; оно никчему в функции с типом void
Спасибо, я знаю что в коде нет этого, но я привел маленький пример с которым столкнулся, и сомнительно понимаю последовательность записи. Там очень много скобок, проверьте меня правильно ли понимаю запись:

C++
1
OpenAbout = (void(*)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
<имя функции> = (тип возвращаемый функцией(звездочкаговорит что надо указатель вернуть) (перечисление всех типов переменных)) GetProcAddress (,получает адрес функции указаного по имени);
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,797
Записей в блоге: 17
02.08.2012, 17:19 #7
Что бы не путаться в скобках есть typedef
C++
1
2
3
typedef void /*__cdecl */ (*dll_func)(HINSTANCE, int, HWND);
//.... 
OpenAbout = (dll_func)GetProcAddress(hModul, "OpenAbout");
1
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2012, 17:33 #8
Вот так будет норм
C++
1
OpenAbout = (void(__stdcall)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 17:33
Привет! Вот еще темы с ответами:

Народ гляньте код и подскажите что не так. - C++
Условие: Написать функцию, которая округляет любое вещественное число до определённого количества знаков с математической точностью. ...

Подскажите как хранить перемененные в DLL - C++
Здравствуйте. Я пишу dll функционал которой в приеме данных из одной программы (в которой будет вызвана соответствующая функция по...

Забыл основы. Как вывести чар? - C++
Наибанальнейшая прога не компилируется. //#include &lt;iostream&gt; main () { char A=1; cout&lt;&lt;A&lt;&lt;&quot;\n&quot;; ...

Забыл, как объявить функцию с тем же названием? - C++
Забыл, как объявить ещё одну функцию с тем же названием?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
02.08.2012, 17:33
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru