| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > dll в c++builder |
| Автор: kuzia 23.5.2003, 15:56 |
| Здравствуйте все! Помогите, пожалста. Создаю 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 | ||
Поставь лидирующий знак подчеркивания в названии
|
| Автор: kuzia 23.5.2003, 16:04 |
| спасибо, помогло |
| Автор: vickr 23.5.2003, 16:04 | ||
При указании спецификации вызова extern "C" происходит декорирование имени ф-и. Нужно:
В общем случае список декорированных символов, экспортируемых dll, можно просмотреть утилитой dumpbin. Она вроде поставляется с MSVS6. |
| Автор: vickr 23.5.2003, 16:05 |
| Упс, немного опоздал |