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

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

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

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

02.08.2012, 13:45. Просмотров 384. Ответов 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");
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 13:45     Народ подскажите, чета я забыл DLL как экспортировать
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
7100 / 5277 / 267
Регистрация: 10.12.2010
Сообщений: 23,266
Записей в блоге: 17
02.08.2012, 14:25     Народ подскажите, чета я забыл DLL как экспортировать #2
Есть такое для Builder-a, но общий принцип можно посмотреть
Dynamic-Link Library: Теория + Практика
n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,192
02.08.2012, 15:11  [ТС]     Народ подскажите, чета я забыл DLL как экспортировать #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");
Avazart
7100 / 5277 / 267
Регистрация: 10.12.2010
Сообщений: 23,266
Записей в блоге: 17
02.08.2012, 15:15     Народ подскажите, чета я забыл DLL как экспортировать #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"); // обратите название на название функции (объяснение будет ниже)
в плане не понимаю (точнее есть сомнение в правильности понимания) записи
Читайте про указатели на ф-ции
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2012, 16:40     Народ подскажите, чета я забыл DLL как экспортировать #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
n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,192
02.08.2012, 16:51  [ТС]     Народ подскажите, чета я забыл DLL как экспортировать #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 (,получает адрес функции указаного по имени);
Avazart
7100 / 5277 / 267
Регистрация: 10.12.2010
Сообщений: 23,266
Записей в блоге: 17
02.08.2012, 17:19     Народ подскажите, чета я забыл DLL как экспортировать #7
Что бы не путаться в скобках есть typedef
C++
1
2
3
typedef void /*__cdecl */ (*dll_func)(HINSTANCE, int, HWND);
//.... 
OpenAbout = (dll_func)GetProcAddress(hModul, "OpenAbout");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 17:33     Народ подскажите, чета я забыл DLL как экспортировать
Еще ссылки по теме:

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

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

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

Народ как работать с Randomom - C++
Ругается на rand: нет перегруженной функции, принимающей 1 аргументов #include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2012, 17:33     Народ подскажите, чета я забыл DLL как экспортировать #8
Вот так будет норм
C++
1
OpenAbout = (void(__stdcall)(HINSTANCE, int, HWND)) GetProcAddress(hModul, "OpenAbout");
Yandex
Объявления
02.08.2012, 17:33     Народ подскажите, чета я забыл DLL как экспортировать
Ответ Создать тему
Опции темы

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