![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| kuzia |
|
|||
|
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 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Поставь лидирующий знак подчеркивания в названии
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| kuzia |
|
|||
|
Unregistered |
спасибо, помогло
|
|||
|
||||
| vickr |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 13.5.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
При указании спецификации вызова extern "C" происходит декорирование имени ф-и. Нужно:
В общем случае список декорированных символов, экспортируемых dll, можно просмотреть утилитой dumpbin. Она вроде поставляется с MSVS6. --------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:) |
|||
|
||||
| vickr |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 13.5.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
Упс, немного опоздал
--------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |