0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 56
1

Работа с dll

12.11.2013, 09:02. Показов 838. Ответов 4
Метки нет (Все метки)

Здравствуйте!
Пишу программу с dll-кой.
Код написала, все подключила. Но не могу разобраться, как правильно вызвать ее в основной программе. Пишет, что ошибки в файле .object
Подскажите, пожалуйста, где я упустила что-то, и что я вообще делаю не так
Спасибо

Вот код в dll-ке:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
double corel(double N, double x[1000], double y[1000])    //нахождение коэфф. коррел. (N - количество элементов (x[N], y[N]))
{
        int i, k;
        double r, Sxy_chsl, Sxkv, Sx1, Sykv, Sy1;
        for (i=0; i<N; i++)
        {
                for (k=0; k<N; k++)
                {
                        Sx1+=(x[k]/N);
                        Sy1+=(y[k]/N);
                }
 
                Sxy_chsl+=((x[i]-Sx1)*(y[i]-Sy1));
 
                Sxkv+=pow((x[i]-Sx1), 2);
                Sykv+=pow((y[i]-Sy1), 2);
        }
        r=((1/(N-1))*Sxy_chsl)/((sqrt((1/(N-1))*Sxkv))*(sqrt((1/(N-1))*Sykv)));
        return r;
}
Сами элементы (x[N], y[N]) нужно вводить в динамически созданные эдиты в основной программе, а также их количество (N)
Ниже отрывок кода работы с функцией из данной длл из основной программы:
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
void __fastcall TForm1::Button1Click(TObject *Sender)    //создание динамических edit, исходя из количества элементов, введенного в edit1000
{
        int i, j;
        double N;
 
        N=Edit1000->Text.ToDouble();
 
        TEdit *edit[10000];
 
        for (i=0;i<N;i++)
        {
                edit[i] = new TEdit(this);
                edit[i]->Parent = this;
                edit[i]->Name = "edit"+AnsiString(i);
                edit[i]->Height = 20;
                edit[i]->Width = 104;
                edit[i]->Left = 200;
                edit[i]->Top =60 + i * edit[i]->Height;
                edit[i]->Text = AnsiString(i);
                edit[i]->Clear();
        }
        j=0;
        for (i=N; i<2*N; i++)
        {
                edit[i] = new TEdit(this);
                edit[i]->Parent = this;
                edit[i]->Name = "edit"+AnsiString(i);
                edit[i]->Height = 20;
                edit[i]->Width = 104;
                edit[i]->Left = 354;
                edit[i]->Top =60 + j * edit[i]->Height;
                edit[i]->Text = AnsiString(i);
                edit[i]->Clear();
                j++;
        }
 
        Edit1000->Visible=false;
        Label1->Visible=false;
 
        Button2->Enabled=true;
        Button1->Enabled=false;
}
 
 
 
void __fastcall TForm1::Button2Click(TObject *Sender)     //расчет самого коэффициента и вывод ответа
{
        int i, j, k, l;
        double N, R, x[1000], y[1000];
 
        TEdit *edit[10000];
 
        for (i=0; i<N; i++)
                x[i]=edit[i]->Text.ToDouble();
 
        k=0;
        for (i=N; i<2*N; i++)
        {
                y[k]=edit[i]->Text.ToDouble();
                k++;
        }
 
        for (i=0; i<N; i++)
                R = corel(StrToFloat(N), StrToFloat(x[i]), StrToFloat(y[i]));
 
        Label2->Caption="Коэф. коррел. = "+FloatToStrF(R,ffFixed,7,0);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2013, 09:02
Ответы с готовыми решениями:

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

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

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

работа с dll
Проблема такова есть dll в которой есть класс, dll подключена в визуальный проект. На форме в...

4
Практикантроп
4741 / 2647 / 512
Регистрация: 23.09.2011
Сообщений: 5,677
12.11.2013, 13:33 2
Если ошибка при линковке (.obj - ?), то, возможно, к проекту не подключили файл .lib от длл-ки.
1
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.11.2013, 20:15 3
Dynamic-Link Library: Теория + Практика
1
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 56
13.11.2013, 07:48  [ТС] 4
nick42, точно! Забыла подключить...
Спасибо большое!

Но все же, после запуска и ввода всех данных, программа не может вычислить, что нужно. Указывает на строку 54 из второго отрывка кода, приведенного мной:
C++
1
2
for (i=0; i<N; i++)
                x[i]=edit[i]->Text.ToDouble();
По-моему, я как-то неправильно создаю эдиты (в событии Button1Click), либо неправильно их использую (в Button2Click)...
0
Практикантроп
4741 / 2647 / 512
Регистрация: 23.09.2011
Сообщений: 5,677
13.11.2013, 11:50 5
Мое мнение такое: Вы используете ДВА массива эдитов. Пусть название у них одинаковое, но каждый объявлен в своем обработчике. И в обработчике кнопки2 их содержимое плохо предсказуемо. Массив должен быть объявлен глобально, вне функций-обработчиков ButtonClick. Это формировать их можно в обработчиках. Тогда при нажатии Button2 Вы будете использовать информацию ту, которую вводили в эдиты. Но это - только мое частное мнение при беглом взгляде на текст программы.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2013, 11:50
Помогаю со студенческими работами здесь

Работа с dll
Мне для проги надо написать dll'шник, содержащий функцию, считающую факториал. IDE - Embarcadero...

Работа с DLL
Как передать два и более значение функции из DLL библиотеки в Форму?

Работа с dll
Есть функция, которая в качестве параметра принимает множество type TSet = set of AnsiChar; ...

Работа с DLL
Доброе утро. Пытаюсь научиться работать с DLL. Создал но почему то после команды выскакивает ошибка...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru