Var i:integer; Ss: string; Begin
ss:=S;
for i:=1 to length(S) do ss[i]:=char(ord(ss[i]) xor key); code:=PChar(ss);
end;
exports Code; end.
Функция кодын түсіндірейік. S жолын және кілттің барлық мәнін алады. Содан кейін, циклде, бастапқы жолдың әрбір таңбасы арнайы НЕМЕСЕ оператор хороны арқылы берілген таңбамен ауыстырылады және осы таңбаның индексі мен Кілт пернесі болады.
Нәтижесінде жол шифрланған. Егер сол функцияны бірдей кілтпен бірнеше рет шифрланған жолға шақырсаңыз, онда шифрлеу
орындалады және функция түпнұсқа жолын қайтарады. Бұл принцип бойынша әдетте мәтінді шифрлау жүргізіледі, содан кейін қосымша шифрлау ережелері қолданылуы мүмкін. Әрбір келесі кейіпкердің кілтін кейбір ережелермен өзгертуге болады. Мысалы, егер шифр операторын оператормен ауыстырсаңыз:
ss[i]:=char(Ord(ss[i]) xor (key + I mod 2));
онда кілт әр екі таңба үшін циклды орындайды.
Кодекстің функциясын S параметрінің және қайтару мағынасының «Жол» ретінде анықталатын болса, іске асыру қарапайым еді. Бұл жағдайда сізге String түріндегі жергілікті айнымалы мәнді енгізіп, жолдарды түрлендірудің қажеті жоқ. Бірақ мұнда Delphi кітапхананың кодын жасаған және бұрын берілген мәтінді орналастырған түсініктемелерді есте сақтау пайдалы. Егер сіз DLL-ке жіберілгіңіз келсе немесе одан жолды алсаңыз, ShareMem-ды пайдалану тарауында көрсетуіңіз керек.
Бұл кітапхана BORLNDMM.DLL интерфейс модулі, мұндай жады ұйымдастыруды қамтамасыз етеді, онда DLL-мен ұзын жолдарды айырбастауға болады. Сонымен қатар, DLL-ді қолданатын қосымшаның негізгі файлында ShareMem модулі бағдарламада бірінші кезекте көрсетіледі. Сондықтан, DLL пайдаланушыларына осындай сұрауларды ұсынудан және PChar сияқты параметрлер арқылы жолдардың берілуін қолданған дұрыс.
DLL процедураларынан және функцияларынан экспортталған тақырыптардан кейін анықталған stdcall спецификациясы параметрлерді беру кезінде белгілі бір конвенцияларды анықтайды; атап айтқанда параметрлерін солдан оңға қарай жүйелеу. Осындай аудару Windows API-де және DLL деп аталатын қосымшаларды жасау үшін қолданылатын бағдарламалау тілдерінде қабылданады.Демек, stdcall іріктеуішін әрдайым пайдалану ұсынылады, әйтпесе тіркелушінің спецификациясы әдепкі бойынша қабылданады. Бұл параметрлердің жылдам алмасуын қамтамасыз етеді, бірақ мұндай DLL тек Pascal-да жазылған қосымшаларда қолданыла алады
DLL-кодындағы барлық функциялар мен рәсімдер мәтіндерінен кейін экспортты жеткізу орналасқан. Ол DLL арқылы экспортталатын процедуралар мен функцияларды, яғни сыртқы бағдарламаға қоңырау шала алатындарды тізеді. Экспортталған функциялардан басқа, DLL-де ішкі қолдануға арналған утилиталарда сипатталған кейбір қосалқы функцияларды сипаттауға болады. Әрине, мұндай коммуникациялар экспорттық ұсынысқа қосылмаған.
Егер экспорттау процедураның немесе функцияның атауын ғана көрсетсе, онда сыртқы бағдарлама оны шақыра алатын атаумен анықталады. Бірақ кілт сөздің атауымен сыртқы қолдануға арналған басқа атауды белгілей аласыз. Мысалы, жоғарыда келтірілген экспорттау туралы мәлімдемені келесідей ауыстырсаңыз:
exports
DoMy name 'My', Code;
онда сыртқы бағдарламаның DoMy функциясы «Менің» атын қолданып қоңырау шалуы керек.
Сыртқы бағдарлама DLL функцияларына және рәсімдеріне аттар емес, индекстер арқылы қоңырау шалуы мүмкін. Көрсеткіштер экспортта тізімделген тегі бойынша автоматты түрде тағайындалады. Индекстер кілт сөз индексін пайдалану арқылы мәжбүр болады. Мысалы:
exports
DoMy index 1,
Code index 2;
Егер индекстермен қоңырау шалу мүмкін болса, индекстерді DLL-ге жаңа функциялар мен рәсімдерді қосқан кезде өзгертпеуі үшін индекстерді ұқсас жолмен орнату керек. Басқа тілдерге және жүйелерге түсініксіз функциялар атауында кейбір таңбалар пайдаланылса, индексті шақыру қажет болуы мүмкін. Шын мәнінде, кілт сөз индексі бар индекстерді көрсету Windows үшін ғана рұқсат етіледі, басқа платформаларда индекстер автоматты түрде жасалады.
Экспорттау туралы ереже DLL-ге бірнеше рет енгізілуі мүмкін және кодтың кез келген жеріне орналастырылады, бірақ оның функциялары мен рәсімдерін жариялағаннан кейін ғана. Егер DLL шамадан тыс жүктелген функциялар болса, олар параметрлер тізімімен қатар экспорттау мәлімдемесіне қосылып, оларды әртүрлі экспортталған аттармен беру керек. Мысалы, кітапханада екі функция сипатталсын:
function Average (X, Y: integer):
real; overload;
stdcall; begin
Average := (X + Y) / 2
Достарыңызбен бөлісу: |