|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.02.2007, 14:57 | #1 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Работа с плагином DLL
Есть исходник плагина BISS для раскодировки спутниковых каналов на DELPHI , как его подключить к своей программе я не могу уже 2-недели бьюсь так и не получаеться. Плагин ввиде DLL.
если нужен исходник этого плагина могу выслать. Помогите разобраться . unit UMain; interface uses Forms, Windows, Variants, Classes, Controls, ExtCtrls, StdCtrls, Dialogs, sysutils, ComCtrls, Menus, Mask, Buttons; {********************** Multidec API *********************************** *} const MAX_CA_SYSTEMS = 48; const MAX_PID_IDS = 32; const MDAPI_GET_TRANSPONDER = $01020000; const MDAPI_SET_TRANSPONDER = $01020001; const MDAPI_GET_PROGRAMM = $01020010; const MDAPI_SET_PROGRAMM = $01020011; const MDAPI_RESCAN_PROGRAMM = $01020012; const MDAPI_SAVE_PROGRAMM = $01020013; const MDAPI_GET_PROGRAMM_NUMMER = $01020014; const MDAPI_SET_PROGRAMM_NUMMER = $01020015; const MDAPI_START_FILTER = $01020020; const MDAPI_STOP_FILTER = $01020021; const MDAPI_SCAN_CURRENT_TP = $01020030; const MDAPI_SCAN_CURRENT_CAT = $01020031; const MDAPI_START_OSD = $01020040; const MDAPI_OSD_DRAWBLOCK = $01020041; const MDAPI_OSD_SETFONT = $01020042; const MDAPI_OSD_TEXT = $01020043; const MDAPI_SEND_OSD_KEY = $01020044; const MDAPI_STOP_OSD = $01020049; const MDAPI_DVB_COMMAND = $01020060; type TSTART_FILTER = record DLL_ID, Filter_ID, Pid:Word; Name:array[00..31] of char; Irq_Call_Adresse: pointer; Running_ID:integer; end; TPIDFilters = record FilterName: Array[0..5-1] of Char; FilterId: Byte; PID: Word; end; TCA_System82 = record CA_Typ:Word; ECM:Word; EMM:Word; Provider_Id:DWord; end; TProgramm82 = record Name: Array[0..29] of char; Anbieter:Array[0..29] of char; Land:Array[0..29] of char; freq: DWord; Typ: Byte; volt: Byte; afc: Byte; diseqc: Byte; srate:Word; qam: Word; fec: Word; norm: Byte; tp_id: Word; Video_pid: Word; Audio_pid: Word; TeleText_pid:Word; PMT_pid:Word; PCR_pid:Word; ECM_PID:Word; SID_pid:Word; AC3_pid:Word; TVType: Byte; ServiceTyp: Byte; CA_ID: Byte; Temp_Audio:Word; Filteranzahl:Word; Filters: Array[00..(MAX_PID_IDS-1)] of TPIDFilters; CA_Anzahl:Word; CA_System82:array[0..(MAX_CA_SYSTEMS-1)] of TCA_System82; CA_Land: Array[0..4] of char; Merker:Byte; Link_TP:Word; Link_SID:Word; Dynamisch:Byte; Extern_Buffer:array[00..15] of char; end; procedure On_Send_Dll_ID_Name(var Name:array of char );cdecl; procedure On_Start(MDInstance:LongWord; MDWnd: HWND; Log_Set: Bool; DLL_ID: Integer; HotKey: PChar; Vers: PChar; var ReturnValue: Integer); cdecl; procedure On_Menu_Select(MenuID:word );cdecl; procedure On_Channel_Change( CurrentProgramm :TProgramm82 );cdecl; procedure On_Filter_Close(FilterOffset : Word);cdecl; procedure On_Exit(MDInstance:LongWord;MDWnd:L ongWord;Log_Set:BOOL);cdecl; procedure On_Hot_Key();cdecl; procedure On_Osd_Key( Key:char );cdecl; procedure On_Rec_Play(Mode:integer);cdecl; exports On_Send_Dll_ID_Name name 'On_Send_Dll_ID_Name'; exports On_Start name 'On_Start'; exports On_Menu_Select name 'On_Menu_Select'; exports On_Channel_Change name 'On_Channel_Change'; exports On_Filter_Close name 'On_Filter_Close'; exports On_Exit name 'On_Exit'; exports On_Hot_Key name 'On_Hot_Key'; exports On_Osd_Key name 'On_Osd_Key'; exports On_Rec_Play name 'On_Rec_Play'; procedure MD_Filter(MyFilter : integer; BufLen :integer; Buf:PByteArray);cdecl; procedure add_Md_Filter(Pid:word); var CurrentProgramm1:TProgramm82; Filter:TSTART_FILTER; MultiDecInstance : LongWord; MultiDecWindow: HWND; MultiDec_DLL_ID: integer; {********************************** *********************************** *********} 1-часть больше не влезло |
05.02.2007, 14:59 | #2 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Продолжение
type TForm1 = class(TForm) BitBtn1: TBitBtn; BitBtn2: TBitBtn; Panel1: TPanel; Label1: TLabel; MaskEdit1: TMaskEdit; LabelCh: TLabel; BitBtn3: TBitBtn; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure BitBtn1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var form1: TForm1; implementation uses StrUtils, DateUtils, messages, IniFiles; {$R *.dfm} const PLUGIN_NAME='BISS'; endl=#$0D+#$0A; var Running:boolean=false; AppPath,provname,channame, BISSKEY:string; TZ: _TIME_ZONE_INFORMATION; mythread:TThread; IniFile:TIniFile; SelLng:byte=1; OldDW1,OldDW2,Wordkey,Worddata,oldt ypemk : string; SAA_COMMAND : array [00..15] of Byte=(7,0,$10,1,5,0,0,0,0,0,0,0,0,0 ,0,0); procedure InitVars; begin form1.Caption:='BISS'; end; procedure InitPlugin; var aux,f:integer;NewItem:TMenuItem;s:s tring; begin mythread:=TThread.Create(True); mythread.Priority := tpLower; mythread.Resume; AppPath:=extractfilepath(Applicatio n.ExeName); IniFile:=TIniFile.Create(AppPath+'B ISS.ini'); BISSKEY:=IniFile.ReadString('BISSKE YS','Default Channel','111111222222'); end; procedure SetBISSKey;cdecl; var i,j: integer; Worddata2,Worddata1: String; CWSAAG1,CWSAAG2,CWSAA1,CWSAA2 : array [00..07] of Byte; begin if true then begin Worddata1 := copy(BISSKEY,1,6)+'FF'+copy(BISSKEY ,7,6)+'FF'; Worddata2 := Worddata1; for i:=0 to 7 do CWSAA1[i]:=strtoint('$'+Copy(Worddata1,1+i*2 ,2)); for i:=0 to 7 do CWSAA2[i]:=strtoint('$'+Copy(Worddata2,1+i*2 ,2)); OldDW1:=Worddata1;OldDW2:=Worddata2 ; CWSAA1[3]:=(CWSAA1[0]+CWSAA1[1]+CWSAA1[2])and $FF; CWSAA1[7]:=(CWSAA1[4]+CWSAA1[5]+CWSAA1[6])and $FF; CWSAA2[3]:=(CWSAA2[0]+CWSAA2[1]+CWSAA2[2])and $FF; CWSAA2[7]:=(CWSAA2[4]+CWSAA2[5]+CWSAA2[6])and $FF; i:=0;j:=1; while (i<8) do begin CWSAAG1[j]:=CWSAA1[i];CWSAAG2[j]:=CWSAA2[i];j:=j+2;i:=i+2;end; i:=1;j:=0; while (i<8)do begin CWSAAG1[j]:=CWSAA1[i];CWSAAG2[j]:=CWSAA2[i];j:=j+2;i:=i+2;end; for i:=0 to 7 do SAA_COMMAND[i+8]:=CWSAAG1[i]; SAA_COMMAND[6]:=0; // DW1 SendMessage(MultiDecWindow,WM_USER, MDAPI_DVB_COMMAND,(LongWord(@SAA_CO MMAND))); for i:=0 to 7 do SAA_COMMAND[i+8]:=CWSAAG2[i]; SAA_COMMAND[6]:=1; // DW2 SendMessage(MultiDecWindow,WM_USER, MDAPI_DVB_COMMAND,(LongWord(@SAA_CO MMAND))); end; end; {************************** Multidec implementation ***************************} |
05.02.2007, 15:01 | #3 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Продолжение
procedure TForm1.FormShow(Sender: TObject); begin channame := currentprogramm1.Name; if channame='' then channame:='Default Channel'; BISSKEY:=IniFile.ReadString('BISSKE YS',channame,'111111222222'); LabelCh.Caption:=channame; MaskEdit1.Text:=BISSKEY; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Filter.Filter_ID:=0; running := false; end; function IsHex(ch: char): boolean; var i: word; begin i := ord(ch); IsHex := ((i>=ord('0')) and (i<=ord('9'))) or ((i>=ord('A')) and (i<=ord('F'))) or ((i>=ord('a')) and (i<=ord('f'))); end; procedure TForm1.BitBtn1Click(Sender: TObject); var i,L: integer; goodval: boolean; tmps: String[60]; begin L := Length(MaskEdit1.Text); goodval := (L=12); for i := 1 to L do if not IsHex(MaskEdit1.Text[i]) then goodval := false; if not goodval then begin MessageBox(MultiDecWindow,'Invalid BISS key format!'+#13+ 'It should be a 12 digit hex number.', 'Error',MB_OK); exit; end; BISSKEY := MaskEdit1.Text; SetBISSKey; IniFile.WriteString('BISSKEYS',chan name,BISSKey); Form1.Hide; end; procedure TForm1.BitBtn3Click(Sender: TObject); begin if (channame<>'') and (channame<>'Default Channel') then IniFile.DeleteKey('BISSKEYS',channa me); Form1.Hide; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin Form1.Hide; end; end. |
05.02.2007, 15:05 | #4 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Написал программу плеера для DVB карт SCYSTAR. Можете взять на
http://TELECENTOR.NAROD.RU Плагин раскодирует каналы. а я его подключить не могу. |