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

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

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

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

07.04.2013, 19:17. Просмотров 1160. Ответов 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-шником.

Что нужно сделать, что-бы оно заработало?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
07.04.2013, 19:27     Подключение dll в MSVS 2010 C++ #2
cuteprog, указать соглашение о вызове.
Цитата Сообщение от cuteprog Посмотреть сообщение
Для генерации mydll.lib файла был создан mydll.def со следующим содержимым:
EXPORTS
summe
Посмотрите в dll экспортируется ли ваша функция.
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 19:45  [ТС]     Подключение dll в MSVS 2010 C++ #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
palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
07.04.2013, 19:46     Подключение dll в MSVS 2010 C++ #4
Зачем вы делаете def файл для delphi и как вы его там используете? Достаточно указания об экспорте в паскалевском тексте. lib, которая (возможно) вырабатывается в delphi не подойдет для линкера Microsoft - разные стандарты. А вот для проекта на си вам нужно сделать файл def, чтобы указать что и из какой библиотеки импортируете.
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,453
Записей в блоге: 17
07.04.2013, 19:52     Подключение dll в MSVS 2010 C++ #5
Цитата Сообщение от cuteprog Посмотреть сообщение
Как это сделать?
Код
tdump.exe Mylib.dll > log.txt
Затем открываешь log.txt и ищешь в таблице экспорта свою ф-цию ....
Но удобнее использовать PE Exploer или Dependancy Walker.
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 19:57  [ТС]     Подключение dll в MSVS 2010 C++ #6
Цитата Сообщение от go Посмотреть сообщение
указать соглашение о вызове.
куда и что нужно написать?
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,453
Записей в блоге: 17
07.04.2013, 19:59     Подключение dll в MSVS 2010 C++ #7
http://www.rsdn.ru/article/devtools/bcbdll.xml
palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
07.04.2013, 19:59     Подключение dll в MSVS 2010 C++ #8
Во первых в паскалевский файл нужно написать
function summe(var a: integer):integer; stdcall; export;
или как вариант cdecl вместо stdcall.
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 20:01  [ТС]     Подключение dll в MSVS 2010 C++ #9
Цитата Сообщение от palva Посмотреть сообщение
А вот для проекта на си вам нужно сделать файл def, чтобы указать что и из какой библиотеки импортируете.
Так я для этого его и создавал.

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

Добавлено через 1 минуту
Цитата Сообщение от palva Посмотреть сообщение
тогда мне непонятно, почему EXPORTS
А как привильно?
palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
07.04.2013, 20:39     Подключение dll в MSVS 2010 C++ #13
Цитата Сообщение от cuteprog Посмотреть сообщение
А как привильно?
Что-то я сам запутался. Вы создавали статическую библиотеку lib что ли?
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 20:56  [ТС]     Подключение dll в MSVS 2010 C++ #14
Цитата Сообщение от palva Посмотреть сообщение
Вы создавали статическую библиотеку lib что ли?
Да. Библиотека подключается статически.
А при создании dll это как-то задается будет она статически или динамически подключаться?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2013, 21:05     Подключение dll в MSVS 2010 C++
Еще ссылки по теме:
DLL 32 и 64 в C++ 2010 C++
C++ Создание .dll в MSVC 2010 в чем ошибка?
Подключение curl к visual studio 2010 C++
Указатели в VC++ (2010) DLL и в приложении C++Builder (RAD XE4) C++
C++ подключение dll

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

Или воспользуйтесь поиском по форуму:
palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
07.04.2013, 21:05     Подключение dll в MSVS 2010 C++ #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
Yandex
Объявления
07.04.2013, 21:05     Подключение dll в MSVS 2010 C++
Ответ Создать тему
Опции темы

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