Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 19

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

07.04.2013, 19:17. Показов 3344. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.04.2013, 19:17
Ответы с готовыми решениями:

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

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

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

27
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
07.04.2013, 19:27
cuteprog, указать соглашение о вызове.
Цитата Сообщение от cuteprog Посмотреть сообщение
Для генерации mydll.lib файла был создан mydll.def со следующим содержимым:
EXPORTS
summe
Посмотрите в dll экспортируется ли ваша функция.
1
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 19
07.04.2013, 19:45  [ТС]
Цитата Сообщение от 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
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,927
Записей в блоге: 5
07.04.2013, 19:46
Зачем вы делаете def файл для delphi и как вы его там используете? Достаточно указания об экспорте в паскалевском тексте. lib, которая (возможно) вырабатывается в delphi не подойдет для линкера Microsoft - разные стандарты. А вот для проекта на си вам нужно сделать файл def, чтобы указать что и из какой библиотеки импортируете.
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.04.2013, 19:52
Цитата Сообщение от cuteprog Посмотреть сообщение
Как это сделать?
Code
1
tdump.exe Mylib.dll > log.txt
Затем открываешь log.txt и ищешь в таблице экспорта свою ф-цию ....
Но удобнее использовать PE Exploer или Dependancy Walker.
1
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 19
07.04.2013, 19:57  [ТС]
Цитата Сообщение от go Посмотреть сообщение
указать соглашение о вызове.
куда и что нужно написать?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.04.2013, 19:59
http://www.rsdn.ru/article/devtools/bcbdll.xml
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,927
Записей в блоге: 5
07.04.2013, 19:59
Во первых в паскалевский файл нужно написать
function summe(var a: integer):integer; stdcall; export;
или как вариант cdecl вместо stdcall.
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 19
07.04.2013, 20:01  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
А вот для проекта на си вам нужно сделать файл def, чтобы указать что и из какой библиотеки импортируете.
Так я для этого его и создавал.

Достаточно ли следующих двух строк?
EXPORTS
summe
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
07.04.2013, 20:03
Цитата Сообщение от cuteprog Посмотреть сообщение
Как это сделать?
попробуйте в тотал командоре. когда сможете ее экспортировать, не забудте об
Цитата Сообщение от go Посмотреть сообщение
указать соглашение о вызове.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,927
Записей в блоге: 5
07.04.2013, 20:04
Цитата Сообщение от cuteprog Посмотреть сообщение
Так я для этого его и создавал.
тогда мне непонятно, почему EXPORTS
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 19
07.04.2013, 20:15  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
Во первых в паскалевский файл нужно написать
function summe(var a: integer):integer; stdcall; export;
или как вариант cdecl вместо stdcall.
Что еще нужно сделать?

Добавлено через 1 минуту
Цитата Сообщение от palva Посмотреть сообщение
тогда мне непонятно, почему EXPORTS
А как привильно?
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,927
Записей в блоге: 5
07.04.2013, 20:39
Цитата Сообщение от cuteprog Посмотреть сообщение
А как привильно?
Что-то я сам запутался. Вы создавали статическую библиотеку lib что ли?
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 19
07.04.2013, 20:56  [ТС]
Цитата Сообщение от palva Посмотреть сообщение
Вы создавали статическую библиотеку lib что ли?
Да. Библиотека подключается статически.
А при создании dll это как-то задается будет она статически или динамически подключаться?
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,927
Записей в блоге: 5
07.04.2013, 21:05
Нет, при создании dll это не надо задавать.
А вы запускали микрософтовскую утилиту lib.exe ?
Что-то она у меня не хочет брать dll сделанную на Delphi XE. Говорит поврежденный файл.

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

Добавлено через 2 минуты
Code
1
mydll.dll : fatal error LNK1107: invalid or corrupt file: cannot read at 0x338
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 19
07.04.2013, 21:12  [ТС]
Цитата Сообщение от 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
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,927
Записей в блоге: 5
07.04.2013, 21:13
Ну def-файл у нас наверно одинаковый, кроме комментария.
Code
1
2
3
4
LIBRARY     MYDLL.DLL
 
EXPORTS
    summe                          @1   ; summe
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
07.04.2013, 21:19
Может тебе не заморачиватся с 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
0
go
07.04.2013, 21:25

Не по теме:

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

0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,927
Записей в блоге: 5
07.04.2013, 21:27
С подключением def файла к проекту тоже не получается. Говорит, что неразрешенная ссылка. Странно. Когда-то с Visual Studio 6 я подобную связь делал. Пробуйте тогда LoadLibrary.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.04.2013, 21:27
Помогаю со студенческими работами здесь

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

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

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

Подключение .dll в Visual Studio 2010
Не могу справиться со студией. Не могли бы Вы подробно, пошагово написать когда и как подключить библиотеку данных к программе. Пробовал,...

Visual Studio 2010 подключение DLL(C++) к проекту на C#
Добрый день! По манулу создал DLL. Так же создал приложение на C#. Хочется использовать функции из ранее созданной библиотеки. Каким...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru