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

Подключить dll - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
NatNiM
0 / 0 / 0
Регистрация: 01.05.2009
Сообщений: 68
26.07.2012, 11:54     Подключить dll #1
Здравствуйте.
Есть dll, в ней несколько функций, необходимо добавить еще одну, чтобы выводила окно с приветствием.
И затем написать win - проект, который будет использовать эту функцию.
В нете нашел информацию, как подключать dll при наличии lib, а если его не будет (lib-а), как тогда подключать и использовать функции?
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
titans2011
294 / 255 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
26.07.2012, 12:02     Подключить dll #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);//освобождаем библиотеку
Avazart
Нарушитель
6954 / 5192 / 256
Регистрация: 10.12.2010
Сообщений: 22,778
Записей в блоге: 17
26.07.2012, 13:22     Подключить dll #3
Попробывать сгенерить с помощью implib, impdef

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

А еще нужно обязательно иметь h-файл к ваше dll или хотябы знать объявление "вытаскиваемых ф-ций"
NatNiM
0 / 0 / 0
Регистрация: 01.05.2009
Сообщений: 68
27.07.2012, 08:57  [ТС]     Подключить dll #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 со списком экспортированных функций есть.
Avazart
Нарушитель
6954 / 5192 / 256
Регистрация: 10.12.2010
Сообщений: 22,778
Записей в блоге: 17
27.07.2012, 09:01     Подключить dll #7
Ну так уберите его или подключите vcl.h
Файл def со списком экспортированных функций есть.
Ну так сделайте из него lib
titans2011
294 / 255 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
27.07.2012, 09:21     Подключить dll #8
Я забыл сказать, что это пример подключение не для консоли, а на WinApi, попробуйте подключить Windows.h
NatNiM
0 / 0 / 0
Регистрация: 01.05.2009
Сообщений: 68
27.07.2012, 09:36  [ТС]     Подключить dll #9
В дальнейшем понадобится эта библиотека, а как можно подключить ее (Studio 2010), где-то нужно задать ссылку?
Avazart
Нарушитель
6954 / 5192 / 256
Регистрация: 10.12.2010
Сообщений: 22,778
Записей в блоге: 17
27.07.2012, 09:51     Подключить dll #10
Все с меня хватит... я удаляюсь с этой темы, меня поражает не внимательность ТС или/и тупой игнор ссылок которые я привел.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,302
27.07.2012, 10:12     Подключить dll #11
Чтобы загрузить dll в память нужно загрузить dll в память:

C++
1
LoadLibrary (ima_modula);
Возвернёт дескриптор модуля (адрес загрузки), насколько я помню
NatNiM
0 / 0 / 0
Регистрация: 01.05.2009
Сообщений: 68
30.07.2012, 16:04  [ТС]     Подключить dll #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);
 
Вылетает ошибка на предпоследней строчке.
Подскажите, пожалуйста, что не так делаю.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
30.07.2012, 16:10     Подключить dll #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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2012, 18:05     Подключить dll
Еще ссылки по теме:

C++ Вызов Dll-фий в другой Dll
Как подключить DLL C++
Подключить к проекту на C++ DLL написанный на C# C++
Обращение к ресурсам DLL из самой DLL C++
C++ Как создать файл DLL так, чтобы его можно было подключить к VBA Excel?

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

Или воспользуйтесь поиском по форуму:
NatNiM
0 / 0 / 0
Регистрация: 01.05.2009
Сообщений: 68
30.07.2012, 18:05  [ТС]     Подключить dll #14
вот этому равен: -858993460

Добавлено через 1 час 45 минут
и что это значит?
Yandex
Объявления
30.07.2012, 18:05     Подключить dll
Ответ Создать тему
Опции темы

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