| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Динамический импорт DLL в MinGW |
| Автор: jhonyxakep 27.2.2010, 15:32 | ||
| Написал тестовую длл (функция string test(void); тупо возвращает строку "test,test":)) Решил динамически её импортировать из длл:
(код взят с инета) в результате я получаю фатальную ошибку (в прикреплении) Кстати это вторая моя попытка использовать динамическое подключение, и всегда такой результат. ЗЫ Юзаю extern "C" перед экспортом. |
| Автор: borisbn 27.2.2010, 16:17 |
| ты определись, что возвращает функция: строку или double. Если в самой dll-ке строку, то понятно, почему не работает |
| Автор: ThisIsSparta 27.2.2010, 19:28 | ||||
| Если extern "C", то имя функции должно быть примерно таким: "_test@0". Попробуй так:
EDIT: в dll функция должна быть проэкспортирована:
|
| Автор: borisbn 28.2.2010, 00:34 |
| ThisIsSparta, extern "C" как раз указывает, что функция не должна декорироваться а твой пример: extern "C" string void ... не будет компилироваться |
| Автор: ThisIsSparta 28.2.2010, 01:25 | ||||
| Хм. Пример-то скомпилировался, но с предупреждением "'identifier1' has C-linkage specified, but returns UDT 'identifier2' which is incompatible with C ". Мда... Действительно имя задается как есть, но... Почему я ошибся? Просто недавно тоже экспериментировал с линковками, но экспериментировал с __stdcall-функциями. В __cdecl все происходит так, как Вы сказали - имя не декодируется. А что будет, если попробовать вот такую функцию?
Она будет проэкспортирована с именем:
8 - это выравнивание стека. Хотя сильно во всю эту радость не влазил. Возможно, это просто особенности линкера MSVC... |
| Автор: jhonyxakep 28.2.2010, 02:45 |
по моему это все таки линковка в стиле C++. А вот что дают названия функций в таком стиле? |
| Автор: borisbn 28.2.2010, 06:48 |
| ThisIsSparta, Имя __cdecl и __stdcall функций, объявленных в msvc как extern "C" отличаются только подчеркиванием в начале jhonyxakep, очень не советую экспортировать из длл-ки stl-классы, т.к. они будут вылетать (и это в лучшем случае), если ты будешь использовать их в программе, откомпилированной другим компилятором или даже тем же компилятором, но с другой версией stl |
| Автор: xvr 2.3.2010, 17:56 | ||||
Это С (__stdcall), а 8 - это размер аргументов на стеке.
|
| Автор: jhonyxakep 3.3.2010, 08:01 |
жесть... |