📄 main.~pas
字号:
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, XPMan;
Const
MAXSIZE=64;
MP_WRITE:DWORD=0;
MP_READ:DWORD=1;
type
DWORD = LongInt;
PCHAR8 = array[0..MAXSIZE] of char;
PBYTE = array[0..MAXSIZE] of BYTE;
PDWORD = array[0..MAXSIZE] of DWORD;
PVOID = Pointer;
UINT = Cardinal;
TFrmMain = class(TForm)
btKetnoi: TBitBtn;
btLed1: TBitBtn;
btLed2: TBitBtn;
btLed3: TBitBtn;
lbKetnoi: TLabel;
btNhan: TBitBtn;
txtReDll: TEdit;
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
procedure btKetnoiClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btLed1Click(Sender: TObject);
procedure btLed2Click(Sender: TObject);
procedure btLed3Click(Sender: TObject);
procedure btNhanClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function _MPUSBGetDLLVersion():DWORD;
stdcall;external 'mpusbapi.dll';
function _MPUSBGetDeviceCount(pVID_PID:PCHAR8):DWORD;
stdcall;external 'mpusbapi.dll';
function _MPUSBOpen(instance:DWORD;pVID_PID:PCHAR8;
pEP:PCHAR8;dwDir:DWORD;dwReserved:DWORD):
THANDLE;stdcall;external 'mpusbapi.dll';
function _MPUSBClose(handle:THANDLE):DWORD;
stdcall;external 'mpusbapi.dll';
function _MPUSBRead(handle:THANDLE;var pData:PBYTE;
dwLen:DWORD;var pLength:DWORD;
dwMilliseconds:DWORD):DWORD;stdcall;
external 'mpusbapi.dll';
function _MPUSBReadInt(handle:THANDLE;
var pData:PBYTE;dwLen:DWORD;
var pLength:PDWORD;
dwMilliseconds:DWORD):DWORD;
stdcall;external 'mpusbapi.dll';
function _MPUSBWrite(handle:THANDLE;pData:PBYTE;
dwLen:DWORD;
var pLength:DWORD;
dwMilliseconds:DWORD):DWORD;
stdcall;external 'mpusbapi.dll';
var
vid_pid:PCHAR8='vid_04d8&pid_0011';
out_pipe:PCHAR8='\MCHP_EP1';
in_pipe:PCHAR8='\MCHP_EP1';
myOutPipe:THANDLE;
myInPipe:THANDLE;
isConnected:boolean;
FrmMain: TFrmMain;
implementation
{$R *.dfm}
procedure CheckInvalidHandle();
begin
if(GetLastError=ERROR_INVALID_HANDLE) then
begin
_MPUSBClose(myOutPipe);
_MPUSBClose(myInPipe);
myInPipe:=INVALID_HANDLE_VALUE;
myOutPipe:=INVALID_HANDLE_VALUE;
end
else
ShowMessage('Error Code :'+inttostr(GetLastError()));
end;
Procedure SendData(Data: PBYTE;Len:Longint);
Var
SentDataLength:DWORD ;
selection:DWORD;
Begin
selection:=0;
myOutPipe:= _MPUSBOpen(selection,vid_pid,out_pipe,MP_WRITE,0);
if myOutPipe <> INVALID_HANDLE_VALUE then
begin
_MPUSBWrite(myOutPipe,Data,Len,SentDataLength,100)
end;
_MPUSBClose(myOutPipe);
myOutPipe:=INVALID_HANDLE_VALUE;
End;
procedure ReceiveData(var ReceiveData:PBYTE;var ReceiveLength:DWORD);
var ExpectedReceiveLength:DWORD;
selection:DWORD;
begin
selection:=0;
ExpectedReceiveLength:=ReceiveLength;
myInPipe:= _MPUSBOpen(selection,vid_pid,out_pipe,MP_READ,0);
if myInPipe <> INVALID_HANDLE_VALUE then
begin
_MPUSBRead(myInPipe,ReceiveData,ExpectedReceiveLength,ReceiveLength,100);
if ExpectedReceiveLength<>ReceiveLength then
begin
Application.MessageBox('D
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -