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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2007, 14:57   #1
АНАТОЛИЙ249
Пользователь
 
Регистрация: 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-часть больше не влезло
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 05.02.2007, 14:59   #2
АНАТОЛИЙ249
Пользователь
 
Регистрация: 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 ***************************}
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 05.02.2007, 15:01   #3
АНАТОЛИЙ249
Пользователь
 
Регистрация: 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.
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 05.02.2007, 15:05   #4
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию

Написал программу плеера для DVB карт SCYSTAR. Можете взять на
http://TELECENTOR.NAROD.RU

Плагин раскодирует каналы. а я его подключить не могу.
АНАТОЛИЙ249 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск