101 lines
2.6 KiB
ObjectPascal
101 lines
2.6 KiB
ObjectPascal
unit U_DeviceJkDll;
|
|
|
|
interface
|
|
uses
|
|
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
|
|
System.Classes, Vcl.Graphics,
|
|
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, cxGraphics, cxControls, cxLookAndFeels,
|
|
cxLookAndFeelPainters, cxClasses, dxLayoutContainer,
|
|
dxLayoutControl, dxLayoutcxEditAdapters, cxContainer, cxEdit, Vcl.StdCtrls,
|
|
cxTextEdit, Vcl.ExtCtrls, dxLayoutControlAdapters, U_BaseList, Data.DB,
|
|
Data.Win.ADODB, Vcl.Buttons, Vcl.ComCtrls, Vcl.ToolWin, cxImage, cxDBEdit,
|
|
cxStyles, cxCustomData, cxData, cxDataStorage, cxNavigator,
|
|
dxDateRanges, dxScrollbarAnnotations, cxDBData, dxBarBuiltInMenu, cxPC,
|
|
cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
|
|
cxGridCustomView, cxGrid, cxMemo, cxRichEdit, U_frameBads,
|
|
Datasnap.DBClient, RM_Common, RM_Class, RM_GridReport,
|
|
cxCheckBox, cxMaskEdit, cxDropDownEdit, Vcl.Menus, cxButtonEdit, RM_Dataset,
|
|
cxGeometry, dxFramedControl, dxPanel, U_KeyBoard, cxGroupBox,
|
|
cxGridCustomPopupMenu, cxGridPopupMenu, MovePanel;
|
|
|
|
procedure OpenCom(mHandle:Thandle;DllName: string;var fIsCommopen:boolean);
|
|
procedure CloseCom(DllName: string);
|
|
implementation
|
|
|
|
|
|
|
|
procedure OpenCom(mHandle:Thandle;DllName: string;var fIsCommopen:boolean);
|
|
type
|
|
TMyFunc = function(fhandle: hwnd; sCommName: PAnsiChar; IntTime: Integer;
|
|
IsMessage: Integer): hwnd; stdcall;
|
|
var
|
|
Tf: TMyFunc;
|
|
Tp: TFarProc;
|
|
Th: Thandle;
|
|
newh: hwnd;
|
|
begin
|
|
Th := LoadLibrary(pchar(trim(DllName)));
|
|
if Th > 0 then
|
|
begin
|
|
try
|
|
Tp := GetProcAddress(Th, 'CommOpen');
|
|
if Tp <> nil then
|
|
begin
|
|
Tf := TMyFunc(Tp);
|
|
newh := Tf(mHandle, 'Comm1', 500, 1);
|
|
if newh < 1 then
|
|
begin
|
|
Application.MessageBox(pchar('打开串口失败!'), '提示');
|
|
end
|
|
else
|
|
fIsCommopen := true;
|
|
end
|
|
else
|
|
begin
|
|
fIsCommopen := false;
|
|
end;
|
|
finally
|
|
// FreeLibrary(Th);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
fIsCommopen := false;
|
|
Application.MessageBox(pchar('找不到 ' + trim(DllName) + ' 文件!'), '提示');
|
|
end;
|
|
end;
|
|
|
|
procedure CloseCom(DllName: string);
|
|
type
|
|
TMyFunc = function(sCommName: PAnsiChar): hwnd; stdcall;
|
|
var
|
|
Tf1: TMyFunc;
|
|
Tp1: TFarProc;
|
|
Th1: Thandle;
|
|
newh1: hwnd;
|
|
begin
|
|
Th1 := LoadLibrary(pchar(trim(DllName)));
|
|
if Th1 > 0 then
|
|
begin
|
|
try
|
|
Tp1 := GetProcAddress(Th1, 'CommClose');
|
|
if Tp1 <> nil then
|
|
begin
|
|
Tf1 := TMyFunc(Tp1);
|
|
newh1 := Tf1('Comm1');
|
|
end
|
|
else
|
|
begin
|
|
|
|
end;
|
|
finally
|
|
// FreeLibrary(Th1);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
Application.MessageBox(pchar('找不到 ' + trim(DllName) + ' 文件!'), '提示');
|
|
end;
|
|
end;
|
|
end.
|