0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 46
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Не могу вызвать функцию из .dll22.07.2013, 00:33. Показов 5607. Ответов 36
Метки нет (Все метки)
Добрый день ... Полазил по форумам и гайдам ....
Пишу такой вот header:
Теперь сам проект из которого явным способом пытаюсь вызвать функции (.dll добавил в проект через Shift+Alt+A):
0
|
22.07.2013, 00:33 | |
Ответы с готовыми решениями:
36
Не могу вызвать функцию из dll С++ в С# в системе Win 7 64bit, MSVS 2008 Вызвать функцию из dll с неопределённым числом параметров Как из DLL вызвать функцию, находящуюся в exe? Не могу вызвать функцию |
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
22.07.2013, 05:27 | 2 |
а ты dumpbin запусти и посмотри таблицу экспорта у твоей dll
0
|
22.07.2013, 06:47 | 3 | |||||||||||||||
Надо писать extern "C"
Добавлено через 4 минуты Еще необходимо указать calling convention: __stdcall Добавлено через 25 минут Пример для MinGW: Кликните здесь для просмотра всего текста
test.cpp
Кликните здесь для просмотра всего текста
main.cpp
Кликните здесь для просмотра всего текста
Makefile
0
|
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 46
|
|||||||||||
22.07.2013, 17:03 [ТС] | 4 | ||||||||||
Подправил но теперь не могу собрать библиотеку...:
вот header:
1>mbdll.exp : error LNK2001: unresolved external symbol "int __cdecl function(int,int)" (?function@@YAHHH@Z) 1>mbdll.exp : error LNK2001: unresolved external symbol "double __cdecl function2(double,double)" (?function2@@YANNN@Z) 1>C:\Users\emm\Desktop\mbdll\Debug\mbdll.dll : fatal error LNK1120: 2 unresolved externals В def файле ничего не менял.... В чем трабл теперь?... П.С.: таблица экспорта: ?function@@YAHHH@Z ?function2@@YANNN@Z function function2
0
|
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 46
|
|
22.07.2013, 20:31 [ТС] | 6 |
Обернул .срр в extern "C" .. ничего не поменялось... Есть еще идеи?..
Добавлено через 4 минуты Обернул .срр в extern "C" ... Не помогло есть еще идеи?
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|||||||||||
23.07.2013, 05:08 | 8 | ||||||||||
Такое чуство, что у тебя просто библиотека не загружается, так как включен юникод и ты пытаешься юникод-версии LoadLibrary (то есть LoadLibraryW) передать указатель на анси строку "mbdll.dll". Попробуй всё таки передать ей юникод строку. Добавлено через 1 минуту или лучше используй макрос:
1
|
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 46
|
|
23.07.2013, 12:26 [ТС] | 9 |
Прикрепил...
Да, действительно .. заминка была именно в этом. Спасибо!! Но теперь другой все ж таки вопрос .. где туплю в кодах при extern "C", что не могу собрать библиотеку?...
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
23.07.2013, 12:50 | 11 |
Студия, например, когда скомпилирует длл, в таблицу экспорта поместит только декорированные имена вида
Соответственно, их будет неудобно юзать линкуя динамически, так как GetProcAdress не найдёт функции function и function1. Для этого и нужен раздел EXPORTS .def файла, чтобы дать экспортируемым функциям (и не только) альтернативные недекорированные имена.
0
|
23.07.2013, 12:55 | 12 |
Разве MSVS не создает .lib для подключения либы чтобы не юзать LoadLibrary и GetProcAddress ?
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
23.07.2013, 12:55 | 13 |
Убери вообще extern "c", зачем тебе оно, если ты не знаешь что это(ну если конечно и длл и экзешник ты в одном и том же компиляторе делаешь). Главное чтобы у тебя экпортируемые и импортируемые функции были одинаково обьявлены.
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
23.07.2013, 12:58 | 15 |
Для статической линковки - да. Но, как мы видим в коде ТС'а, он пытается линковать динамически, с помощью GetProcAddress, которая ни о lib файле, ни упаси бог, о декорировании ничего не знает
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
23.07.2013, 13:00 | 17 |
ТС, оставь в .def файле просто
LIBRARY EXPORTS function function2
0
|
23.07.2013, 13:02 | 18 |
Если оставляешь .def-файл - тогда удаляй __declspec(dllexport) и наоборот.
http://msdn.microsoft.com/en-u... 80%29.aspx
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
23.07.2013, 13:02 | 19 |
0
|
23.07.2013, 13:06 | 20 |
В самом начале статьи пример.
extern "C" совместно с __stdcall намного упрощают этот процесс. Добавлено через 42 секунды NativeLand, какая версия студии?
0
|
23.07.2013, 13:06 | |
23.07.2013, 13:06 | |
Помогаю со студенческими работами здесь
20
Как вызвать функцию, описанную в DLL через Custom Action в wix? Не могу вызвать функцию через указатель Могу ли я поменять какую-нибудь функцию в готовой dll-ке? Вызвать функцию из dll Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |