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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
#1

Подключение dll в MSVS 2010 C++ - C++

07.04.2013, 19:17. Просмотров 1204. Ответов 27
Метки нет (Все метки)

Код:
C++
1
2
3
4
__declspec(dllimport) int summe(int a);
void main(){
    summe(3);
}
При компиляции выдает следующую ошибку:
error LNK2019: unresolved external symbol "__declspec(dllimport) int __cdecl summe(int)" (__imp_?summe@@YAHH@Z) referenced in function _main.

Сам dll файл был создан в Delphi, вот код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
library mydll;
 
  function summe(var a: integer):integer; export;
  begin
    result:=a;
  end;
 
Exports 
summe index 1 name 'summe';
begin
end.
Для генерации mydll.lib файла был создан mydll.def со следующим содержимым:
EXPORTS
summe

Полученный в результате mydll.lib поместил в папку с проектом и прописал его в Linker -> Input -> Additional Dependencies.
Файл mydll.dll поместил в папку с exe-шником.

Что нужно сделать, что-бы оно заработало?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2013, 19:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подключение dll в MSVS 2010 C++ (C++):

MSVS 2010. Автоматическое подключение stdafx.h ко всем новым проектам - C++
Как сразу stdafx.h сделать со своим кодом по умолчанию ? как подключить библиотеку ,чтобы сразу на все проекты ,когда создавал...

Конвертировать с MsVS 2008 в MsVS 2010 - C++
У меня есть проект на MsVS 2008. Он состоит с нескольких файлов, которые потом подключаются в основной программе. Как можно сделать чтобы...

MSVS 2010 Hello world - C++
Скачал Vidual Studio 2010 Express, создал проект, скопипастил туда Helloworld. Компиляция завершилась ошибкой. При чем окон с ошибкой я так...

Где находиться папка Source Files в MSVS 2010 - C++
Где находиться кнопка sources file? ( версия eng)

Проблемы с кодировкой при переключении из Debug в Release в MSVS 2010 - C++
Собираю проект в режиме дебаг все символы норм отображаются,переключаю на релиз и одни кракозябры, в чем может быть дело ?

Собрать проект MSVS со всеми dll-ками - C++
Привет! есть проектWIN32 MSVS. все работает. как собрать его таким образом, чтобы не требовались студийные библиотеки на чистой винде? ...

27
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
07.04.2013, 19:27 #2
cuteprog, указать соглашение о вызове.
Цитата Сообщение от cuteprog Посмотреть сообщение
Для генерации mydll.lib файла был создан mydll.def со следующим содержимым:
EXPORTS
summe
Посмотрите в dll экспортируется ли ваша функция.
1
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 19:45  [ТС] #3
Цитата Сообщение от go Посмотреть сообщение
Посмотрите в dll экспортируется ли ваша функция.
Как это сделать?

Добавлено через 7 минут
C:\Program Files\Microsoft Visual Studio 10.0\VC>dumpbin /exports C:\mydll.dll
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file C:\mydll.dll

File Type: DLL

Section contains the following exports for myDll.dll

00000000 characteristics
0 time date stamp Thu Jan 01 02:00:00 1970
0.00 version
1 ordinal base
1 number of functions
1 number of names

ordinal hint RVA name

1 0 00003834 summe

Summary

1000 .edata
1000 .idata
1000 .reloc
1000 .rsrc
1000 BSS
3000 CODE
1000 DATA
0
palva
2630 / 1857 / 268
Регистрация: 08.06.2007
Сообщений: 7,103
Записей в блоге: 4
07.04.2013, 19:46 #4
Зачем вы делаете def файл для delphi и как вы его там используете? Достаточно указания об экспорте в паскалевском тексте. lib, которая (возможно) вырабатывается в delphi не подойдет для линкера Microsoft - разные стандарты. А вот для проекта на си вам нужно сделать файл def, чтобы указать что и из какой библиотеки импортируете.
1
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,953
Записей в блоге: 17
07.04.2013, 19:52 #5
Цитата Сообщение от cuteprog Посмотреть сообщение
Как это сделать?
Код
tdump.exe Mylib.dll > log.txt
Затем открываешь log.txt и ищешь в таблице экспорта свою ф-цию ....
Но удобнее использовать PE Exploer или Dependancy Walker.
1
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 19:57  [ТС] #6
Цитата Сообщение от go Посмотреть сообщение
указать соглашение о вызове.
куда и что нужно написать?
0
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,953
Записей в блоге: 17
07.04.2013, 19:59 #7
http://www.rsdn.ru/article/devtools/bcbdll.xml
0
palva
2630 / 1857 / 268
Регистрация: 08.06.2007
Сообщений: 7,103
Записей в блоге: 4
07.04.2013, 19:59 #8
Во первых в паскалевский файл нужно написать
function summe(var a: integer):integer; stdcall; export;
или как вариант cdecl вместо stdcall.
0
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 20:01  [ТС] #9
Цитата Сообщение от palva Посмотреть сообщение
А вот для проекта на си вам нужно сделать файл def, чтобы указать что и из какой библиотеки импортируете.
Так я для этого его и создавал.

Достаточно ли следующих двух строк?
EXPORTS
summe
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
07.04.2013, 20:03 #10
Цитата Сообщение от cuteprog Посмотреть сообщение
Как это сделать?
попробуйте в тотал командоре. когда сможете ее экспортировать, не забудте об
Цитата Сообщение от go Посмотреть сообщение
указать соглашение о вызове.
0
palva
2630 / 1857 / 268
Регистрация: 08.06.2007
Сообщений: 7,103
Записей в блоге: 4
07.04.2013, 20:04 #11
Цитата Сообщение от cuteprog Посмотреть сообщение
Так я для этого его и создавал.
тогда мне непонятно, почему EXPORTS
0
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 20:15  [ТС] #12
Цитата Сообщение от palva Посмотреть сообщение
Во первых в паскалевский файл нужно написать
function summe(var a: integer):integer; stdcall; export;
или как вариант cdecl вместо stdcall.
Что еще нужно сделать?

Добавлено через 1 минуту
Цитата Сообщение от palva Посмотреть сообщение
тогда мне непонятно, почему EXPORTS
А как привильно?
0
palva
2630 / 1857 / 268
Регистрация: 08.06.2007
Сообщений: 7,103
Записей в блоге: 4
07.04.2013, 20:39 #13
Цитата Сообщение от cuteprog Посмотреть сообщение
А как привильно?
Что-то я сам запутался. Вы создавали статическую библиотеку lib что ли?
0
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 20:56  [ТС] #14
Цитата Сообщение от palva Посмотреть сообщение
Вы создавали статическую библиотеку lib что ли?
Да. Библиотека подключается статически.
А при создании dll это как-то задается будет она статически или динамически подключаться?
0
palva
2630 / 1857 / 268
Регистрация: 08.06.2007
Сообщений: 7,103
Записей в блоге: 4
07.04.2013, 21:05 #15
Нет, при создании dll это не надо задавать.
А вы запускали микрософтовскую утилиту lib.exe ?
Что-то она у меня не хочет брать dll сделанную на Delphi XE. Говорит поврежденный файл.

Добавлено через 2 минуты
Я сделал def файл запуском борландовской утилиты
Код
impdef mydll.def mydll.dll
а потом запускал bat файл с содержимым
Код
call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
lib.exe /DEF:mydll.def /OUT:mydll.lib mydll.dll
Вы тоже самое делали?

Добавлено через 2 минуты
Код
mydll.dll : fatal error LNK1107: invalid or corrupt file: cannot read at 0x338
0
07.04.2013, 21:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2013, 21:05
Привет! Вот еще темы с ответами:

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

DLL 32 и 64 в C++ 2010 - C++
Написал простой dll, откомпилировал его в VC 2010 подключаю к матлабу, который ругается что dll создан 32 битным компилятором, а нужен 64...

Создание .dll в MSVC 2010 в чем ошибка? - C++
Проблема в чем.. есть dll с тремя функциями... Скомпилировал и пытался подключить на другом ноуте к проекту... Но не известно по какой...

Подключение curl к visual studio 2010 - C++
Здорова!!! Скачал curl от сюда ftp://ftp.sunet.se/pub/www/utilities/curl/libcurl-7.19.3-win32-ssl-msvc.zip. Как теперь ее подключить...


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

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

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