⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 说明.txt

📁 写卡器的串口测试程序, 有delphi的,vb的... 涉用到好几有语言, 还包括说明
💻 TXT
字号:
===================================================================
==		VC中调用dll的说明
===================================================================
1.确认ghc715.dll在当前目录,与exe在同一目录或者在系统目录c:\windows\system
 (对于win2k则在system32目录下)。
2.调用LoadLibrary加载dll:
	gLibMyDLL = LoadLibrary("ghc715.DLL");
	用完后在退出时应该释放:FreeLibrary(gLibMyDll);
3.调用win api的GetProcAddress函数得到dll中函数的指针:
	readcard = (MYBEEP)GetProcAddress(gLibMyDLL,"readcard");		
	writecard = (MYDELAY)GetProcAddress(gLibMyDLL,"writecard");
4.调用例子:
	int code=readcard(1,m_nTrack,data1,data2,2);
	int code=writecard(1,m_nTrack,m_sData1.GetBuffer(150),
		m_sData2.GetBuffer(150),2);
===================================================================
==		Vfp中调用dll的说明
===================================================================
1.确认ghc715.dll在当前目录,与exe在同一目录或者在系统目录c:\windows\system
 (对于win2k则在system32目录下)。
2.声明函数:
   DECLARE long readcard in ghc715.dll;
   	INTEGER port,;
   	INTEGER track,;
   	STRING  @s1,;
   	STRING  @s2,;
   	INTEGER model
   DECLARE long writecard in ghc715.dll;
   	INTEGER port,;
   	INTEGER track,;
   	STRING  @s1,;
   	STRING  @s2,;
   	INTEGER model
3.调用例子:
	local n
	local s1
	local s2
	local err
	
	str1=SPACE(200)  
	str2=SPACE(200)   

	err=readcard(1,n,@str1,@str2,2)
	err=writecard(1,n,@s1,@s2,2)

===================================================================
=	VB中调用的例子
===================================================================
1.在Module中声明函数原型

Declare Function readcard Lib "ghc715.dll" (ByVal nPort As Long, ByVal nTrack As Long, ByVal sData1 As String, ByVal sData2 As String, ByVal nModel As Long) As Long
Declare Function writecard Lib "ghc715.dll" (ByVal nPort As Long, ByVal nTrack As Long, ByVal sData1 As String, ByVal sData2 As String, ByVal nModel As Long) As Long

2.调用示例:
    Dim s1 As String
    Dim s2 As String
    Dim n   As Long
    Dim err As Long
    
    s2 = Trim(sOneThree.Text) + Chr(0)
    err = writecard(1, n, s1, s2, 2)

    s1 = String(255, Chr(0))
    s2 = String(255, Chr(0))
    err = readcard(1, n, s1, s2, 2)
=================================================================== 
=	Delphi中调用示例
=================================================================== 
1.定义函数原型:
  Treadcard=function(n1:integer;n2:integer;s1:Pchar;s2:Pchar;n3:integer):integer;stdcall;
  Twritecard=function(n1:integer;n2:integer;s1:Pchar;s2:Pchar;n3:integer):integer;stdcall;
  THandle = Integer;
2.定义函数:
  Form1: TForm1;
  readcard: Treadcard;
  writecard:Twritecard;
3.加载动态连接库:
	Handle :=LoadLibrary('ghc715.DLL');
        @readcard := GetProcAddress(Handle, 'readcard');
        @writecard:= GetProcAddress(Handle, 'writecard');
4.调用:
	
	code:=readcard(1,n,p1,p2,2);
	code:=writecard(1,n,p1,p2,2);
有关的参数参见示例源程序。
=================================================================== 
=	Power Builder调用示例
=================================================================== 
1.声明:
	Function Int  readcard(Int port,Int track,ref string data1,ref string data2,Int model) Library "ghc715.dll"
	Function Int writecard(Int port,Int track,ref string data1,ref string data2,Int model) Library "ghc715.dll"
2.调用:
	boolean bRead=true
	int	  nTrack
	int	  err 
	string	s1,s2

	s1=space(200)
	s2=space(200)

	nTrack=integer(sle_track.text)

	err=readcard(1,nTrack,s1,s2,2)
	err=writecard(1,nTrack,s1,s2,2)
=================================================================== 

附:
1.动态连接库的函数声明作了如下改动:
添加了条件编译指令:
#ifdef __cplusplus
extern "C"
{
#endif

声明函数的类型为__stdcall,并添加__declspec(dllexport)修饰符,主要是便于其他的如Delphi,VB等调用:

int __declspec (dllexport) __stdcall   readcard(int comport,int track,char *data1,char *data2,int model);
int __declspec (dllexport) __stdcall   writecard(int comport,int track,char *data1,char *data2,int model);
int __declspec (dllexport) __stdcall   sendchar(HANDLE hCom,char ch);

最后添加的是:
#ifdef __cplusplus
}
#endif

调用时,声明函数:

HINSTANCE gLibMyDLL = NULL;
// declar
//定义指向DLL库中readcard指针
typedef int (__stdcall *MYBEEP)(int comport,int track,char data1[37],char data2[104],int model);
MYBEEP readcard;
//declare
//定义指向DLL库中writecard指针
typedef int  (__stdcall *MYDELAY)(int comport,int track,char data1[37],char data2[104],int model);
MYDELAY writecard;



2.动态库中函数返回码含义如下:

  readchar的返回码:
    0:	正常返回
   -1:	创建串口句柄错误:CreateFile Failed!
   -2:	建立串口句柄通信错误:SetupComm Failed!
   -3:	获取串口状态错误:GetCommState Failed!
   -4:	参数错误:model不等于1和2!
   -5:	设置串口参数错误:SetCommState Failed!
   -6:	model=2,发送命令码,但接受到的并非合法的数据序列:First character is not ESC!
   -7:	model=2,发现异常退出字符:Get 0x7F !
   -8:	model=1,发送错误:WriteFile Failed!
   -9:  model=1,接收错误:ReadFile Failed!
   -10:	model=1,发送错误:WriteFile Failed!
   -11:	model=1,发送错误:WriteFile Failed!
   -12: model=1,数据缓冲区中接受到*字符!
  
  writechar 的返回码:   
    0:	正常返回
   -1:	创建串口句柄错误:CreateFile Failed!
   -2:	建立串口句柄通信错误:SetupComm Failed!
   -3:	获取串口状态错误:GetCommState Failed!
   -4:	参数错误:model不等于1和2!
   -5:	设置串口参数错误:SetCommState Failed!
   -6:	model=2,写卡错误!
   -7:	model=1,发送错误:WriteFile Failed!
   -8:  model=1,接收错误:ReadFile Failed!
   -9:	model=1,发送错误:WriteFile Failed!
   -10:	model=1,接收错误:ReadFile Failed!
   -11: model=1,数据缓冲区中接受到*字符!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -