Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/35: Рейтинг темы: голосов - 35, средняя оценка - 4.91
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
1

Ошибка доступа к памяти, ошибка компонентов .bpl

12.12.2012, 21:14. Показов 6503. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Использую в проекте библиотеку bass.dll. И при работе с ней у билдера часто возникают ошибки. Либо ошибка доступа к памяти, либо ошибка компонентов .bpl. Ошибка доступа памяти периодически возникает при включении bass.dll.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
HWND win=NULL;
 
HRECORD chan;   // recording channel
 
void Error(const char *es)
{
    char mes[200];
    sprintf(mes,"%s\n(error code: %d)",es,BASS_ErrorGetCode());
    MessageBox(win,mes,0,0);
}
 
BOOL CALLBACK DuffRecording(HRECORD handle, const void *buffer, DWORD length, void *user)
{
    return TRUE; // continue recording
}
 
static BOOL Initialize()
{
 if (!BASS_RecordInit(-1)) {
    Error("Can't initialize device");
    return FALSE;
 }else{
    chan = BASS_RecordStart(44100, 2, 0, &DuffRecording, 0);
 }
    return TRUE;
}
А именно при вызове функции Initialize();. При выключении программы происходит остановка bass.dll
C++
1
2
3
4
  BASS_Stop();
  BASS_RecordFree();
  BASS_StreamFree(chan);
  BASS_Free();
Несмотря на это, билдер выдает ошибку компонентов .bpl. Если запускать программу отдельно от билдера, никаких ошибок нет. Пробовал и на 2007 и на 2009 билдере. Библиотек последней версии. В чем может быть проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2012, 21:14
Ответы с готовыми решениями:

Библиотека Bpl. Ошибка Cannot convert при сборке .bpl
Добрый день. Есть проект для создания bpl написанный на Embracadero Rad Studio 2010, необходимо...

Ошибка доступа к памяти
При нескольких проходах выдает ошибку доступа к памяти int hod_comp(int count) {...

Ошибка доступа к памяти
Я только учусь работать с Lazarus. Объясните, пожалуйста, причину возникновения и (или) решение...

Ошибка доступа к памяти
Доброго времени суток! Возникла проблема. Есть класс СТРОКА. В нем перегруженные операторы "-"...

31
Эксперт С++
8480 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.12.2012, 21:39 21
Author24 — интернет-сервис помощи студентам
Ну а я о чем ?

Добавлено через 9 минут
Собственно у меня нормально работает...а вы нам просто парите мозг

А c lib что-то, то неправильно сконвертился

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
typedef void __cdecl (*dll_func1)(int device, DWORD freq, DWORD flags, HWND win, const GUID *dsguid);
typedef void __cdecl (*dll_func2)();
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 HMODULE hDLL = LoadLibrary("bass.dll");
 
 if (!hDLL) {
        ShowMessage("Невозможно загрузить bass.dll");
        return;
 }
 
 dll_func1 pBASS_Init = NULL;
 // пытаемся найти в таблице экспорта необходимую нам функцию
 pBASS_Init = (dll_func1)GetProcAddress(hDLL, "BASS_Init");
 
 if (pBASS_Init) pBASS_Init(-1, 44100, 0, NULL, NULL);
 else ShowMessage("!!!");
 
 dll_func2 pBASS_Stop = NULL;
    // пытаемся найти в таблице экспорта необходимую нам функцию
 pBASS_Stop = (dll_func2)GetProcAddress(hDLL, "BASS_Stop");
 
 if (pBASS_Stop)  pBASS_Stop();
 else ShowMessage("!!!");
 
 FreeLibrary(hDLL);
}
//---------------------------------------------------------------------------
0
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
14.12.2012, 21:46  [ТС] 22
Ну так в программе работать не будет. BASS_Stop вызывается в самом конце работы с программой. Т.е. запустили программу, прошел BASS_Init();, вызвали еще кучу необходимых нам функций. А вот когда программу закрыли, в событии OnClose(); вызывается BASS_Stop(); (часто еще BASS_Free(); и т.п., зависит от того, что мы вызывали до этого). А у вас сразу после запуска BASS происходит его остановка.
0
Эксперт С++
8480 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.12.2012, 21:56 23
Ну вот приехали ... впишите между ними другие ф-ции и работайте...
0
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
14.12.2012, 21:58  [ТС] 24
Так программа может и час и два работать, а эти функции вызываться не один десяток раз. А тут при нажатии кнопки они все по одному разу отработают и BASS остановится. Какой в этом смысл?
0
Эксперт С++
8480 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.12.2012, 22:03 25
Смысл в том что количество "стопов" должно соответствовать количеству "инитов" что тут непонятного ?

Добавлено через 2 минуты
Соответствено Init должен вызываться один раз в FormCreate() а Stop один раз в FormClose().
Но в данном случае еще и сама dll подгружается/выгружается поэтому в одной кнопке.
0
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
14.12.2012, 22:05  [ТС] 26
Стоп должен быть всего один, при завершении работы программы. BASS_Stop() - остановка всех функций bass.dll
0
Эксперт С++
8480 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.12.2012, 22:07 27
Хз читайте доку... и разбирайтесь с либой

Проект с конверченым по Builder bass.lib RAD2009
Вложения
Тип файла: rar bass24.rar (382.7 Кб, 11 просмотров)
0
Эксперт С++
8480 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.12.2012, 22:12 28
......
0
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
14.12.2012, 22:27  [ТС] 29
Ваш проект тоже ошибку выдал при закрытии...
0
Эксперт С++
8480 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.12.2012, 22:30 30
Ну не знаю, значит у вас IDE кривая или руки...
У меня нормально работало специально десяток раз закрывал/открывал
0
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
14.12.2012, 22:35  [ТС] 31
IDE штук 5 разных ставил и 2007 и 2009, ошибка везде есть. Скорее 64 бита...
0
Эксперт С++
8480 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.12.2012, 22:42 32
Скорее всего...
0
14.12.2012, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2012, 22:42
Помогаю со студенческими работами здесь

Ошибка доступа к памяти
Приветствую В проге на онкрит ставлю: if paramstr(1)='someparam' then begin...

Ошибка доступа записи памяти
Здравствуйте,возникла проблема с циклом: как только начинается выполнения цикла,то возникает ошибка...

Структуры - ошибка доступа к памяти
Вроде все написано правильно, но компилер ругается при попытке создать второй елемент... Попрошу...

Почему происходит ошибка доступа к памяти?
GetK32: __1: cmp byte ptr ,00h jz WeFailed cmp word...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru