BloDenEk
Junior Member / Новичок
Участник № / Member № 1027
отправлено / posted
Можно написать драйвер на Delhpi? Если да,где можно посмотреть примеры или документацию таковых? Целесообразность написания драйвера на Delhpi?
Сообщения / Posts 22 | Из / From: Украина
| IP / IP: IP адрес / IP address |
отправлено / posted
Если Вы планируете писать драйвер типа TYPE11, TYPE12, TYPE13 или RWH, то ничего не получится - только VC++. Если драйвер как ОРС-сервер, то можно.
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Sergei
Forum Professor / Завсегдатай форума
Участник № / Member № 161
отправлено / posted
Ну зачем же так категорично? Вот, например, главный модуль рабочей RWH-ки:
code:
library RWH;
{ Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. }
uses SysUtils, Classes, IniFiles, records in 'records.pas', WinSock2 in 'WinSock2.pas', ServerThread in 'ServerThread.pas', ClientThread in 'ClientThread.pas', syncobjs, shared in 'shared.pas', uSockErrors in 'uSockErrors.pas';
//если файла небыло, создастся со значениями по умолчанию IniFile.WriteString('Adres', 'Host', Host); IniFile.WriteInteger('Adres', 'Port_In', POrtIn); IniFile.WriteInteger('Adres', 'Port_Out', POrtOut); IniFile.WriteBool('Adres', 'Server', Server);
IniFile.WriteInteger('Arbitr stat masterom', 'Base', ArbitrBaseOut); IniFile.WriteInteger('Arbitr stat masterom', 'Ch', ArbitrChOut); IniFile.WriteInteger('Arbitr stat masterom', 'Mux', ArbitrMuxOut); IniFile.WriteInteger('Arbitr stat masterom', 'bit', ArbitrBitOut);
BuffNow := 1; //будет одна лишняя посылка, зато сервер сразу отдаст тек знач-я setLength(Buffer, 1000);
if Server = true then begin assignFile(log, 'C:\TraceMode5_Professional\rwh_Server.log'); rewrite(log); //Запускаем поток, который "слушает" сеть t1 := TServerThread.create(true); t1.portIn := PortIn; t1.Host := Host; {$IFDEF DEBUG} Add2Log('==', 'RWH Перед запуском сервера. threadHandle=' + inttostr(t1.handle)); {$ENDIF} t1.Resume; //запускаем на прослушивание end else begin assignFile(log, 'C:\TraceMode5_Professional\rwh_client.log'); rewrite(log); ClThr := TClientThread.create(true); ClThr.portIn := PortIn; ClThr.portOut := PortOut; ClThr.Host := Host; ClThr.Resume; //запускаем на прослушивание end; end;
procedure rwh_stop(); cdecl; begin if t1 <> nil then t1.Terminate; if ClThr <> nil then begin ClThr.Terminate; ClThr.WaitFor; end; Add2Log('==', 'Завершаем работу'); closefile(log); csBuffer.Free; csTMValues.Free; csLog.Free; // Form.Free; end;
procedure rwh_aio_init(var IA: x); cdecl; var ToWrite, temp: chan;
begin toWrite.ia := ia; ToWrite.val := 0; WriteArray(toWrite); end;
procedure rwh_dio_init(var IA: x); cdecl; var ToWrite: chan; begin toWrite.ia := ia; ToWrite.val := 0; WriteArray(toWrite); end;
function rwh_dio_write({q : byte;}var IA: x; v: word): integer; cdecl; var mes: chan; begin mes.ia := ia; mes.val := v; AddBuffer(mes); result := 0; end;
function rwh_dio_read(var IA: x; var v: word): integer; cdecl; begin v := ReadArray(ia); result := 0; end;
function rwh_atr_read(var IA: x; var v: word): integer; cdecl; begin result := 0; end;
function rwh_atr_write(var IA: x; var v: word): integer; cdecl; begin result := 0; end;
exports rwh_start name '?rwh_start@@YAXXZ', rwh_stop name '?rwh_stop@@YAXXZ', rwh_aio_init name '?rwh_aio_init@@YAXAATIA@@@Z', rwh_dio_init name '?rwh_dio_init@@YAXAATIA@@@Z', rwh_aio_write name '?rwh_aio_write@@YAHAATIA@@G@Z', rwh_aio_read name '?rwh_aio_read@@YAHAATIA@@AAG@Z', rwh_dio_write name '?rwh_dio_write@@YAHAATIA@@G@Z', rwh_dio_read name '?rwh_dio_read@@YAHAATIA@@AAG@Z', rwh_atr_read name '?rwh_atr_read@@YAHAATIA@@AAM@Z', rwh_atr_write name '?rwh_atr_write@@YAHAATIA@@AAM@Z'; end.