Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
NatNiM
0 / 0 / 1
Регистрация: 01.05.2009
Сообщений: 68
1

Подключить dll

26.07.2012, 11:54. Просмотров 1970. Ответов 13
Метки нет (Все метки)

Здравствуйте.
Есть dll, в ней несколько функций, необходимо добавить еще одну, чтобы выводила окно с приветствием.
И затем написать win - проект, который будет использовать эту функцию.
В нете нашел информацию, как подключать dll при наличии lib, а если его не будет (lib-а), как тогда подключать и использовать функции?
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2012, 11:54
Ответы с готовыми решениями:

Как подключить dll на C# к проекту (dll) на С++
Подскажите, пожалуйста, как подключить dll на C# к проекту (dll) на С++. В...

Подключить dll к программе
Здравствуйте. Нужна помощь новичку. У меня есть файл, к примеру biblioteka.dll....

Как подключить DLL
Доброе время суток уважаемые участники Пытаюсь написать программу по...

Как подключить в С++ dll-ку из C#?
Создал в Visual Studio dll-ку на C#. Хочу подключить ее в С++, не выходит. ...

Подключить к проекту на C++ DLL написанный на C#
Здравствуйте. Есть ли возможность подключить к проекту на C++, DLL написанный...

13
titans2011
302 / 263 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
26.07.2012, 12:02 2
В вашем случае если есть только dll, нужно использовать явное связывание.
В том месте, где требуется вызвать функцию, нужно написать примерно следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            HMODULE hMod = LoadLibrary("test.dll");
            if(!hMod)
            {
                MessageAboutError(GetLastError());
                return;
            }
            void (*ptr)(тут прописываем параметры, которая принимает функция);
            ptr = (void (*)(тут прописываем параметры, которая принимает функция)) GetProcAddress(hMod,"название функции из библиотеки");
            if(!ptr)
            {
                MessageAboutError(GetLastError());
                return;
            }
            ptr("Передаем параметры в функцию (если есть), через указатель на функцию");
            FreeLibrary(hMod);//освобождаем библиотеку
2
Avazart
Эксперт С++
7723 / 5632 / 549
Регистрация: 10.12.2010
Сообщений: 25,402
Записей в блоге: 17
26.07.2012, 13:22 3
Попробывать сгенерить с помощью implib, impdef

Dynamic-Link Library: Теория + Практика
http://www.cyberforum.ru/blogs/131347/blog478.html
http://www.cyberforum.ru/blogs/131347/
0
NatNiM
0 / 0 / 1
Регистрация: 01.05.2009
Сообщений: 68
26.07.2012, 17:29  [ТС] 4
Avazart, нужно как раз имея только dll (к сожалению).
А можно какой-нибудь пример, я пробую, ругается на HMODULE.
И не пойму как в dll описать запуск win-окна.
0
Avazart
Эксперт С++
7723 / 5632 / 549
Регистрация: 10.12.2010
Сообщений: 25,402
Записей в блоге: 17
26.07.2012, 18:03 5
Повторяю
Цитата Сообщение от Я
Попробывать сгенерить с помощью implib, impdef
Добавлено через 10 минут
Код
impdef  x.def x.dll // Результат x.def (заглядываем в него, правим если необходимо)
implib  x.lib x.def // Результат x.lib
Добавлено через 2 минуты
А можно какой-нибудь пример, я пробую, ругается на HMODULE.
Я же привел??? Первая ссылка!!

А еще нужно обязательно иметь h-файл к ваше dll или хотябы знать объявление "вытаскиваемых ф-ций"
0
NatNiM
0 / 0 / 1
Регистрация: 01.05.2009
Сообщений: 68
27.07.2012, 08:57  [ТС] 6
Пробовал пример по первой ссылке, ошибка при компилировании dll:
C++
1
2
3
4
5
6
#include "DLL.h" // создание этого заголовочного файла будет описано ниже
//---------------------------------------------------------------------------
void ShowSum(const int A, const int B)
{
  ShowMessage(IntToStr(A) + " + " + IntToStr(B) + " = " + IntToStr(A + B));
}
ругается на
C++
1
ShowMessage
,
C++
1
IntToStr
.
Файл def со списком экспортированных функций есть.
0
Avazart
Эксперт С++
7723 / 5632 / 549
Регистрация: 10.12.2010
Сообщений: 25,402
Записей в блоге: 17
27.07.2012, 09:01 7
Ну так уберите его или подключите vcl.h
Файл def со списком экспортированных функций есть.
Ну так сделайте из него lib
0
titans2011
302 / 263 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
27.07.2012, 09:21 8
Я забыл сказать, что это пример подключение не для консоли, а на WinApi, попробуйте подключить Windows.h
0
NatNiM
0 / 0 / 1
Регистрация: 01.05.2009
Сообщений: 68
27.07.2012, 09:36  [ТС] 9
В дальнейшем понадобится эта библиотека, а как можно подключить ее (Studio 2010), где-то нужно задать ссылку?
0
Avazart
Эксперт С++
7723 / 5632 / 549
Регистрация: 10.12.2010
Сообщений: 25,402
Записей в блоге: 17
27.07.2012, 09:51 10
Все с меня хватит... я удаляюсь с этой темы, меня поражает не внимательность ТС или/и тупой игнор ссылок которые я привел.
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
27.07.2012, 10:12 11
Чтобы загрузить dll в память нужно загрузить dll в память:

C++
1
LoadLibrary (ima_modula);
Возвернёт дескриптор модуля (адрес загрузки), насколько я помню
0
NatNiM
0 / 0 / 1
Регистрация: 01.05.2009
Сообщений: 68
30.07.2012, 16:04  [ТС] 12
Вот, к примеру часть кода cpp для dll:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
extern "C++" __declspec(dllexport) void Window()
 {
 
  HINSTANCE instanceHandle;
  HWND MainWindowHandle = 0;
  MainWindowHandle = CreateWindow(
                            LPCWSTR(sum("lib.dll").c_str()),
                            LPCWSTR(sum("lib.dll").c_str()),
                            WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT, 
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            0,
                            0, 
                            instanceHandle,
                            0);
 }
И вот я пытаюсь загрузить ее:

C++
1
2
3
4
5
6
7
8
HMODULE hModule = LoadLibrary(TEXT("dtcd_01m_k1_3x.dll"));
typedef int ( *Wind)(); 
Wind lpClientInit = (Wind)GetProcAddress(hModule,"Window");
lpClientInit();
FreeLibrary(hModule);
 
Вылетает ошибка на предпоследней строчке.
Подскажите, пожалуйста, что не так делаю.
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
30.07.2012, 16:10 13
Цитата Сообщение от kravam Посмотреть сообщение
Чтобы загрузить dll в память нужно загрузить dll в память:

C++
1
LoadLibrary (ima_modula);
Возвернёт дескриптор модуля (адрес загрузки), насколько я помню
уточно: не адрес загрузки, а HANDLE

Добавлено через 3 минуты
C++
1
2
3
4
5
Wind lpClientInit = (Wind)GetProcAddress(hModule,"Window");
if (lpClientInit == NULL){
   int errorCode = GetLastError();
} else {
// все хорошо
и посмотреть, чему равен этот errorCode
0
NatNiM
0 / 0 / 1
Регистрация: 01.05.2009
Сообщений: 68
30.07.2012, 18:05  [ТС] 14
вот этому равен: -858993460

Добавлено через 1 час 45 минут
и что это значит?
0
30.07.2012, 18:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2012, 18:05

Подключить библ. bass.dll
Дорогие друзья, прошу помочь! И заранее всех откликнувшихся благодарю! Есть у...

Как подключить dll к проекту?
Ребят помогите пожалуйста, если сможете а то я уже 3 дня долбаюсь чет никак не...

Где подключить файл dll в CodeBloks?
Код нормально компилируется без ошибок и файл ехе создается и в самой программе...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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