Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239

Не вызвать функцию с DLL

13.07.2010, 17:14. Показов 1533. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тут такая проблема с DLL!!! Обьясните, что я делаю не так
Сама DLL
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vcl.h>
#include <windows.h>
#include "Test.h"
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
 
float Sum(float a, float b, float c) {  // функция сложения двух чисел
    c = a + b;
    return c;
}
//---------------------------------------------------------------------------
Файл Test.h
C++
1
2
3
4
5
6
7
8
9
10
#ifndef _TEST_H
#define _TEST_H
 
#ifdef __DLL__
#define DLL_EI __declspec(dllexport)
#else
#define DLL_EI __declspec(dllimport)
#endif
extern "C" float DLL_EI Sum(float);
#endif
Ну и вызывающее приложение
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
#include <vcl.h>
#pragma hdrstop
 
#include "VZ.h"
#include "Test.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    float a, b, c;
    a = StrToFloat(Edit1->Text);
    b = StrToFloat(Edit2->Text);
    c = Sum(float); // ругается на этой строчке
    Label1->Caption = c;
}
//---------------------------------------------------------------------------
lib-файл добавил!!!
Выкидывает такую ошибку [BCC32 Error] VZ.cpp(23): E2188 Expression syntax
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.07.2010, 17:14
Ответы с готовыми решениями:

BASS.DLL - вызвать функцию BASS_ChannelGetData без прослушивания песни
Каким способом вызвать функцию BASS_ChannelGetData без прослушивания песни? Или это делается не с помощью библиотеки bass?

Не могу вызвать функцию из .dll
Добрый день ... Полазил по форумам и гайдам .... Пишу такой вот header: extern &quot;C++&quot; __declspec(dllexport) int function (int,int); ...

Как вызвать функцию .exe из .dll?
Надо как то вызвать функцию которая объявлена и определена в .exe из .dll, не юзая хуки, что можно придумать? В момент запуска .exe, .exe...

7
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
13.07.2010, 17:18
Игорь98, смотрите:
C++
1
2
3
float Sum(float a, float b) {
       return a+b; //Можно сделать так, я думаю. Зачем передавать c, если ее же возвращаете?
       }
А когда вызываете:
C++
1
 c = Sum(float);
Может быть стоит сделать так:
C++
1
 c = Sum(a,b);
0
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239
13.07.2010, 17:36  [ТС]
Все сделал как написано выше, но компилятор выдал новую ошибку
[BCC32 Error] VZ.cpp(23): E2227 Extra parameter in call to Sum(float)
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
13.07.2010, 17:52
Игорь98, не знаю, с dll никогда особо не дружил, может быть ошибка в вызове из самой DLL, но функция такого вида вызывается нормально:
C++
1
2
3
4
5
6
7
8
9
10
11
12
   float Sum(float a, float b) {  
        return a+b;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 float a, b, c;
        a = StrToFloat(Edit1->Text);
        b = StrToFloat(Edit2->Text);
        c = Sum(a,b);
        Label1->Caption = c;
}
//---------------------------------------------------------------------------
1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
13.07.2010, 19:42
Игорь98, ясное дело, что будет экстра-параметр ...
Сравните прототип функции, которую даёте на экспорт, с тем прототипом, который реален:
C++
1
extern "C" float DLL_EI Sum(float);
C++
1
float Sum(float a, float b, float c)
---

Правильно было бы так:

1. Сама функия в cpp файле библиотеки:
C++
1
2
3
float Sum(float a, float b) {  // функция сложения двух чисел
  return a + b;
}
2. В заголовочном файле библиотеки:
C++
1
extern "C++" float DLL_EI Sum(float, float);
3. Пример использования в программе:
C++
1
2
3
4
5
6
#include "Test.h"
#pragma link "Test.lib"
// ...
float a = 1.5;
float b = 0.5;
float sum = Sum(a,b);
0
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239
13.07.2010, 20:45  [ТС]
хм теперь следующая ошибка
[ILINK32 Error] Error: Unresolved external '_Sum' referenced from M:\QWERTY\VZ\DEBUG\QWE.OBJ
опять бред пошел!!!
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
13.07.2010, 20:48
Игорь98, а вы подставили свой lib-файл вместо моего в этой строчке:
C++
1
#pragma link "Test.lib"
???

То, что я вам советовал - я проверил на своей машине.
1
37 / 37 / 5
Регистрация: 12.02.2010
Сообщений: 239
13.07.2010, 22:15  [ТС]
Большое спасибо все заработало!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.07.2010, 22:15
Помогаю со студенческими работами здесь

Как из DLL вызвать функцию, находящуюся в exe?
Плз. скажите, как из DLL вызвать функцию, находящуюся в exe'шнике. Плз.! Плз.! Плз.!

Вызвать функцию из dll с неопределённым числом параметров
Нужно вызвать из dll функцию с неопределённым числом параметров. пока что работаю с таким вызовом char res; char (*dll) (char* ...);...

Не могу вызвать функцию из dll С++ в С# в системе Win 7 64bit, MSVS 2008
Здравствуйте! Уже два дня не могу вызвать функцию из dll C++ в программе, написанная в C#. Программа пишется в MS VS 2008 Win 7 64bit. ...

Как вызвать функцию, описанную в DLL через Custom Action в wix?
Не нашел подходящего раздела для вопроса, поэтому решил сделать здесь, тк DLL написана на c++! Вот сама DLL:#include &lt;stdio.h&gt; ...

Вызвать функцию c++ из .dll
Имеется dll написанный на с++. В нем одна из вызываемых функций имеет вид extern &quot;C&quot; { /* ADF Test with pointer ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
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. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru