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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 19:17     Подключение dll в MSVS 2010 C++ #1
Код:
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-шником.

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

Проблемы с кодировкой при переключении из Debug в Release в MSVS 2010 C++
C++ Где находиться папка Source Files в MSVS 2010
C++ Конвертировать с MsVS 2008 в MsVS 2010
C++ MSVS 2010 Hello world
DLL 32 и 64 в C++ 2010 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 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
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
07.04.2013, 19:46     Подключение dll в MSVS 2010 C++ #4
Зачем вы делаете def файл для delphi и как вы его там используете? Достаточно указания об экспорте в паскалевском тексте. lib, которая (возможно) вырабатывается в delphi не подойдет для линкера Microsoft - разные стандарты. А вот для проекта на си вам нужно сделать файл def, чтобы указать что и из какой библиотеки импортируете.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 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
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
07.04.2013, 19:59     Подключение dll в MSVS 2010 C++ #7
http://www.rsdn.ru/article/devtools/bcbdll.xml
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 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++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
07.04.2013, 20:03     Подключение dll в MSVS 2010 C++ #10
Цитата Сообщение от cuteprog Посмотреть сообщение
Как это сделать?
попробуйте в тотал командоре. когда сможете ее экспортировать, не забудте об
Цитата Сообщение от go Посмотреть сообщение
указать соглашение о вызове.
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 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
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 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 это как-то задается будет она статически или динамически подключаться?
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 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
cuteprog
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 12
07.04.2013, 21:12  [ТС]     Подключение dll в MSVS 2010 C++ #16
Цитата Сообщение от palva Посмотреть сообщение
А вы запускали микрософтовскую утилиту lib.exe ?
Что-то она у меня не хочет брать dll сделанную на Delphi XE. Говорит поврежденный файл.
Да:
C:\Program Files\Microsoft Visual Studio 10.0\VC>lib /def:c:\mydll.def /out:C:\mydll.lib /machine:x86

Для создания dll файла я использовал Delphi 7

Добавлено через 3 минуты
Цитата Сообщение от palva Посмотреть сообщение
Я сделал def файл запуском борландовской утилиты
Я создавал def файл в текстовом редакторе

Добавлено через 1 минуту
а потом вызывал утилиту lib.exe :
lib /def:c:\mydll.def /out:C:\mydll.lib /machine:x86
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
07.04.2013, 21:13     Подключение dll в MSVS 2010 C++ #17
Ну def-файл у нас наверно одинаковый, кроме комментария.
Код
LIBRARY     MYDLL.DLL

EXPORTS
    summe                          @1   ; summe
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
07.04.2013, 21:19     Подключение dll в MSVS 2010 C++ #18
Может тебе не заморачиватся с lib если есть dll
подключай явно
C++
1
2
3
4
5
6
HMODULE hLib;
hLib = LoadLibrary("MyDll.dll");// открыли библиотеку
........................
void (*pFunction)(int, int);// прототип
(FARPROC &)pFunction = GetProcAddress(hLib, "Function"); // указатель на функцию
pFunction(0, 0); // вызов функции
вот почитай
http://www.rsdn.ru/article/baseserv/dlluse.xml
go
07.04.2013, 21:25
  #19

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
Может тебе не заморачиватся с lib если есть dll
Нет никакой dll. ТС сам не знает, что он хочет. Стоит открыть книжку по Delphi и почитать как создавать dll библиотеки.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2013, 21:27     Подключение dll в MSVS 2010 C++
Еще ссылки по теме:

Не могу вызвать функцию из dll С++ в С# в системе Win 7 64bit, MSVS 2008 C++
Подключение curl к visual studio 2010 C++
MSVS 2010. Автоматическое подключение stdafx.h ко всем новым проектам C++

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

Или воспользуйтесь поиском по форуму:
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
07.04.2013, 21:27     Подключение dll в MSVS 2010 C++ #20
С подключением def файла к проекту тоже не получается. Говорит, что неразрешенная ссылка. Странно. Когда-то с Visual Studio 6 я подобную связь делал. Пробуйте тогда LoadLibrary.
Yandex
Объявления
07.04.2013, 21:27     Подключение dll в MSVS 2010 C++
Ответ Создать тему
Опции темы

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