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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
25.12.2012, 00:02     Подключение DLL сделанной на delphi #1
Всем привет. У меня есть 1) с++ Empty project в студии 2012 2) dll сделанная на Delphi. В dll функция возвращающая integer. Задача использовать функцию в коде с++ и результат записать в переменную int. Как это сделать ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2012, 00:02     Подключение DLL сделанной на delphi
Посмотрите здесь:

C++ подключение dll
Подключение Excel к DLL в Windows 7 64 C++
C++ Статическое подключение DLL
подключение dll C++
Подключение dll библиотеки C++
C++ Подключение dll в MSVS 2010 C++
Подключение dll - ошибка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
 Аватар для palva
2403 / 1625 / 202
Регистрация: 08.06.2007
Сообщений: 6,450
Записей в блоге: 4
25.12.2012, 00:16     Подключение DLL сделанной на delphi #2
Вот здесь почитайте http://ru.wikibooks.org/wiki/DLL
Естественно DLL должна быть нормально написана, не запрашивать память явным или неявным образом, в частности не использовать длинные строки и, естественно, не содержать обращений к VCL.
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
25.12.2012, 00:47  [ТС]     Подключение DLL сделанной на delphi #3
Подскажите пожалуйста как реализовать
* Указываем, что тело функции находится в другом файле.
* Не забыть про объектный модуль DLL при линковке
Это написано на http://ru.wikibooks.org/wiki/DLL в импорте из DLL C++
palva
 Аватар для palva
2403 / 1625 / 202
Регистрация: 08.06.2007
Сообщений: 6,450
Записей в блоге: 4
25.12.2012, 01:26     Подключение DLL сделанной на delphi #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 есть си-билдер. Это студия какого года?
Avazart
Заблокирован
25.12.2012, 02:11     Подключение DLL сделанной на delphi #5
Подозреваю что вижуал студия ...

Для того что бы перенести нужно знать "определение" ф-ции, прототип ... т.е. типы параметров,возвращаемое значение, соглашение о вызове.
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
25.12.2012, 17:48  [ТС]     Подключение DLL сделанной на delphi #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 Я чегото не доделываю или делаю не правильно?
Avazart
Заблокирован
25.12.2012, 18:07     Подключение DLL сделанной на delphi #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. Явная загрузка.
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 538
25.12.2012, 18:10     Подключение DLL сделанной на delphi #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);
palva
 Аватар для palva
2403 / 1625 / 202
Регистрация: 08.06.2007
Сообщений: 6,450
Записей в блоге: 4
25.12.2012, 18:15     Подключение DLL сделанной на delphi #9
Цитата Сообщение от kaban4ig Посмотреть сообщение
Я чегото не доделываю или делаю не правильно?
Главное - вы опять не даете нам полной информации. Какая ошибка, на каком этапе, какой текст диагностики.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2012, 18:19     Подключение DLL сделанной на delphi
Еще ссылки по теме:

C++ Подключение dll (C++) к проекту VB 6.0
Динамическое подключение DLL C++
Подключение Dll на С++ к Java и С# C++
Подключение DLL без заголовка C++
Подключение библиотек lib и dll C++

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

Или воспользуйтесь поиском по форуму:
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
25.12.2012, 18:19  [ТС]     Подключение DLL сделанной на delphi #10
Сделал как сказал Afflicted, работает! Спасибо большое всем за помощь.=)
Yandex
Объявления
25.12.2012, 18:19     Подключение DLL сделанной на delphi
Ответ Создать тему
Опции темы

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