Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нулевой указатель на функцию, динамическое подключение библиотеки 
V
    Опции темы
bent
Дата 5.5.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
В программу (на Microsoft Visual C++) подключаю библиотеку, разработанную в Borland C++ Builder.
Библиотека подключается, но вот адреса на функции получить не удается (нужные мне функции ЭКСПОРТИРУЕМЫЕ, все названия, возвращаемый тип и список параметров СОВПАДАЮТ - это проверено!). Может, существует какое-то преобразование имен функций из Borland в Visual C (ну там подчеркивание добавляется или регистр меняется), которое я упустил?
  Кстати, экспериментировал, перед названием функции (да и после него) ставил одинарное, двойное подчеркивание, менял регистр - без результата.
  Вот отрывок кода:

 
Код

 typedef int (*InitFunc) (int, int);
 InitFunc pInit;    

 HINSTANCE ElxDll = LoadLibrary("ElxCore.dll");
 if ( ElxDll != NULL )
{                
      pInit = (InitFunc)GetProcAddress(ElxDll, "InitData");
      pInit (6,7);
}

Еще раз подчеркну, что библиотека загружается (ElxDll != NULL) и в коде библиотеки название функции InitData, функция принимает два параметра типа int и выдает результат типа int.
Вот такая проблема... smile  
PM MAIL   Вверх
LuckLess
Дата 5.5.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



bent
добавь к функций ( как в борланде так и в микросове) 
extern "C"

Добавлено @ 15:57 
это предотвратит искажение имен 
PM MAIL   Вверх
Fazil6
Дата 5.5.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



для того, чтобы 100% уверенным в названиях функций добавь в проект библиотеки def файл, где указываются имена под которыми функции должны быть доступны из библиотеки (правда никогда из билдера так не делал, а только из VC)
вот например
Цитата

LIBRARY  Linkerdll.dll
EXPORTS
    create_link_thread       @1
    Send_Message             @2
    stop_link_thread         @3
    delete_link_thread       @4
    get_stability            @5
    create_fifo              @6
    fifo_is_empty            @7
    fifo_items   @8
    get_message              @9
    set_adres                @10
    
    get_mes_obj              @12

в MSDN посмотри по поводу def файла.

Хотя на моей памяти я не сталкивался чтобы Билдер коверкал имена.
Покажи объявление функции в самой библиотеке. 
PM MAIL   Вверх
bsa
Дата 5.5.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Где-то сталкивался с тем, что необходимо было указывать подчеркивание перед именем функции (или наоборот - оно мешало ее достать иб библиотеки).
Еще интересно, как ты экспортировал. Должно быть примерно так:
extern "C" SOMETYPE __stdcall __export Function(LIST_OF_ARGS); 
PM   Вверх
bent
Дата 6.5.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



1. Объявление функции в библиотеке:
Код

#define DECLSPEC __declspec(dllexport)
DECLSPEC int InitData(int N, int M)
{
   ....
}

2. Попробую заменить это на
    
Цитата

    extern "C" SOMETYPE __stdcall __export Function(LIST_OF_ARGS);  

  Спасибо! 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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