Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2010, 16:47   #1
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию выдает ошибку при чтении файлов

пишу простенький мп3 плеер на bass.dll
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, bass;

type
  TForm1 = class(TForm)
    btAdd: TButton;
    btPlay: TButton;
    btPause: TButton;
    btPred: TButton;
    btNext: TButton;
    load: TTrackBar;
    volume: TScrollBar;
    list: TListView;
    lbName: TLabel;
    OpenDialog1: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure play(filename:string);
    procedure btPlayClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Chanel: HStream;
  name:string;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
if not (BASS_Init(-1, 44100, 0,Handle, nil)) then messagebox(0,'îøèáêà èíèöèàëèçàöèè ôàéëà',nil,mb_iconstop or mb_ok);
end;

procedure tform1.play(filename:string);
var Ffilename:pchar;
begin
if not fileExists(filename) then exit;

if chanel <> 0 then
  begin
  bass_channelstop(chanel);
  bass_streamfree(chanel);
  end;

Ffilename:=pchar(filename);
chanel:=bass_streamCreatefile(false,pchar(ffilename),0,0,BASS_UNICODE);
if chanel = 0 then
  begin
  messagebox(0,'chanel=0',nil,mb_iconstop or mb_ok);
  exit;
  end;
if bass_channelplay(chanel,false)=false then messagebox(0,'çâóê',nil,mb_iconstop or mb_ok);
Bass_SetVolume(100);
end;



procedure TForm1.btPlayClick(Sender: TObject);
begin
openDialog1 := TOpenDialog.Create(self);
if OpenDialog1.Execute Then name:=OpenDIalog1.Filename;
form1.play(name);
end;

end.

ошибка при чтении любого файла, не только аудио,

Последний раз редактировалось MetR; 27.11.2010 в 16:49.
MetR вне форума Ответить с цитированием
Старый 27.11.2010, 17:08   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Точно не скажу! Но есть один момент
Цитата:
Ffilename:=pchar(filename);
chanel:=bass_streamCreatefile(false ,pchar(ffilename),0,0,BASS_UNICODE);
Ffilename:=pchar(filename); вот привел к Pchar
pchar(ffilename) зачем ещё раз?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 27.11.2010, 17:21   #3
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию

исправил, но проблема осталась ТА ЖЕ.
ЗЫ тоже интерест(???)но стало почему так))

У нас принято писать грамотно, нормальным русским языком.
Если у вас проблемы с этим, проверяйте сообщения на орфографию в Ворде.
Рискуете набрать 5 штрафов и отправиться в бан.
Модератор.

Последний раз редактировалось mihali4; 27.11.2010 в 18:01.
MetR вне форума Ответить с цитированием
Старый 27.11.2010, 18:03   #4
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Этой библиотекой не пользовался, но меня настораживает флаг BASS_UNICODE. Мне кажется, он указывает на то, что имя файла задано в юникоде, а PChar, как известно, не юникод.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 27.11.2010, 18:13   #5
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Попробуй так
Код:
channel := BASS_StreamCreateFile(False,  Ffilename, 0, 0, BASS_SAMPLE_LOOP {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 27.11.2010, 18:16   #6
baster128
Форумчанин
 
Аватар для baster128
 
Регистрация: 24.04.2010
Сообщений: 205
По умолчанию

А где создаем сам поток что-то не видать. Или не весь код выложил?
baster128 вне форума Ответить с цитированием
Старый 27.11.2010, 18:21   #7
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию

не, не помогло
кстати, когда ошибка вылезает, выделяется вот эта строчка:
Код:
openDialog1.free;
18:24

Цитата:
А где создаем сам поток что-то не видать. Или не весь код выложил?
код весь выложил
Код:
chanel:=bass_streamCreatefile(false,pchar(ffilename),0,0,BASS_UNICODE);
это не то?

У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом. Это - флуд.
Читаем правила. Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Уважайте форумчан, и они ответят вам взаимностью...
Модератор


Если правила не будут прочитаны и не будут соблюдаться, то - "красный террор"

Последний раз редактировалось mihali4; 27.11.2010 в 20:17.
MetR вне форума Ответить с цитированием
Старый 27.11.2010, 18:26   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Код:

chanel:=bass_streamCreatefile(false ,pchar(ffilename),0,0,BASS_UNICODE) ;

это не то?
Лучше мой пример
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 27.11.2010, 18:29   #9
baster128
Форумчанин
 
Аватар для baster128
 
Регистрация: 24.04.2010
Сообщений: 205
По умолчанию

Попробуй if chanel <> nil then
вообще-то HStream - это указатель.
baster128 вне форума Ответить с цитированием
Старый 27.11.2010, 18:33   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
а PChar, как известно, не юникод.
зависит от версии Делфи, в юникод версиях(например Д2009) это Юникод а не анси
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выдает ошибку при входе в игру lotter Помощь студентам 1 05.06.2010 13:54
Программа выдает ошибку при работе T-dayne Помощь студентам 15 27.02.2010 10:31
выдает ошибку при вызове scanf Wi1D Общие вопросы C/C++ 6 27.12.2009 19:53
При активизации формы выдает ошибку Canadec Общие вопросы Delphi 11 04.09.2007 12:10