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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
19.02.2012, 14:21     работа с dll #1
помогите мне нужно при нажатии на кнопу в форме передать 2 переменые в длл,
а в длл посчитать суму и передатьобратно в форму
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2012, 14:21     работа с dll
Посмотрите здесь:

Работа с DLL C++
Подгрузка dll через dll C++
Работа с DLL библиотеками C++
ребят, посоветуйте пожалуйста толковую литературу (работа с dll) C++
C++ Вызов dll ресурсов в dll
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
19.02.2012, 15:47     работа с dll #2
Цитата Сообщение от misha1737 Посмотреть сообщение
помогите мне нужно при нажатии на кнопу в форме передать 2 переменые в длл, а в длл посчитать суму и передатьобратно в форму
- ниже ссылка на готовый проект DLL и её клиента Помогите с подключением dll к проекту
Рассмотренное в том топике задание сводилось к написаню 4-х функций с параметрами(сложения, вычитания, умножения и деления 2-х чисел). Числа конечно же вводятся в клиенте, который загружал DLL
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
25.02.2012, 23:28  [ТС]     работа с dll #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));
помогите очень нужна помощь
-=ЮрА=-
Заблокирован
Автор FAQ
25.02.2012, 23:49     работа с dll #4
misha1737, выложи срр-ники DLL и твоего проекта, пока ничего не могу сказать
(ты что-то не так сделал, вот и не работает)
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
26.02.2012, 00:12  [ТС]     работа с dll #5
проект большой там всё работает кроме передачи чисел из основной формы на длл и обратно вот файлы
Вложения
Тип файла: 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, но уже не сегодня...

-=ЮрА=-
Заблокирован
Автор FAQ
26.02.2012, 00:46     работа с dll #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;
}
Вложения
Тип файла: 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     работа с dll #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 и передан в неё как параметр...
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
26.02.2012, 01:09  [ТС]     работа с dll #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 ==========
-=ЮрА=-
Заблокирован
Автор FAQ
26.02.2012, 11:03     работа с dll #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 по новой и открывайте на компиляцию проект только через указанные мной файлы(я на всяк случай их на скрине обвёл)
Миниатюры
работа с dll   работа с dll  
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
26.02.2012, 12:00  [ТС]     работа с dll #11
спасибо большое dll компилируется. проблема теперь в основном файле или в деф файле
при компиляции видаёт ошыбку
LINK : fatal error LNK1310: Экспорт не поддерживается для образа MSIL pure
-=ЮрА=-
26.02.2012, 13:02
  #12

Не по теме:

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

-=ЮрА=-
Заблокирован
Автор FAQ
26.02.2012, 13:18     работа с dll #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 - она должна быть скопирована в стандартные каталоги с либами либо лежать в папке проекта клиента
Миниатюры
работа с dll  
Вложения
Тип файла: rar ClientCalc_proj.rar (23.9 Кб, 9 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 17:03     работа с dll
Еще ссылки по теме:

Работа с DLL Visual C++ C++
C++ Вызов Dll-фий в другой Dll
C++ STL in DLL, нормальная работа не возможна?

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

Или воспользуйтесь поиском по форуму:
misha1737
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 16
26.02.2012, 17:03  [ТС]     работа с dll #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
Yandex
Объявления
26.02.2012, 17:03     работа с dll
Ответ Создать тему
Опции темы

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