Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
verter
#1

Импорт в Delphi функций из dll, написанной на C++

13.01.2008, 10:14. Просмотров 3827. Ответов 9
Метки нет (Все метки)

Здравствуйте!
Наверное, многие сталкивались со следующей проблеммой: При попытке в Delphi импортировать функцию из dll, написанной на С++(или на С?) возникает ошибка при запуске о том, что не найдена точка входа. Объявленное имя функции в хидере библиотеки -
xu_fss_connect(
param_timeout_seconds: integer
): integer
При просмотре dll в обычном редакторе выясняю, что имя функции -
?xu_fss_connect@@YAHH@Z
Что это? Как же импортировать такую гадость???

С уважением, Дмитрий.

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2008, 10:14
Ответы с готовыми решениями:

Экспортируемые функций DLL (С++ в Delphi)
Уважаемые программисты! У меня к Вам просьба, помогите разобраться с...

Взаимодействие с DLL написанной на CPP
Здравствуй уважажаемый All! Помогите пожайлуста решить такую вот задачу....

Права администратора в программе написанной на delphi xe3
Здравствуйте, программисты! Столкнулся с такой проблемой. Добавление...

Подключение сторонней .dll и вызов экспортируемых функций
Здравствуйте! Вопрос - сабж. Поясняю: Есть у меня стороння .dll (вроде как...

Как взломать программу написанной Delphi
Здравствуйте Уважаемые Эксперты! Есть программа написанной (по моему) на...

9
Jk
13.01.2008, 10:51 #2
Как раз сейчас это же делаю
Все работет, если функции экспортируются через DEF файл.
verter
13.01.2008, 10:57 #3
Привет!
Блин, я так и думал! Значит их надо импортировать не по имени, а по номеру в DEF-файле. А как создать DEF-файл, если имеется только сама dll и хидер к ней, а самого *.cpp нету? И как потом в Delphi указать, что импорт производить именно через DEF-файл?

С уважением, Дмитрий.
Jk
13.01.2008, 12:05 #4
Ха..
не в курсе чтобы дельфи понимала def файл

кстати если экспортировать функцию из с++ вроде:

extern 'C' __stdcall __declspec(dllexport) void Func()

тогда дельфи без проблем понимает
Jk
13.01.2008, 12:11 #5
кстати!
раз у тебя есть только хидер и длл,
то вероятно у тебя есть и lib-файл?
возможно через него можно как-то..
verter
13.01.2008, 13:23 #6
Да, конечно, у меня есть не только lib-файл, но и exp-файл, но я смутно понимаю зачем он нужен, может он сможет помочь, не знаешь?
У меня также есть монстрический пример-приложение на C++, которое импортирует функции из этой dll. Я его успешно компилю и, т.к. есть lib-файл, то и успешно линкую. Он работает прекрасно и всё запускается и функции отрабатывают, а вот в Delphi никак не хочет.
Там в этом примере для импортируемых функций применяется всего лишь
__declspec(dllimport), а в хидере dll-ки __declspec(dllexport)
Как же этот парадокс понимать???
Jk
13.01.2008, 14:15 #7
можно попробовать переписать сишный хидер
и объявить в паскале функции как:

function SomeFunc: integer; external 'somedll.dll' name 'ABRAKADABRA'

где ABRAKADABRA - имя функции - которое показывает тебе 'обычный редактор'. Только лучше воспользоваться специальным':
http://www.dependencywalker.com/
verter
13.01.2008, 14:57 #8
Да, да я так и сделал - запускается, только при вызове функции даёт Access violation. Может я параметр не правильно задаю, но он простой -integer. Также, сделал динамическую загрузку библиотеки, там таже фигня, только в профиль. При вызове
GetProcAddress(hDLLInst,'xu_fss_connect') даёт Access violation, а при GetProcAddress(hDLLInst, '?xu_fss_connect@@YAHH@Z') вроде как прокатывает, но при вызове самой функции опять даёт Access violation.
Хоть по-полу катайся! Биииида.
Jk
13.01.2008, 18:44 #9
вероятно надо функцию в дельфи объявить как cdecl;
или наборот stdcall,
зависит от того как она экспортирована...
verter
14.01.2008, 09:08 #10
Да не. Я это сразу сдела, т.е. все функции у меня были объявлены как stdcall. Менял я и на cdecl - тот же эффект, потому что эти спецификаторы вызова отличаются только тем кто после завершения очищает стек: caller или тот кого вызывают.
14.01.2008, 09:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2008, 09:08

Из Excel в Delphi импорт
Уважаемые форумчане! Прошу помощи, т.к. 2 день не могу решить проблему. Задача:...

Импорт из Delphi в Word
Хочу распечатать инормацию о записи с определенного поля. Вот код на кнопку...

C++ импорт функций dll написанной на c#
Здравствуйте, профессионалы! В общем суть вопроса в импорте функций из DLL...


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

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

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