Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 56

Совмещение с DLL

26.07.2013, 09:53. Показов 1308. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Такая задача. У меня есть программка, которая проводит некоторые вычисления. Теперь, отдельно от этой программы мне нужно создать точно такую же, но в DLL. При этом открываться на выполнение должна первая, но вычисления должны проводиться во второй. То есть я ввожу значения, по которым проводятся вычисления, в программу, которую написала как обычно через проект в с++, затем эти данные каким-то образом должны передаться в DLL, там должны пройти вычисления, и в конце, уже готовый результат должен снова вернуться в первую программку, и та, в свою очередь, вывести результаты на экран. (Возможно, мне нужно просто написать программку в DLL, используя интерфейс первой программки (форму), но задача была поставлена именно так, как я описала выше).
Еще не приходилось ни разу сталкиваться с DLL, возможно кто-то понял, что мне нужно сделать и поможет советами, хотя бы с чего начать и как это можно реализовать.
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.07.2013, 09:53
Ответы с готовыми решениями:

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual Studio 2013. При компиляции выдает ошибку...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

Затупил, скажите где взять libmysqld.dll, libmysqld50.dll, libmysqld51.dll
Вечер добрый, ставлю ZEOS на Delphi 7, и для нормальной работы нужны файлы libmysqld.dll, libmysqld50.dll, libmysqld51.dll. Но я нигде...

13
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.07.2013, 10:53
Вам из своей программки просто нужно будет вызывать функции из длл (все как и раньше: передаете функции параметры, получаете от нее результат). Для этого к своему приложению прикрепите библиотеку длл (файл lib, создастся при компиляции длл) и подключите h-файл длл (#include mydll.h). Вот, для примера, простой файл Unit2.cpp для создания длл__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//---------------------------------------------------------------------------
#include "testdll.h"
#pragma hdrstop
//---------------------------------------------------------------------------
float GetVers()
{
   float ver = 4.22 ;
   return ver ;
}
//---------------------------------------------------------------------------
int GetVremja()
{
   int vre = 0x00000022;
   return vre;
}
//---------------------------------------------------------------------------
и хэдэр-файл для него__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef __TESTDLL_H
#define __TESTDLL_H
 
#define TESTDLL_EXPORTS
 
#ifdef TESTDLL_EXPORTS
#define DLL_SPEC extern "C" __declspec(dllexport)
#else
#define DLL_SPEC extern "C" __declspec(dllimport)
#endif // TESTDLL_EXPORTS
 
DLL_SPEC float GetVers();
DLL_SPEC int GetVremja();
 
#endif // __TESTDLL_H
А вот так это будет выглядеть в программе:__
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
      float ver = GetVers();
      int  vrem = GetVremja();
      Label2->Caption = IntToStr(vrem);
      Label3->Caption = FloatToStrF(ver,ffFixed,5,2);
}
Здесь все упрощено; функции длл возвращают константы, но это лишь для образца. Если это сделать получится, то дальше в длл зарисуете свои функции, которые до этого были в программе... .
1
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 56
26.07.2013, 11:12  [ТС]
nick42, спасибо большое! Буду разбираться, пробовать.
Вопрос: 1 кусочек кода создан через dll, а 3-ий - это уже запись в отдельном проекте, с формой и т.п., правильно?
Т.е. я могу просто свою программку переделать, написав вместо вычислений обращения к функциям из dll (при этом, изначально, создав файл dll с хэдером), где записаны непосредственно сами формулы, да?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.07.2013, 11:41
Да. Первым делом советую создать проект для длл и получить при его компиляции саму длл с либ - и 0 ошибок. Хорошо, если есть средство просмотра экспорта длл, - там вы должны увидеть что-то наподобие...
1
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 56
26.07.2013, 11:43  [ТС]
nick42, еще раз спасибо!!
0
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 56
29.07.2013, 13:23  [ТС]
nick42, а Вы не подскажете, каким образом мне ввод в эдиты инициализировать?
И записать это нужно же в основную программу, а затем как-то вызывать в длл?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.07.2013, 13:50
Цитата Сообщение от grain Посмотреть сообщение
nick42, а Вы не подскажете, каким образом мне ввод в эдиты инициализировать?
И записать это нужно же в основную программу, а затем как-то вызывать в длл?
.. не советую. Возможно и при вызове длл форму строить, но вы же можете значения на эдиты в основной форме получить, а результат обработки пусть длл возвращает (так ведь было задумано?).
0
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 56
29.07.2013, 14:04  [ТС]
nick42, да, именно так. Не совсем понимаю только, как это сделать. Не напишите поподробней?
А на счет формы - так у меня только одна форма - основная, в основном проекте. А должны быть еще?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.07.2013, 14:55
Возможно я не правильно вас понял, поэтому лучше на примере.
В архиве два проекта: создание длл и простая форма с двумя эдитами и кнопкой. При нажатии на кнопку в длл посылается запрос с двумя параметрами (числа с плавающей точкой, считанные с эдитов). В ответ на этот запрос длл посылает рассчитанную сумму, которая будет помещена в лэйбл. Там все очень просто; если разберетесь, то легко сможете переместить свои функции из программы в длл, а ввод нужных данных организовать через эдиты.
Вложения
Тип файла: rar 26.RAR (27.2 Кб, 3 просмотров)
1
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 56
29.07.2013, 14:59  [ТС]
nick42, о, спасибо огромное!
Надеюсь, разберусь
0
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 56
08.08.2013, 13:21  [ТС]
nick42, добрый день)
Уже несколько дней не могу понять, в чем мои ошибки, по нескольку раз переписывала все. Так вот, Вы не подскажете, что не так, только не ругайтесь сильно, если совсем худо дело...
P.S: dll-ку подключила к основному проекту. Правда, статически, а динамическим связыванием, потому как со статикой тоже проблемы возникли -_-
Вот одна из функций (самая коротенькая ).
В dll:
C++
1
2
3
4
5
6
7
8
9
10
11
double Est(double fi0, double lyam0, double h0, double fi1, double lyam1, double h1)
{
        double dl, cosd, L;
        dl = lyam1 - lyam0;
        cosd=((sin(fi0*3.14/180))*(sin(fi1*3.14/180)))+((cos(fi0*3.14/180))*(cos(fi1*3.14/180))*(cos(dl*3.14/180)));
        const float Rz=6371;
 
        L=sqrt(((Rz+h0)*(Rz+h0))+((Rz+h1)*(Rz+h1))-(2*(Rz+h0)*(Rz+h1)*cosd));
 
        return L;
}
Вызов в основной:
C++
1
2
3
double estim = Est(StrToFloat(Edit1->Text),StrToFloat(Edit2->Text),StrToFloat(Edit3->Text),StrToFloat(Edit4->Text),StrToFloat(Edit5->Text),StrToFloat(Edit6->Text));
        Label7->Caption="Расстояние = "+FloatToStr(RoundTo(estim, -2))+" км";
        Label7->Visible=true;
В хэдере основной:
C++
1
2
typedef double (*EST)(double,double,double,double,double,double);
        EST Est;
И в хэдере для dll:
C++
1
__declspec( dllexport ) double Est(double fi0, double lyam0, double h0, double fi1, double lyam1, double h1);
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.08.2013, 14:22
Во вложении (архив 44) - два проекта (по Вашему коду); у длл всего одна функция (самая коротенькая). Программа что-то там выдает в лэйбл, - я надеюсь: то, что ей задали. Изменений я сделал пару, ну, может, три - не помню уже. Так что в основном у Вас все верно. Найдите эти "три отличия" и попробуйте в таком же тоне описать остальные функции (конечно, если с этой "коротенькой" все получилось...).
Вложения
Тип файла: rar 44.RAR (184.9 Кб, 3 просмотров)
1
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 56
08.08.2013, 14:30  [ТС]
nick42, спасибо еще раз! Буду разбираться
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.08.2013, 14:39
Возможно, будут проблемы с файлом testdll.bpr. Тогда подмените его этим (во вложении), я его "подчистил".
Вложения
Тип файла: rar testdll.rar (1.3 Кб, 1 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.08.2013, 14:39
Помогаю со студенческими работами здесь

Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll
В связи с тем, что часто возникают одни и те же вопросы, а в нете копаться никто не любит привожу перевод буржуйской вики по отлучению...

Совмещение ПР
Подскажите как сделать чтобы у сайта без WWW был такой же ПР , что и у сайта с WWW? Сайт infocon.ru

Совмещение шейдеров
Допустим, у меня есть шейдер для отрисовки анимированной модели. Я хочу написать еще один шейдер, в который буду передавать позицию, цвет и...

Совмещение локалок
В общем такая проблема. Есть сервер, он же центральный компьютер, который подключается к интернету и расшаривает подключение на роутер....

Совмещение языков
С праздником программистов всех! У меня вопрос насчет плаформы .NET. Я с другом хотим написать программу. Но он пишет на C++, а я на...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru