Автор Тема: Пишем софт сами  (Прочитано 6010 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

AlexWonder

  • Гость
Пишем софт сами
« : 12 Июля 2008, 13:41:01 »
Вопрос к спецам!!

Вот решил попробовать свои силы в написании чего-нибудь для своего acorp ds110.
Решил начать с малого - работа со streamreader''ом. Выяснил что внутрях его есть
следующие функции: CheckForDVB, StartDVB,StopDVB,SetChannel,GetSignal и т.д.
Но вот не могу найти подробное описание  передаваемых и возращаемых параметров.
Кое-как нашел код на C:

//Импортируем функции из streamreader
        [DllImport("streamreader")]
        public static extern bool CheckForDVB();
        [DllImport("streamreader")]
        public static extern bool DelFilter(int filter_num);
        [DllImport("streamreader")]
        public unsafe static extern void GetSignal(int* L, int* Q);        ///Получение сигнала
        [DllImport("streamreader")]
        public static extern bool SendDiSEqC(int DiSEqCType, byte data);
        [DllImport("streamreader")]
        public unsafe static extern bool SetBitFilter(int pid, byte* FilterData, byte* FilterMask, byte FilterLength, void* lpFunc, int* lpfilter_num);
        [DllImport("streamreader")]
        public static extern bool SetChannel(int freq, int sr, int pol, int fec, int lof1, int lof2, int lofsw);        ///Установка канала
        [DllImport("streamreader")]
        public unsafe static extern bool SetFilter(int pid, Delegate lpFunc, int CallBackType, int size, int* lpfilter_num);
        [DllImport("streamreader")]
        public static extern bool StartDVB();
        [DllImport("streamreader")]
        public static extern bool Statistic();///???
        [DllImport("streamreader")]
        public static extern bool StopDVB();

Сам пишу на Delphi. Как я понял, checkfordvb,startdvb и stopdvb ничего не принимают, а возра-
щают результат - boolean. А вот setchannel принимает параметры типа dword или integer.
Вот написал маленький тестик - checkdvb и startdvb проходят, а setchannel - вылетает ошибка
записи в $FFFFFFF. Может кто из спецов подскажет точные типы параметров к этим функциям!

Вот отрывок кода:

function MyCheckDVB:Boolean;StdCall;
function MyStartDVB:Boolean;StdCall;
function MyStopDVB:Boolean;StdCall;
function MySetChannel(freq,sr,pol,fec,lof1,lof2,lofsw:integer):Boolean;StdCall;

var
  Form2: TForm2;

implementation

{$R *.dfm}

function MyCheckDVB; external ''C:\Streamreader.dll'' name ''CheckForDVB'';
function MyStartDVB; external ''C:\Streamreader.dll'' name ''StartDVB'';
function MySetChannel; external ''C:\Streamreader.dll'' name ''SetChannel'';
function MyStopDVB; external ''C:\Streamreader.dll'' name ''StopDVB'';

procedure TForm2.Button1Click(Sender: TObject);
begin
  If MyCheckDVB=true then label1.Caption:=''true'' else label1.caption:=''false'';
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  If MyStartDVB=true then label2.Caption:=''true'' else label2.caption:=''false'';
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  If MyStopDVB=true then label3.Caption:=''true'' else label3.caption:=''false'';
end;

procedure TForm2.Button4Click(Sender: TObject);
var
  pp:boolean;
begin
  pp:=MySetChannel(11057000,26470000,1,0,9750000,10600000,11700000);
  If pp=true then label4.Caption:=''OK'' else label4.caption:=''false'';
end;

end.


informatik

  • Специалист
  • *
  • Оффлайн Оффлайн
  • Сообщений: 550
  • Общая оценка: 2
  • Пол: Мужской
  • Почти я:)
Re: Пишем софт сами
« Ответ #1 : 10 Декабря 2009, 00:12:07 »
Приветствую!
Случайно сегодня наткнулся...
Все до неприличия просто (неужели никто не подсказал)
//берем в защищенный блок try-except и все. Проверено. AV ловит только из Delphi
procedure TForm2.Button4Click(Sender: TObject);
var
  pp:boolean;
begin
  try
   pp:=MySetChannel(11057000,26470000,1,0,9750000,10600000,11700000);
   If pp=true then label4.Caption:=''''OK'''' else label4.caption:=''''false'''';
  except
 Showmessage(''Не получается установить канал'');
 end;


end;
Все знать невозможно. Возможно знать многое.

informatik

  • Специалист
  • *
  • Оффлайн Оффлайн
  • Сообщений: 550
  • Общая оценка: 2
  • Пол: Мужской
  • Почти я:)
Re: Пишем софт сами
« Ответ #2 : 10 Декабря 2009, 12:58:57 »
Я заметил махонькую не точность в коде на С
  public static extern bool SetChannel(int freq, int sr, int pol, int fec, int lof1, int lof2, int lofsw);        ///тип integer от -32768 до 32767
 , а в коде на дельфе
pp:=MySetChannel(11057000,26470000,1,0,9750000,10600000,11700000);
это тогда не integer;
//вот для integer''a надо
pp:=MySetChannel(11057,26470,1,0,9750,10600,11700);
Все знать невозможно. Возможно знать многое.