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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
#1

работа с dll - C++

19.02.2012, 14:21. Просмотров 1504. Ответов 13
Метки нет (Все метки)

помогите мне нужно при нажатии на кнопу в форме передать 2 переменые в длл,
а в длл посчитать суму и передатьобратно в форму
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2012, 14:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос работа с dll (C++):

Работа с DLL - C++
Всем доброго времени суток. Кто может подсказать как в DLL передать переменную, потом в DLL функция её обработает, и как после этого...

Работа с DLL Visual C++ - C++
Добрый день! Есть dll, но она без *.lib, как ей пользоваться если при требуется указывать *.lib ?

Работа с DLL библиотеками - C++
Здравствуйте. Помогите, пожалуйста, переделать программу. Определите следующие функции для работы с массивом: 1) int GetValue(Pairs*...

STL in DLL, нормальная работа не возможна? - C++
Привет! Как известно, STL - это библиотека стандартных шаблонов, то есть template-ная библиотека, но шаблоны экспортировать же нельзя из...

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

Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL - C++
День добрый! При запуске моей программы (много моего кода + много разных сторонних dll) на WinXP SP2, получаем соответствующую ошибку...

13
-=ЮрА=-
Заблокирован
Автор FAQ
19.02.2012, 15:47 #2
Цитата Сообщение от misha1737 Посмотреть сообщение
помогите мне нужно при нажатии на кнопу в форме передать 2 переменые в длл, а в длл посчитать суму и передатьобратно в форму
- ниже ссылка на готовый проект DLL и её клиента Помогите с подключением dll к проекту
Рассмотренное в том топике задание сводилось к написаню 4-х функций с параметрами(сложения, вычитания, умножения и деления 2-х чисел). Числа конечно же вводятся в клиенте, который загружал DLL
1
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
25.02.2012, 23:28  [ТС] #3
я написал по етому примеру дальше немогу разобратся с етими ошибками:
1>------ Построение начато: проект: kurs, Конфигурация: Debug Win32 ------
1> kurs.cpp
1>c:\users\администратор\documents\visual studio 2010\projects\kurs\kurs\Form1.h(13): warning C4272: calc: помечается как __declspec(dllimport); при импорте функции необходимо указать собственное соглашение вызова.
1>dll2.def : error LNK2001: неразрешенный внешний символ "Calc"
1>C:\Users\Администратор\Documents\Visual Studio 2010\Projects\kurs\Debug\kurs.lib : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

C++
1
2
3
4
5
6
7
8
9
10
11
#ifdef __cplusplus
#define IMPORT extern "C" __declspec (dllimport) 
#else
#define IMPORT __declspec (dllimport)
#endif
#pragma comment(lib,"dll2.lib") 
IMPORT int calc(int fa, int fb);
...
 
...
MessageBox::Show("resul"+calc(fa, fb));
помогите очень нужна помощь
0
-=ЮрА=-
Заблокирован
Автор FAQ
25.02.2012, 23:49 #4
misha1737, выложи срр-ники DLL и твоего проекта, пока ничего не могу сказать
(ты что-то не так сделал, вот и не работает)
0
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
26.02.2012, 00:12  [ТС] #5
проект большой там всё работает кроме передачи чисел из основной формы на длл и обратно вот файлы
0
Вложения
Тип файла: txt вторая форма2.txt (12.7 Кб, 8 просмотров)
Тип файла: txt деф-файл.txt (37 байт, 7 просмотров)
Тип файла: txt длл.txt (1.1 Кб, 8 просмотров)
Тип файла: txt основная форма.txt (16.8 Кб, 5 просмотров)
-=ЮрА=-
26.02.2012, 00:32
  #6

Не по теме:

misha1737, ну где вы в С/С++ видели return r,v; (возврат двух значений не являющихся массивом). А учитывая что возвратом от операнд1, операнд2 будет операнд2, (на сколько помню синтактсис запятой) то вообще о корректности работы не приходится. Ясное дело что работать не будет!Я переделаю ваш проект DLL, но уже не сегодня...

1
-=ЮрА=-
Заблокирован
Автор FAQ
26.02.2012, 00:46 #7
misha1737, вот вам ваша 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// calcDLL.cpp : Defines the entry point for the DLL application.
//
 
#include "stdafx.h"
 
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT int calc(int fa, int fb, int &r);
 
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    return TRUE;
}
 
EXPORT int calc(int fa, int fb, int &r) 
{
    int fc=1;
    int fd=7;
    int fm1=9;
    int fm2=3;
    int fm3=4;
    int fm4=2;
    int fm5=1;
    int fm6=3;
    int fx=1;
    int res=0;
    int v,n=0,m=2;
    _asm
    {
        mov eax,fx
        cmp eax,3
        jg met2
 
        mov eax,fa
        mul fa
        idiv fb
        add eax,fm1
        add eax,fm2
        add eax,fm3
        add eax,fm4
        add eax,fm5
        add eax,fm6
        mov r,eax
        mov eax,edx
        mov ebx,10
        mul ebx
        idiv fb
        mov v,eax
        jmp met4
met1:   mov eax,fd
        mul fd
        mov ebx,eax
        mov eax, fb
        mul m
        sub eax, fc
        idiv ebx
        mov r,eax
        mov eax,edx
        mov ebx,10
        mul ebx
        idiv fb
        mov v,eax
        jmp met4
        
 
        jmp met4
met2:   cmp eax,7
        jg met1
        jmp met3
met3:   mov eax, n
        mov r, eax
        mov v, eax
met4: 
    }
    return v;
}
1
Вложения
Тип файла: rar calcDLL_VS6.0_9.0_proj.rar (10.0 Кб, 16 просмотров)
Тип файла: rar calcDLL.dll.rar (18.8 Кб, 11 просмотров)
Тип файла: rar calcDLL.exp.rar (435 байт, 10 просмотров)
Тип файла: rar calcDLL.lib.rar (566 байт, 8 просмотров)
-=ЮрА=-
Заблокирован
Автор FAQ
26.02.2012, 00:49 #8
PS:
misha1737, ещё пара замечаний, у меня в DLL что было написано
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif
, а у вас

C
1
2
3
4
5
#ifdef __cplusplus
#define IMPORT extern "C" __declspec (dllimport) 
#else
#define IMPORT __declspec (dllimport)
#endif
Обратите внимание на синтаксис

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
int calc(int fa, int fb, int &r)
, параметр r передаётся по ссылке, т.е в вызывающем модуле он должен быть объявлен до вызова calc и передан в неё как параметр...
1
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
26.02.2012, 01:09  [ТС] #9
при компиляции длл видаёт ошибку:
1>------ Построение начато: проект: dll2, Конфигурация: Debug Win32 ------
1>mfcs100ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 уже определен в dll2.obj
1> Создается библиотека C:\Users\Администратор\Documents\Visual Studio 2010\Projects\dll2\Debug\dll2.lib и объект C:\Users\Администратор\Documents\Visual Studio 2010\Projects\dll2\Debug\dll2.exp
1>C:\Users\Администратор\Documents\Visual Studio 2010\Projects\dll2\Debug\dll2.dll : fatal error LNK1169: обнаружен многократно определенный символ - один или более
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
-=ЮрА=-
Заблокирован
Автор FAQ
26.02.2012, 11:03 #10
Цитата Сообщение от misha1737 Посмотреть сообщение
1>mfcs100ud.lib(dllmodul.obj) :
-Вы какой тип DLL выбрали, по ошибкам думаю MFC DLL, а следовало Dynamic link library
PS:Зачем вы заморачиваетесь создавая новый код???Я же наверно предвидел что снова возможны проблеммы поэтому и снабдил ответ calcDLL_VS6.0_9.0_proj.rar - готовым откомпилированным проектом. Скачали открыли скомпилировали и всё.
Могу предположить что проект вы запускали не через dsw dsp(WorkSpace Project) файлы, а банально открыли срр-ник и нажали построить - что ж в таком случае вы убили настройки проекта, поэтому удаляйте всё, сохраняйте calcDLL_VS6.0_9.0_proj.rar по новой и открывайте на компиляцию проект только через указанные мной файлы(я на всяк случай их на скрине обвёл)
1
Миниатюры
работа с dll   работа с dll  
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
26.02.2012, 12:00  [ТС] #11
спасибо большое dll компилируется. проблема теперь в основном файле или в деф файле
при компиляции видаёт ошыбку
LINK : fatal error LNK1310: Экспорт не поддерживается для образа MSIL pure
0
-=ЮрА=-
26.02.2012, 13:02
  #12

Не по теме:

misha1737, ну мне выходит и клиента за вас писать надо
Посмотрите внимательно устройство клиента по той ссылке которую бросал и сделайте по аналогии(1 к 1-му ничего не мудрите и от себя не добавляйте). Вы так ничему не научитесь если за вас всё напишу я

1
-=ЮрА=-
Заблокирован
Автор FAQ
26.02.2012, 13:18 #13
Ладно решил написать и клиента
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <windows.h>
#include <iostream>
using namespace std;
 
#ifdef __cplusplus
#define IMPORT extern "C" __declspec (dllimport) 
#else
#define IMPORT __declspec (dllimport)
#endif
#pragma comment(lib,"calcDLL.lib") 
//Объявили импортируемую из DLL функцию
IMPORT int calc(int fa, int fb, int &r);
 
int main()
{
    int v, r = 0;
    v = calc(8, 15, r);
    cout<<"v = "<<v<<endl;
    cout<<"r = "<<r<<endl;
    system("pause");
    return 0;
}
И помните calcDLL.dll либо должна быть зарегестрирована либо лежать в папке проекта клиента. Это же касается и calcDLL.lib - она должна быть скопирована в стандартные каталоги с либами либо лежать в папке проекта клиента
0
Миниатюры
работа с dll  
Вложения
Тип файла: rar ClientCalc_proj.rar (23.9 Кб, 9 просмотров)
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
26.02.2012, 17:03  [ТС] #14
Добавлено через 1 минуту
работают но ето консольное приложения а у меня windows forms может и-за етого выбиивает ошибку, мне кажется что все правильно написано

c:\users\администратор\documents\visual studio 2010\projects\kurs\kurs\Form1.h(13): warning C4272: calc: помечается как __declspec(dllimport); при импорте функции необходимо указать собственное соглашение вызова.
1>LINK : fatal error LNK1310: Экспорт не поддерживается для образа MSIL pure
0
26.02.2012, 17:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 17:03
Привет! Вот еще темы с ответами:

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

Как узнать путь к загруженной DLL из самой DLL? - C++
Создаю небольшую программку в папке c:/test/app/, есть DLL в папке c:/test/dll/. В коде самой dll, после её подгрузки в программу, можно...

Dll файл в exe файле. Вшить dll libcurl - C++
Проблема такая что приходится таскать всегда libcurl.dll с собой. Надо все носить в одном exe. Enigma Virtual Box использовать нельзя,...

Запись из внедренной dll в другую dll этого процесса - C++
main.cpp #include &lt;Windows.h&gt; extern int writeprocess(); DWORD WINAPI MainThread(LPVOID lpParam) { ...


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

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

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