Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
1

Подключение DLL сделанной на delphi

25.12.2012, 00:02. Просмотров 3110. Ответов 9
Метки нет (Все метки)

Всем привет. У меня есть 1) с++ Empty project в студии 2012 2) dll сделанная на Delphi. В dll функция возвращающая integer. Задача использовать функцию в коде с++ и результат записать в переменную int. Как это сделать ?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2012, 00:02
Ответы с готовыми решениями:

подключение dll
Подскажите в чем проблема Текст Prog.cpp #include <windows.h> #include...

подключение dll
Подключаю dll и при определении класса из dll вылезают такие ошибки, помогите...

Подключение dll - ошибка
Собрал свою dll и header .... Далее закинул их в папку с проектом и добавил в...

Подключение dll библиотеки
Создал консольное приложение, там файл .h и cpp забил нужные функции и...

Подключение dll библиотеки
Привет. Для работы с шаговым двигателем мне необходимо воспользоваться...

9
palva
3115 / 2245 / 452
Регистрация: 08.06.2007
Сообщений: 8,161
Записей в блоге: 4
25.12.2012, 00:16 2
Вот здесь почитайте http://ru.wikibooks.org/wiki/DLL
Естественно DLL должна быть нормально написана, не запрашивать память явным или неявным образом, в частности не использовать длинные строки и, естественно, не содержать обращений к VCL.
1
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
25.12.2012, 00:47  [ТС] 3
Подскажите пожалуйста как реализовать
* Указываем, что тело функции находится в другом файле.
* Не забыть про объектный модуль DLL при линковке
Это написано на http://ru.wikibooks.org/wiki/DLL в импорте из DLL C++
0
palva
3115 / 2245 / 452
Регистрация: 08.06.2007
Сообщений: 8,161
Записей в блоге: 4
25.12.2012, 01:26 4
Если у вас студия Микрософтовская, то вы должны составить def-файл и включить его в проект.
Это один вариант. http://msdn.microsoft.com/ru-ru/library/d91k01sh.aspx
Можно экспортировать функцию при помощи статической библиотеки .lib
Если это си-билдер, то можно использовать тот файл .lib, который был создан при комппиляции библиотеки в делфи.
Для Микрософта библиотека .lib должна иметь другой, несовместимый с делфи формат. Эту библиотеку .lib можно создать из имеющейся dll запуском утилиты impdef.
Еще есть третий вариант динамической линковки. Он наверно самый простой, но дольше работает. Использование функций API LoadLibrary и GetProcAddress.
Если это учебное задание, то вам сначала надо выяснить, какому способу вас обучали и как надо делать.

Добавлено через 3 минуты
Вот что такое студия 2012 ? Неужели нельзя нормально написать? Например у меня в Rad Studio XE есть си-билдер. Это студия какого года?
0
Avazart
Эксперт С++
7756 / 5662 / 554
Регистрация: 10.12.2010
Сообщений: 25,663
Записей в блоге: 17
25.12.2012, 02:11 5
Подозреваю что вижуал студия ...

Для того что бы перенести нужно знать "определение" ф-ции, прототип ... т.е. типы параметров,возвращаемое значение, соглашение о вызове.
0
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
25.12.2012, 17:48  [ТС] 6
У меня microsoft visual studio. С помощью impdef я создал def файл. Подключаю его к проекту (правой кнопкой по Source Files->Add->Existing item и выбираю созданный .def файл). Но при вызове нужной функции всёравно получаю ошибку.
Код программы
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <stdio.h>
using namespace std;
extern "C" __declspec(dllimport)int CeloeChislo();
int main()
{
    int result=CeloeChiclo();
    return 0;
}
Код длл
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
library Project1;
 
uses
  SysUtils,
  Classes;
 
{$R *.res}
 Function CeloeChislo:integer; cdecl;export;
 var NH:integer;
 begin
 NH:=5;
 Result:=NH*NH;
 
 
 end;
 exports CeloeChislo;
 
begin
end.
Код сделан по примерам с http://ru.wikibooks.org/wiki/DLL Я чегото не доделываю или делаю не правильно?
0
Avazart
Эксперт С++
7756 / 5662 / 554
Регистрация: 10.12.2010
Сообщений: 25,663
Записей в блоге: 17
25.12.2012, 18:07 7
http://www.cyberforum.ru/blogs/131347/blog478.html - там в литературе глава из Архангельского

Добавлено через 2 минуты
Цитата Сообщение от kaban4ig Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <stdio.h>
using namespace std;
extern "C" __declspec(dllimport)int CeloeChislo();
int main()
{
 int result=CeloeChiclo();
 return 0;
}
Пробуй сначала динамически ее подгрузить... либ-файл потом будешь лепить...

Dynamic-Link Library: Теория + Практика 2.3. Явная загрузка.
0
Afflicted
Обитатель форума
199 / 182 / 54
Регистрация: 28.10.2012
Сообщений: 543
25.12.2012, 18:10 8
чтобы загрузить .dll файл:

C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
    HINSTANCE hLib = LoadLibrary(L"dll.dll");
 
    if(hLib == NULL)
        cout << "Unable to load library!" << endl;
    else
        cout << "Succes!" << endl;
для вызова ф-ции из dll

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <windows.h>
 
 
    FARPROC Func = (FARPROC)GetProcAddress((HMODULE)hLib, "CeloeChislo");
 
    if(Func == NULL)
    {
        cout << "Unable to load function(s)." << endl;
        FreeLibrary((HMODULE)hLib);
        _getch();
        return 0;
    }
 
    Func();
    FreeLibrary((HMODULE)hLib);
1
palva
3115 / 2245 / 452
Регистрация: 08.06.2007
Сообщений: 8,161
Записей в блоге: 4
25.12.2012, 18:15 9
Цитата Сообщение от kaban4ig Посмотреть сообщение
Я чегото не доделываю или делаю не правильно?
Главное - вы опять не даете нам полной информации. Какая ошибка, на каком этапе, какой текст диагностики.
0
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
25.12.2012, 18:19  [ТС] 10
Сделал как сказал Afflicted, работает! Спасибо большое всем за помощь.=)
0
25.12.2012, 18:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2012, 18:19

Подключение Dll на С++ к Java и С#
Добрый день. Подскажите, пожалуйста куда копать: надо создать DLL на С++ с...

Подключение dll (C++) к проекту VB 6.0
Здравствуйте! Проблемма в подключении ДЛЛ к VB 6. есть библиотека на C++ ...

Динамическое подключение DLL
Здравствуйте! Скорее всего, мой вопрос покажется вам глупым, но всё же... Я не...


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

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

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