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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dll в c++builder, не могу получить указатель на функцию 
:(
    Опции темы
kuzia
Дата 23.5.2003, 15:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте все!
Помогите, пожалста. Создаю dll в c++builder. Помещаю в нее 1 функцию:
h-файл:

#ifndef UNIT1H
#define UNIT1H

#include <windows.h>

extern "C" __declspec(dllexport) double minus(double x1, double x2);

#endif

cpp-файл:

#include <windows.h>
//-------------------------------------------------------------------------
extern "C" __declspec(dllexport) double minus(double x1, double x2)
{
return x1 - x2;
}
//---------------------------------------------------------------------------

Создаю тестирующее приложение:
//---------------------------------------------------------------------------

#include <windows.h>
#include <iostream.h>

typedef double(*MyFunc)(double, double);

int main(int argc, char* argv[])
{
HINSTANCE dllInstance = LoadLibrary("Project1.dll");

MyFunc Func;

Func = (MyFunc) GetProcAddress(dllInstance, "minus");

if(Func == NULL)
{
LPVOID lpMsgBuf;

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);


MessageBox( NULL, (const char*)lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );

// Free the buffer.
LocalFree( lpMsgBuf );

}
else{

double x1, x2;
cin >> x1 >> x2;
cout << Func(x1, x2);
}
FreeLibrary(dllInstance);

return 0;
}
//---------------------------------------------------------------------------

Запускаю. Получаю "Не найдена указанная процедура".
Не понимаю, что происходит. Почему я получаю Func = NULL?
Ведь LoadLibrary("Project1.dll") сработал правильно, а функция объявлена так, как описано во всей литературе.
  Вверх
Vyacheslav
Дата 23.5.2003, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Поставь лидирующий знак подчеркивания в названии
Код

Func = (MyFunc) GetProcAddress(dllInstance, "_minus");




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
kuzia
Дата 23.5.2003, 16:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











спасибо, помогло smile.gif))
  Вверх
vickr
Дата 23.5.2003, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



При указании спецификации вызова extern "C" происходит декорирование имени ф-и. Нужно:
Код

Func = (MyFunc) GetProcAddress(dllInstance, "_minus");

В общем случае список декорированных символов, экспортируемых dll, можно просмотреть утилитой dumpbin. Она вроде поставляется с MSVS6.
--------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:)
PM MAIL   Вверх
vickr
Дата 23.5.2003, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Упс, немного опоздал smile.gif
--------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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