Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Имена функций в DLL скомпилированных MinGW, Имена функций меняются в конечной DLL. 
:(
    Опции темы
NumLock
Дата 30.7.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.7.2006
Где: Иркутск

Репутация: нет
Всего: нет



Возникла проблема написания DLL (с помощью Dev-C++) для проекта на Delphi. По заветам MinGW в заголовочный файл был вставлен следующий код.
Код

#if BUILDING_DLL
# define EXPORT __declspec (dllexport)
#else 
# define EXPORT __declspec (dllimport)
#endif

И соответственно перед каждой экспортная функция имела приблизительно следующий вид.
Код

void EXPORT example_function();


С компиляцией проблем не возникло. Но в уже скомпилированной DLL имя функции было следующим:
_Z16example_functionv. Т.е. для того, чтобы подгрузить ее в Delphi надо было писать:
Код

type
  procedure example_function(); cdecl; external 'dllName.dll' name '_Z16example_functionv';


Я в принципе не гордый, а если надо будет плагин писать (меня просто не поймут  smile )? Подскажите, пожалуйста, как объяснить компилятору (или линковщику) что мне нужны изначальные имена функций (без этих обрамляющих ... символов). 
PM MAIL ICQ Skype Jabber   Вверх
Daevaorn
Дата 30.7.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



NumLock, попробуй обернуть все функции в extern "C"{}. Или в опциях компилятора поставь: компилирование кода как С. 
PM MAIL WWW   Вверх
NumLock
Дата 30.7.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.7.2006
Где: Иркутск

Репутация: нет
Всего: нет



Спасибо, полегчало. 
PM MAIL ICQ Skype Jabber   Вверх
NumLock
Дата 31.7.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.7.2006
Где: Иркутск

Репутация: нет
Всего: нет



Возникла ещё одна проблема. Код заголовочного файла следующий:
Код

#ifdef BUILD_DLL
// the dll exports
#define EXPORT __declspec(dllexport)
#else
// the exe imports
#define EXPORT __declspec(dllimport)
#endif
         
extern "C" {

  __stdcall int EXPORT example_function();

}

При компиляции имя функции становится следующим: example_function@0. С cdecl все нормально, но очень важно чтобы ковенция вызова была stdcall. Как это вылечить? 
PM MAIL ICQ Skype Jabber   Вверх
Daevaorn
Дата 31.7.2006, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



NumLock, боюсь что никак. Почитай доку к MinGW 
PM MAIL WWW   Вверх
_hunter
Дата 31.7.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: нет
Всего: 98



по идее так:
EXPORT int  __stdcall example_function();
писать нужно... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | GNU toolchain | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.