TYRM3000动态库接口函数说明文档
动态链接库教程
动态链接库教程动态链接库(Dynamic Link Library,简称DLL)是一种可由多个程序共享的库文件,它包含了一组函数和数据,可以在程序运行时加载和调用。
DLL 文件可用于将一些通用的功能封装成函数,供多个程序调用,从而提高代码的复用性和开发效率。
本文将详细介绍动态链接库的概念、使用方法以及制作过程。
一、动态链接库的概念动态链接库是一种包含了函数和数据的库文件,它可以在程序运行时被加载和调用。
与静态链接库相比,动态链接库的优势在于节省内存空间和提高代码的复用性。
当多个程序需要使用同一个功能时,它们可以共享同一个DLL文件,避免了重复编写相同的代码。
二、动态链接库的使用方法在使用动态链接库之前,我们首先需要了解动态链接库的编译、加载和调用过程。
1.编译动态链接库在创建 DLL 文件时,我们需要按照一定的规范编写代码,并将其编译成 DLL 文件。
编译时,需要指定导出函数的修饰符(如 _stdcall、_cdecl等),以及导出函数的声明。
这些步骤可以在开发环境(如Visual Studio)中完成。
2.加载动态链接库在程序运行时,需要加载 DLL 文件。
我们可以通过调用LoadLibrary 函数来加载 DLL,该函数返回一个句柄,表示 DLL 的实例。
加载 DLL 文件后,我们可以通过该句柄获取 DLL 中导出函数的地址。
3.调用动态链接库在获取到DLL中导出函数的地址后,我们可以通过函数指针来调用DLL中的函数。
通过函数指针,程序可以跳转到DLL中执行指定的函数,从而完成相应的功能。
三、制作动态链接库下面以C++语言为例,简单介绍如何制作一个动态链接库。
1.创建DLL工程在 Visual Studio 中创建一个 DLL 项目,选择 DLL(动态链接库)作为项目类型。
在项目中添加需要导出的函数,并在头文件中进行声明。
2.编写导出函数在 DLL 项目中编写需要导出的函数,并在函数前添加修饰符(如_stdcall、_cdecl等)。
动态链接库的使用方法
动态链接库的使用方法动态链接库(Dynamic Link Library,DLL)是Windows系统中一种常见的文件类型,用于存储可被程序在运行时动态加载的函数和数据。
它可以提供代码和资源的共享,使得程序的安装包更小,节省了系统资源。
使用动态链接库有以下几个优点:1.模块化:将程序代码和资源划分为独立的模块,便于开发和维护。
2.共享性:多个程序可以共享同一个动态链接库,减少重复的代码和数据的存储。
3.动态加载:可以在程序运行时动态地加载和卸载动态链接库,提高了程序的灵活性和可扩展性。
1.创建动态链接库:使用C/C++编程语言可以创建动态链接库。
首先,在开发环境中创建新的DLL项目,并选择动态链接库的类型。
在项目中添加需要的代码和资源,并编写相应的函数和数据接口。
将这些接口封装在一个头文件中,并在源文件中实现具体的功能。
最后,编译项目生成动态链接库文件(.dll 文件)。
2.导出函数和数据:在动态链接库中,明确指定哪些函数和数据需要被其他程序调用。
在函数和数据的声明前加上__declspec(dllexport)关键字即可。
例如:```C++__declspec(dllexport) int Add(int a, int b);```3.调用动态链接库:在其他程序中调用动态链接库中的函数和数据,需要先导入相应的函数和数据。
使用C/C++编程语言可以创建一个头文件,其中包含要导入的函数和数据的声明。
例如:```C++__declspec(dllimport) int Add(int a, int b);__declspec(dllimport) extern double PI;```然后,在使用这些函数和数据的源文件中包含这个头文件即可。
4.加载和卸载动态链接库:在程序运行时,需要动态地加载动态链接库,并在使用完之后卸载。
可以使用LoadLibrary函数来加载动态链接库,使用FreeLibrary函数来卸载动态链接库。
动态库函数说明
测试案例运行环境要求操作系统必须是Windows XP, Windows 2003 Server或以上. (不支持Windows 2000及以下系统)系统要求安装.NET Framework1.1环境, 如果没有, 可以从wcomm_sdk\dotNetFramework1.1\dotnetfx.exe进行安装测试案例演示如下功能:读取控制器运行信息(时间, 刷卡记录数, 权限数, 最近一条刷卡记录, 门磁状态, 按钮状态, 故障信息)读取控制器IP, 设置IP(仅用于.NET 控制器)校准控制器时间远程开1号门提取记录删除已提取的记录发送权限操作(1.先清空权限, 2. 再添加权限)发送控制时段实时监控10 Samples程序(wcomm_sdk\V1.0\Samples) (3)10.1 VB6.0 (3)10.1.1 目录: wcomm_sdk\V1.0\Samples\VB6.0\485 Controller-VB6.0 (3)11 刷卡记录描述 (4)12 WComm_Serial控件[WComm_Serial.dll串口通信] (7)12.1 CWComm_Serial类 (7)12.1.1 serial_comm函数 (7)12.1.2 *ErrCode 属性 (7)13 WComm_UDP控件(WComm_UDP.dll) (8)13.1 WComm_Operate类 (8)13.1.1 udp_comm 函数 (8)13.1.2 ErrCode 属性 (8)13.1.3 ErrMessage 属性 (9)13.1.4 CreateBstrCommand 函数 (9)13.1.5 CreateBstrCommandOfAdjustClockByPCTime函数 (9)13.1.6 GetSwipeDateFromRunInfo函数 (9)13.1.7 与日期时间相关指令 (10)13.1.8 MSDateYmdToWCDateYmd 函数 (10)13.1.9 MSDateHmsToWCDateHms 函数 (10)13.1.10 WCDateToMSDate函数 (10)13.1.11 读取运行状态信息的数据帧分析指令 (11)13.1.12 GetSNFromRunInfo函数 (11)13.1.13 GetClockTimeFromRunInfo函数 (11)13.1.14 GetCardRecordCountFromRunInfo函数 (11)13.1.15 GetPrivilegeNumFromRunInfo函数 (12)13.1.16 GetDoorStatusFromRunInfo函数 (12)13.1.17 GetButtonStatusFromRunInfo函数 (12)13.1.18 GetErrorNoFromRunInfo函数 (12)13.1.19 其它 (13)13.1.20 NumToStrHex函数 (13)13.1.21 StrHexToNum函数 (13)13.1.22 CardToStrHex函数 (13)13.1.23 minUDPWaitTimeout属性 (14)10Samples程序(wcomm_sdk\V1.0\Samples)运行环境要求操作系统必须是Windows XP, Windows 2003 Server. (不支持Windows 2000及以下系统)系统要求安装.NET Framework1.1环境, 如果没有, 可以从wcomm_sdk\dotNetFramework1.1\dotnetfx.exe进行安装测试案例演示如下功能:读取控制器运行信息(时间, 刷卡记录数, 权限数, 最近一条刷卡记录, 门磁状态, 按钮状态, 故障信息)读取控制器IP, 设置IP(仅用于.NET 控制器)校准控制器时间远程开1号门提取记录删除已提取的记录发送权限操作(1.先清空权限, 2. 再添加权限)发送控制时段实时监控10.1 VB6.0运行环境要求操作系统必须是Windows XP, Windows 2003 Server. (不支持Windows 2000及以下系统)系统要求安装.NET Framework1.1环境基本步骤.安装V isual Studio 6.0 (开发平台).安装dotnetfx.exe:, 运行wcomm_sdk\dotNetFramework1.1\dotnetfx.exe.注册控件, 运行wcomm_sdk\V1.0\Bin\WComm_REG2003.bat.打开VB6.0, "工程"->"引用..." ,在”可用的引用”中选择2个(在每个项目中都要加入此两引用):WComm_Serial 1.0 Type LibraryWComm_UDP 1.0 Type Library10.1.1目录: wcomm_sdk\V1.0\Samples\VB6.0\485 Controller-VB6.0485控制器操作示例:对控制器S/N 26604, 通信口为COM1, 进行操作.测试用的3个卡: [注意: 卡号按从小到大排列进行赋值]cardno(0) = 342681cardno(1) = 7217564cardno(2) = 25409969可依据实际情况进行修改.11刷卡记录描述(卡号小于100表示特殊操作记录)12WComm_Serial控件[WComm_Serial.dll串口通信]12.1 CWComm_Serial类12.1.1serial_comm函数与485控制器进行串口通信.HRESULT serial_comm (BSTR bstrCommand, BSTR bstrPort, BSTR* pbstrInfo);参数bstrCommand 发送给控制器指令帧bstrPort 通信端口, 分别以COM1, COM2 字符串表示pbstrInfo 控制器返回的数据帧(如果为空, 则查ErrCode找原因)返回值异常/错误见ErrCode说明12.1.2*ErrCode 属性返回出错代码. 只读Public ReadOnly Property ErrCode() As Long13WComm_UDP控件(WComm_UDP.dll)系统要求操作系统必须是Windows XP, Windows 2003 Server. (不支持Windows 2000及以下系统)此控件必须运行在.NET Framework1.1环境下13.1 WComm_Operate类13.1.1udp_comm 函数与.NET控制器进行交互通信.Public Function udp_comm(ByV al commandString As String, ByV al ipAddr As String, ByV al ipPort As Integer) As String参数commandString 发送给控制器指令帧ipAddr 控制器的IP地址, 如果为空, 则采用广播包方式ipPort 控制器的通信端口, 默认是60000返回值控制器返回的数据帧(如果为空, 则表示没有返回数据)异常/错误见ErrCode说明备注PC发出一条指令, 如果指定的.NET控制器接收后, 会返回相应数据.13.1.2ErrCode 属性返回出错代码. 只读Public ReadOnly Property ErrCode() As Long返回值13.1.3ErrMessage 属性返回与错误号为-53相关的出错信息. 只读.Public ReadOnly Property ErrMessage() As String '系统异常时返回的信息返回值ErrCode=-53时出错的参考信息(可能为空)13.1.4CreateBstrCommand 函数生成发送给控制器的指令帧.Function CreateBstrCommand(ByV al controllerSN As Long, ByV al strFuncData As String) As String参数controllerSN 控制器序列号S/N, 也就是控制器上标签号S/N后数字strFuncData 操作功能及参数值[协议文档中的指令帧中序号从3到30的字节, 在此用字符串表示]返回值生成的指令帧(如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.5CreateBstrCommandOfAdjustClockByPCTime函数生成校准控制器时间的指令帧.Function CreateBstrCommandOfAdjustClockByPCTime(ByV al controllerSN As Long) As String参数l controllerSN 控制器序列号S/N, 也就是控制器上标签号S/N后数字strFuncData 操作功能及参数值[协议文档中的指令帧中序号从3到30的字节, 在此用字符串表示]返回值生成的指令帧(以当前计算机时间为准)(如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.6GetSwipeDateFromRunInfo函数从读取运行信息或读取记录的指令中获取—卡号, 状态, 及时间.Function GetSwipeDateFromRunInfo(ByV al strRunInfo As String, ByRef cardId As Long, ByRef status As Long) As String参数strRunInfo (指令1081,108D返回的, 含有刷卡记录的)数据帧cardId 8位的卡号status 刷卡状态返回值刷卡年月日时分秒[yyyy-MM-dd hh:mm:ss](如果为空, 表明没有刷卡记录或查ErrCode是否有异常)异常/错误见ErrCode说明13.1.7与日期时间相关指令13.1.8MSDateYmdT oWCDateYmd 函数将yyyy-MM-dd日期格式转换成控制器使用的两个字节的ymd短日期格式(详见协议) Function MSDateYmdToWCDateYmd(ByV al strMSDateYmd As String) As String参数strMSDateYmd 长日期格式yyyy-MM-dd 年月日返回值短日期格式的YMDL YMDH [年月日的低位, 高位](如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.9MSDateHmsT oWCDateHms 函数将HH:mm:ss 时间格式转换成控制器使用的双字节的hms格式(详见协议)Function MSDateHmsToWCDateHms(ByV al strMSDateHms As String) As String参数strMSDateHms 长时间格式hh:mm:ss 时分秒返回值短时间格式的HMSL HMSH [时分秒的低位, 高位](如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.10WCDateT oMSDate函数将控制器的短时间日期格式转换成微软时间格式(详见协议)Function WCDateToMSDate(ByV al strWCDate As String) As String参数strWCDate YMDL YMDH HMSL HMSH [年月日的低位, 高位; 时分秒的低位, 高位] 返回值输出日期时间(采用格式yyyy-MM-dd HH:mm:ss [年-月-日时:分:秒])(如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.11读取运行状态信息的数据帧分析指令13.1.12GetSNFromRunInfo函数从运行信息中获取--控制器序列号.Function GetSNFromRunInfo(ByV al strRunInfo As String) As Long参数strRunInfo 接收到的数据帧返回值产品序列号异常/错误见ErrCode说明13.1.13GetClockTimeFromRunInfo函数从运行信息中获取--控制器时钟.Function GetClockTimeFromRunInfo(ByV al strRunInfo As String) As String参数strRunInfo 接收到的数据帧返回值输出格式为yyyy-MM-dd HH:mm:ss 的控制器时钟(如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.14GetCardRecordCountFromRunInfo函数从运行信息中获取--刷卡记录数.Function GetCardRecordCountFromRunInfo(ByV al strRunInfo As String) As Long 参数strRunInfo 接收到的数据帧返回值刷卡记录数异常/错误见ErrCode说明13.1.15GetPrivilegeNumFromRunInfo函数从运行信息中获取--权限数.Function GetPrivilegeNumFromRunInfo(ByV al strRunInfo As String) As Long参数strRunInfo 接收到的数据帧返回值权限数异常/错误见ErrCode说明13.1.16GetDoorStatusFromRunInfo函数从运行信息中获取--指定门的门磁状态.Function GetDoorStatusFromRunInfo(ByV al strRunInfo As String, ByV al lngDoorNo As Long) As Long 参数strRunInfo 接收到的数据帧lngDoorNo 指定的门,从1(表示1号门)开始,最大是4返回值指定门的门磁状态[=1表示门开, =0 表示门关]异常/错误见ErrCode说明13.1.17GetButtonStatusFromRunInfo函数从运行信息中获取--指定门的按钮状态.Function GetButtonStatusFromRunInfo(ByV al strRunInfo As String, ByV al lngDoorNo As Long) As Long 参数strRunInfo 接收到的数据帧lngDoorNo 指定的门,从1(表示1号门)开始,最大是4返回值指定门的按钮状态[=1表示按钮松开, =0 表示按钮按下]异常/错误见ErrCode说明13.1.18GetErrorNoFromRunInfo函数从运行信息中获取--故障号.Function GetErrorNoFromRunInfo(ByV al strRunInfo As String) As Long参数strRunInfo 接收到的数据帧返回值故障号(>0表明有故障)[详细见协议]异常/错误见ErrCode说明13.1.19其它13.1.20NumT oStrHex函数将十进制数按十六进制转换成低位在前,高位在后的字符串.Function NumToStrHex(ByV al num As Long, ByV al Len As Long) As String 参数num 要转换的数字Len 要转换的字节长度返回值转换为十六进制后的字符串异常/错误见ErrCode说明13.1.21StrHexT oNum函数将十六进制(低位在前,高位在后)的字符串转换成十进制数.Function StrHexToNum(ByV al strHex As String) As Long参数strHex 十六进制(低位在前,高位在后)的字符串返回值转换后的数字异常/错误见ErrCode说明13.1.22CardT oStrHex函数将8位卡号按十六进制转换成低位在前,高位在后的字符串.Function CardToStrHex(ByV al cardId As Long) As String参数cardId 要转换的卡号返回值转换为十六进制后的字符串(6个字符, 低位字节在前, 高位字节在后) 异常/错误见ErrCode说明13.1.23minUDPWaitTimeout属性与.NET控制器通信时的最小等待时间(单位是ms毫秒). 读/写Public Property minUDPWaitTimeout() As Long备注如果minUDPWaitTimeout值小于1秒, 系统以1秒为最小等待时间. 主要用于网络延时较大环境.正常使用时不用修改.。
如何使用动态链接库中的函数
如何使用动态链接库中的函数动态链接库中的函数导出成功后,其它EXE程序要使用导出函数,就会涉及到如何调用动态链接库。
调用DLL也分为两种方法:隐式调用和显示调用:1、隐式调用隐式链接的特点是由编译器完成对DLL的加载和程序结束时对DLL的卸载工作,如果程序结束时如果还有其他应用程序使用该DLL,那么系统会使DLL的使用计数减1,当DLL的使用计数降为0时,会将DLL从内存中删除。
★优缺点:隐式链接DLL的方法简单实用,但缺少灵活性。
■使用方法:使用隐式链接DLL开发时,首先,需要将DLL的引入库文件(*.lib--编译生成DLL时,会一起生成的)与应用程序进行静态链接,因为引入库文件包含DLL的各种输出资源,如导出函数,导出类等信息,这些信息指向DLL 的函数指针等等,EXE执行时,DLL被“自动”加载,EXE退出时DLL被“自动”卸载。
对上节所讲的Add()函数进行隐式调用:#pragma comment(lib,"D:\\DllTest\\Debug\\DllTest.lib")_declspec(dllimport) int Add(int a,int b);2、显示调用:显示链接方式是完全由编程者用API 加载和卸载DLL,编程者可以决定何时加载DLL,加载哪个DLL,何时卸载DLL,卸载哪个DLL等。
★优缺点:显示链接方式充分体现了DLL的灵活性,是比较常用的调用DLL 方式。
但是与静态链接相比稍微复杂了些。
■使用方法:LoadLibrary(...):该 API 用于加载指定的DLL;GetProcAddress(...):该 API 用于获取DLL中导出函数的指针,即导出函数的入口点;FreeLibrary(...):该 API 用于卸载指定的DLL。
〓注:如果程序中多次调用LoadLibrary(...)加载同一DLL时,在卸载的时候也要调用相应次数的FreeLibrary(...)进行卸载。
水表动态库函数接口说明
-12:表 1 的购买次数小于 0 -13:表 2 的购买次数小于 0 -14:表 3 的购买次数小于 0 -15:表 4 的购买次数小于 0 -16:表 5 的购买次数小于 0
纯净水水表:0.01-655.35
-42:单位号大于 27000 -51:校验码 1 错误
四、清零卡 清次卡 清故障卡 extern "C" _declspec(dllexport) int _stdcall qinglingdata
( unsigned int idwh, unsigned char ixianzhics , unsigned char ics, unsigned char ikbs, unsigned char * ibuffer
( unsigned int idwh , double iyuzhil, unsigned char ileijiayn, unsigned char ixianzhics,unsigned char ics, unsigned char ibx , unsigned char * ibuffer
-1:表 1 的购买量小于 0 -2:表 2 的购买量小于 0 -3:表 3 的购买量小于 0 -4:表 4 的购买量小于 0 -5:表 5 的购买量小于 0
-6:表 1(普通水表)的购买量大于 6553.5 -7:表 2(普通水表)的购买量大于 6553.5 -8:表 3(普通水表)的购买量大于 6553.5 -9:表 3(纯净水水表)的购买量大于 655.35 -10:表 4 购买量大于 6553.5 -11:表 5 购买量大于 6553.5
智能电能表远程功能函数动态库接口说明
目录1.连接设备函数 (1)2. 关闭连接设备函数 (1)3.身份认证函数 (1)4.远程控制加密函数 (2)5.参数信息文件中的一类参数MAC计算函数 (3)6.当前套电价参数MAC计算函数 (3)7.备用套电价参数MAC计算函数 (4)8.二类参数加密函数 (4)9.远程充值函数 (5)10.钱包初始化 (6)11.密钥更新函数 (6)12.电量清零函数 (7)13.事件/需量清零函数 (8)14.红外认证请求函数 (8)15.红外认证函数 (9)16.数据回抄 (10)17.密文+MAC计算函数 (11)18.MAC计算函数 (12)19.软件比对数据加密函数 (12)20.钱包退费加密函数 (14)21.错误代码表 (15)1.连接设备函数功能描述连接设备。
函数Int OpenDevice()参数说明无。
函数返回:0 成功其他失败,见错误代码表2.关闭连接设备函数功能描述关闭设备。
函数Int CloseDevice()参数说明无。
函数返回:0 成功其他失败,见错误代码表3.身份认证函数功能描述:获取随机数以及密文,用于远程身份认证。
函数:int IdentityAuthentication(int Flag,char *PutDiv,char *OutRand,char*OutEndata)参数说明:Flag 整型,表示密钥状态,0: 公钥密钥状态;1: 正式密钥状态;PutDiv 表示输入的分散因子,字符型,长度8字节,“0000”+表号;OutRand 输出的随机数,字符型,长度8字节;OutEndata 输出的密文,字符型,长度8字节。
函数返回:0 成功其他失败,见错误代码表4.远程控制加密函数功能描述:远程拉闸、合闸、报警等控制数据加密。
函数:int UserControl(int Flag,char *PutRand,char *PutDiv,char *PutEsamNo,char *PutData, char *OutEndata)参数说明:Flag 整型,表示密钥状态,0: 测试密钥状态;1: 正式密钥状态;PutRand 表示输入的随机数,字符型,长度4字节,电表身份认证成功后返回;PutDiv 表示输入的分散因子,字符型,长度8字节,“0000”+表号;PutEsamNo 表示输入的ESAM序列号,复位信息的后8字节,字符型;PutData 表示跳闸、合闸、报警等控制命令明文,字符型;OutEndata 输出的密文,字符型。
使用动态链接库和API(分析“函数”文档)共8张PPT
20.4 在应用程序中使用API函数
• 前面,介绍了API的一些基础知识。下面将用几个 实例说明,在Visual Basic中使用API函数的具体 方法。
20.4.1 判断窗体是否已经显示
• (具体内容请参照本书)
20.4.2 获取鼠标在屏幕上的位置
• (具体内容请参照本书)
可通过OLE技术调用另一个应用程序。 可以调用Windows操作系统内置的Windows API函数。 为了在用户应用程序中使用DLL,应在代码中调用相应函数之前加以声明。 1 判断窗体是否已经显示 Windows API是功能强大且实用的函数集合,但它也非常脆弱。 利用其他程序设计语言(例如C++语言)编写代码,再从 Visual Basic中调用此类程序。 传递参数的类型错误便可能引起程序阻塞、停止,甚至使整个系统崩溃,这常常造成很大危害,特别是没有存盘的时候。 完成上述步骤后,用户程序便可实际的调用函数。 2 获取鼠标在屏幕上的位置 2 获取鼠标在屏幕上的位置 4 在应用程序中使用API函数 使用Visual Basic编写应用程序时,偶尔会遇到仅使用Visual Basic的控件没办法解决,或者解决起来很费劲的问题。 下面将用几个实例说明,在Visual Basic中使用API函数的具体方法。 传递参数的类型错误便可能引起程序阻塞、停止,甚至使整个系统崩溃,这常常造成很大危害,特别是没有存盘的时候。 在用Visual Basic进行应用程序的编制时,虽然Visual Basic能够完成几乎所有的Windows应用程序,不管是图形处理,多媒体应用还是 网络编程都可以胜任,而且开发起来非常的快捷方便。 (具体内容请参照本书)
下面将用几个实例说明,在Visual Basic中使用API函数的具体方法。 为了在用户应用程序中使用DLL,应在代码中调用相应函数之前加以声明。 前面,介绍了API的一些基础知识。 此时,解决问题最好的方法就是使用Windows操作系统自带的 Windows API函数。 在用Visual Basic进行应用程序的编制时,虽然Visual Basic能够完成几乎所有的Windows应用程序,不管是图形处理,多媒体应用还是 网络编程都可以胜任,而且开发起来非常的快捷方便。 程序需要告诉Visual Basic如何调用DLL,即需要声明过程及其定义的参数。 在了解了关于DLL的声明基础后,现在再介绍一个快捷方法。 在了解了关于DLL的声明基础后,现在再介绍一个快捷方法。 可通过OLE技术调用另一个应用程序。 完成上述步骤后,用户程序便可实际的调用函数。 可通过OLE技术调用另一个应用程序。
浙江海盐涵普控源动态库接口说明文档
浙江海盐涵普控源动态库接口说明文档海盐涵普控源动态库接口说明文档由于动态库是由Delphi编写的,因此它提供了Delphi函数的接口。
该函数使用的参数类型为整数和单精度类型。
与其他编程语言的兼容性应该没有问题。
因此,动态库接口的每个功能的以下描述由Delphi定义。
1、信号源升源函数1)三相升源功能、早期C型和D型平台升源功能:outputdata_gsub(plngajust:longint;plngsourcetype:longint;平纹:长;品脱时间:长;长波;波:长;varpdelay_u时间:delaytime):longint;stdcall;出口函数相应参数说明:Plngajust-----是否自动调整输出,1-调整,0-不调整。
Plngsourcetype-----信号源类型1、2为c形输出的信号源,?3为d输出的信号源,?4为dsp信号源(此处无效)参数说明:由于C型在2000年以前是一个老平台,现在很少,所以现在此函数主要用来控制d型台体,而dsp型则用函数dspoutput函数来实现(下文会有详细说明)。
Pintphase------相线1表示3p3w(三相三线有功)2表示3p3w(60var)(三相三线制60度无功功率)?3表示3p3w(90var)(三相三线制90度无功功率)?4表示3p3w(正弦无功功率)(三相三线正弦无功功率)?5表示3P4W(三相四线有源)6表示3p4w(90var)(三相四线90度无功)?7表示3p4w(正弦var)(三相四线正弦无功)Pintstatus------测试状态0---正向有功?1---反向有功?2---正向无功?3---反向无功Pintsequence-----相序1---正相序?2---逆相序PSNG电压、PSNG电流和PSNG频率指的是电压、电流和频率。
传输格式为单精度单类型其输入的数值为电表的额定电压、电流即频率数值。
pintiabc------电流相别0---表示ABC相三相电流输出?1---表示A相电流分相输出?2---表示B相电流分相输出?3---表示C相电流的分相输出pintib------电流负载该功能的输出格式为额定电流的百分比。
动态库串口函数说明(精简)
主题:通讯接口函数说明内容摘要:精简函数版本:2007-08-08 18:33日期:2008.01.25动态库名:DASCOMM.DLL通用命令(适用于消费系统和考勤门禁系统):1:HANDLE OpenComm(int CommPort)功能:打开串口参数:int CommPort:串口标志取值如下:0 —Com1, 1 —C om2 …返回:大于0为串口设备号,小于0 表示打开串口错误。
2:int CloseComm(HANDLE icdev)功能:关闭串口参数:HANDLE icdev:OpenComm() 返回的设备号返回:成功则返回0,小于0见错误代码3:int Hand_Shake(HANDLE icdev,int Node_Addr,LPCSTR Password)功能:握手参数:HANDLE icdev:OpenComm() 返回的设备号int Node_Addr:为节点号LPCSTR Password:握手密码,此密码由初始化系统卡时返回。
返回:成功则返回0,小于0见错误代码表备注:此函数常用于消费系统。
4:int Hand_Shake_N(HANDLE icdev,int Node_Addr)功能:握手参数:HANDLE icdev:OpenComm() 返回的设备号int Node_Addr:为节点号返回:成功则返回0,小于0见错误代码表备注:此函数常用于考勤系统、门禁系统。
5:int Set_NodeTime(HANDLE icdev,LPSTR DateTimes)功能:设置时间参数:HANDLE icdev:OpenComm() 返回的设备号LPSTR DateTimes:日期时间,格式为“YYYYMMDDHHMNSS”,如:1999年1月28日10点30分50秒为“19990128103050”返回:成功则返回0,小于0见错误代码表6:int Get_NodeTime(HANDLE icdev,LPSTR DateTime)功能:取时间参数:HANDLE icdev:OpenComm() 返回的设备号LPSTR DateTime:返回节点日期时间(时间格式同设置时间函数)返回:成功则返回0考勤系统使用的命令:1:int Get_Curr_Record(HANDLE icdev,LPINT Node_Addr,LPSTR Record_Data) 功能:读取节点当前记录,节点记录指针不变。
动态库的使用方法
动态库的使用方法
动态库(Dynamic Link Library,DLL)是一种包含可在多个程序中共享的代码和数据的文件格式。
动态库的使用方法如下:
1. 链接库文件:将动态库文件与源代码进行链接,以便使用其中的函数和数据。
在编译时,可以将库文件的路径添加到链接器的搜索路径中,并将库文件的名称添加到链接器的命令行参数中。
2. 导入函数:在程序中声明需要使用的库函数。
可以通过包含相应的头文件来获取函数的声明。
在编译时,链接器将使用库文件中的函数实现替换这些声明,以便在程序中调用它们。
3. 运行时加载库:在程序运行时,通过调用操作系统提供的加载库函数来加载动态库。
可以使用操作系统提供的加载函数,如LoadLibrary(Windows)或dlopen(Linux)。
加载库时,可以指定库文件的路径,并获取一个句柄或指针,以便后续使用。
4. 使用库函数:一旦库文件加载完成,在程序中就可以使用库函数了。
可以通过句柄或指针来调用库函数,并传递所需的参数。
库函数的执行结果将返回给程序进行处理。
5. 卸载库:在程序不再需要使用动态库时,可以调用操作系统提供的卸载库函数,如FreeLibrary(Windows)或dlclose (Linux),以释放库文件所占用的资源。
需要注意的是,动态库的使用方法可能会因操作系统和开发环境的不同而有所差异。
因此,在使用动态库时,最好根据具体的环境和要求进行相应的调整和配置。
C动态链接库的函数和使用方法
C动态链接库的函数和使用方法动态链接库(Dynamic Link Library,简称DLL)是Windows操作系统中一种常用的库文件格式,它包含了一系列的函数和数据,可以供其他程序调用。
相对于静态链接库(静态库),动态链接库具有一些独特的特点和优势。
一、函数和使用方法:1.创建动态链接库:在Windows操作系统上,可以使用多种开发工具来创建动态链接库,最常用的是使用C/C++语言结合相应的集成开发环境(IDE)来进行创建。
下面以Visual Studio为例,介绍创建动态链接库的方法。
a) 打开Visual Studio,选择“新项目” -> “Win32控制台应用程序”。
b)在向导中选择“下一步”,然后选择“DLL”,并输入项目名称。
c)设定项目的相关属性,如生成目标、包含的文件等。
d)完成创建,并在项目中编写所需的函数和代码。
2.导出函数:在创建动态链接库的过程中,需要显式地将要调用的函数导出。
导出函数的方法有多种,其中最常用的是使用extern关键字和declspec属性。
a) 使用extern关键字:```extern "C" _declspec(dllexport) int myFunction(int param);```这样可以将myFunction函数导出,使其可以供其他程序调用。
b) 使用declspec属性:```#ifdef MYDLL_EXPORTS#define MYDLL_API _declspec(dllexport)#else#define MYDLL_API _declspec(dllimport)#endifMYDLL_API int myFunction(int param);```这样可以根据是否定义了MYDLL_EXPORTS宏来自动切换函数的导入导出。
3.调用动态链接库中的函数:在其他程序中使用动态链接库的函数需要进行动态链接,将DLL加载到内存中,并获取相应的函数指针进行调用。
M3000 Series 产品说明书
23 下载链接 2. 启动 SmartBlue。 3. 在显示列表中选择设备。 4. 输入登陆信息:
用户名:admin 密码:设备的序列号
30
A0039186
Endress+Hauser
Micropilot FMR20 HART
5. 点击图标查询详细信息。 首次成功登录后,请修改密码!
9.1.4 SmartBlue 中的包络线显示 可以在 SmartBlue 中显示和记录包络线。 除了包络线外,还可以显示下列参数值: • D:距离 • L:液位 • A:幅值 • 截图保存显示包络线(支持缩放功能) • 视频记录完整包络线(未进行缩放)
传感器温 度过高
如果环境温度导致传感器温度上升并超过 60 °C (140 °F),可能无法继续正 常进行蓝牙通信。 采取设备隔热措施;如需要,进行隔离冷却。
SmartBlue 和 HART 的位 与系统相
号显示不一致
关
通过 Bluetooth®蓝牙连接将设备 ID(位号)传输至当前列表中,便于识别 设备。由于 HART 位号支持不超过 32 位设备名称显示,而 Bluetooth®蓝牙 只支持 29 位字符显示,中间字符将被省略。 例如:HART 位号“FMR20N12345678901234567890123456”被缩略显示 为“FMR20N12345678~567890123456”
显示液位测量值 L 10. 菜单路径:设置 → 信号强度
显示分析回波的信号强度
Micropilot FMR20 HART
10 诊断和故障排除
10.1 常见故障
错误 设备无响应
无法进行 HART 通信
可能的原因 供电电压与铭牌参数不一致 电源极性连接错误 电缆与接线端子接触不良 未连接通信电阻或安装错误 Commubox 连接错误 Commubox 的通信电阻打开或关闭
发卡机(读写器)接口函数
发卡机(读写器)接口函数版本:V4.0日期:2003.5.31说明: windows 32位动态库目录:一.系统用函数1. HANDLE OpenComm( )2. int CloseComm( )3. int Check_Reader( )4. int Init_SysCard( )5. int Init_SysCard_N( )6. int Load_Author( )二.消费卡用函数1. int Init_Pos_UserCard( )2. int Init_Pos_UserCard_N( )3. int Init_Pos_OPTCard( )4. int WRT_Pos_UserCard( )5. int WRT_Pos_UserCard_AddCount6. int Query_Pos_Card( )7. int Query_Pos_UserCard( )8. int RST_Pos_UserCard( )9. int RST_Pos_OPTCard( )10. int Change_Pos_Usertype( )三.门禁考勤卡用函数1. int Init_Access_UserCard( )2. int Init_Access_UserCard_UsePassword( )3. int RST_Access_UserCard( )4. int Query_Access_Card( )四.发卡器(读写器)操作函数1. int Get_Version( )2. int rf_beep( )3. int rf_disp( )4. int get_time( )5. int set_time( )6. int disp_mode( )7. int contr_mode( )8. int set_bright( )9. int write_eeprom( )10. int read_eeprom( )五.射频卡读写函数1. int rf_request( )2. int rf_anticoll( )3. int rf_select( )4. int rf_authentication( )5. int rf_halt( )6. int rf_read( )7. int rf_read_hex( )8. int rf_write( )9. int rf_write_hex( )10. int rf_load_key( )11. int rf_card( )12. int rf_card_2( )六.错误代码七.发卡流程一、系统用函数1:HANDLE OpenComm(int CommPort)功能:打开串口参数:int CommPort:串口标志取值如下:0 —Com1, 1 —C om2 …返回:大于0为串口设备号,小于0 表示打开串口错误。
动态库说明书样本
凯普电子通讯dll函数使用说明1、安装说明把kpdev.dll放在你的程序目录下(也可拷贝至system32目录下)2、函数调用目录1.Adjust_UI2 : 负载点调整(三相电压电流可分别设置) ……………函数名12.Set_WaveParameter: 发送输出谐波参数……………………………函数名 23.Set_WaveType: 发送输出波形类型…………………………………函数名 34.StdMeter_WaveRead1:读取标准表波形实测幅值……………………函数名 45.Power_Off: 降电压电流………………………………………………函数名 56.Power_Pause: 降电流,电压保持…………………………………….函数名 67.StdMeter_Read : 指示仪表读取…………………………………函数名78.Set_485_Channel: 485通道切换(只单个通道吸合)………………函数名89.Set_485_ChannelS : 485通道切换(可多个通道吸合)……………函数名910.Set_Pulse_Channel: 脉冲采样通道切换…………………………函数名1011.Error_Start: 开始测试误差…………………………………………函数名1112.Error_Read: 误差读取………………………………………………函数名1213.Dll_Port_Close: 关闭与装置通讯的串口…………………………函数名1314.Search_mark:开始寻标………………………………………………函数名1415.Search_mark_Result: 读取寻标脉冲……………………………函数名1516.CRPSTA_start: 开始潜动或起动……………………………………函数名1617.CRPSTA_Result: 潜动或起动脉冲读取……………………………函数名1718.CRPSTA_clear: 潜动或起动状复位…………………………………函数名1819.Error_Clear: 误差仪总清……………………………………………函数名1920.Open485CommPort:打开485通讯口…………………………………函数名2021.Set485CommPort :更改485口波特率………………………………函数名2122.Close485CommPort:关闭485通讯口………………………………函数名2223.Send485Data :发送485数据(16进制)…………………………函数名2324.Recv485Data :接收485数据(16进制) ………………………函数名2425.SelectCircuit 选择电流回路………………………………………函数名2526.SetRefClock : 接通日计时时钟仪…………………………………函数名2627.Clock_Error_Start : 开始测试日计时……………………………函数名2728.Clock_Error_Read : 读取日计时误差……………………………函数名2829.StdFreq_Read :读标准表频率………………………………………函数名2930.StdPulse_Read:读取当前标为标准表脉冲数………………………函数 3031.Set_Pulse_Error:切换误差仪脉冲线路……………………………函数31 3、函数详细说明(文件名: kpdev.dll)-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------。
python动态库生成和调用方法
python动态库生成和调用方法Python动态库生成和调用方法Python动态库是一种可以被其他程序调用的Python模块,它可以通过C/C++等编程语言进行调用。
本文将介绍如何使用Python语言生成动态库,并在其他编程语言中调用。
1. 生成动态库(1)创建一个Python文件,例如test.py,编写需要被调用的函数。
例如:def add(a, b):return a + b(2)使用命令行工具进入该文件所在目录,并执行以下命令:$ python -c "from distutils.core import setup, Extension;setup(name='test', version='1.0', ext_modules=[Extension('test', ['test.py'])])" build_ext --inplace其中,name参数表示模块名称,version参数表示版本号,ext_modules参数表示要生成的扩展模块列表。
执行完上述命令后,在当前目录下会生成一个名为test.so或者test.dll的动态库文件。
2. 调用动态库(1)C/C++语言中调用在C/C++程序中调用Python动态库需要使用Python.h头文件,并且需要将Python.h头文件所在路径加入到编译器的搜索路径中。
例如,在Linux系统下可以使用以下命令进行编译:$ gcc test.c -o test -I/usr/include/python2.7/ -lpython2.7 -L.其中,-I参数指定了Python.h头文件所在路径,-l参数指定了链接的Python库名称,-L参数指定了动态库所在路径。
以下是一个简单的C程序调用Python动态库的示例:#include <Python.h>int main(int argc, char *argv[]){Py_Initialize();PyRun_SimpleString("import sys\nsys.path.append('.')\n"); PyObject* module = PyImport_ImportModule("test");PyObject* func = PyObject_GetAttrString(module, "add"); PyObject* args = PyTuple_New(2);PyTuple_SetItem(args, 0, PyLong_FromLong(1));PyTuple_SetItem(args, 1, PyLong_FromLong(2));PyObject* result = PyObject_CallObject(func, args);long res = PyLong_AsLong(result);printf("%ld\n", res);Py_Finalize();}(2)其他编程语言中调用除了C/C++语言之外,其他编程语言也可以通过对应的接口调用Python动态库。
2.接口函数库(二次开发库)使用说明书
动态库函数使用说明
动态库函数使用说明动态库函数使用说明一、动态库说明(1)该动态库接口所适用的卡类型:MF1S50卡。
(2)“btlock73L.dll”这个文件是调用读写卡函数的动态库。
(3)“zymsr232.dll”这个文件是调用RW-21读卡器的驱动,“zymurusb.dll、EasyD12_500.dll”这两个文件是调用RW-33读卡器的驱动,“btmf1232.dll”这个文件是调用RW-26D读卡器的驱动,“acr120u.dll、AcsReader.dll”这两个文件是调用RW-41读卡器的驱动。
(4)酒店密码(HotelPwd)由酒店提供。
(5)房间号(DoorID)由酒店提供, 门锁软件有房间号与房间名称的对应表。
(6)宾客流水号(1---4294967296)可按时间生成或者按累加1算法生成,具有顶替功能,即宾客流水卡号大的宾客卡顶替宾客流水号小的宾客卡。
(7)宾客序号(1-255),即表示同住宾客卡时同住宾客的流水号相同,序号不同。
(8)更改酒店密码时,密码一定要6位字符串。
(9)有效时间的值一定要10位,年、月、日、时、分。
(10)MF1S50卡扇区默认值为0,当酒店所使用的扇区己作更改时,请填写相应的扇区号。
(11)每一个使用接口发卡点都必须配合一个“硬件狗”才可以运行,即是有多少个发卡点就需要多少个“硬件狗”。
二、“btlock73L.dll”库函数说明(语言:DelPhi7)(1)function Write_Guest_Card(Port, ReaderType, SectorNo: Byte; HotelPwd:PChar; ClientID: Longword; CardNo, GuestSN, GuestIdx: Integer; DoorID, SuitDoor, PubDoor, Begi nTime, EndTime: PChar):Integer;说明:写宾客卡函数。
动态库使用方法
动态库使用方法一、WINDOWS动态库文件我公司提供WINDOWS平台下的WINDOWS 32动态库,文件名称如下:M100_DLL.H 32位动态库的头文件M100_DLL.LIB 32位动态库的输入库M100_DLL.DLL WINDOWS 32位动态库二、调用WINDOWS动态库的方法1.通常我们在调用DLL时所需的DLL文件必须位于以下三个目录之一:(1)Windows的系统目录:\windows\system; 或\windows\system32;(2)DOS中path所指出的任何目录;(3)程序所在的目录;同时应注意管理好你的.lib文件和.h和文件2.基于WINDOWS平台的各种开发工具调用动态库的方法各不相同,介绍如下:[1]Delphi调用16位或32位动态库的方法16位与32位动态库调用方法相同。
语法:[Public Private | protected] Function FunctionName([Var] [Arg1:DataType1;] [Arg2:DataType2;...]) [:ReturnDataType]; far;stdcall;external ‘l ibname’[Name AliasName];调用语句的语法包含下面部分:关键字Public(可选),表示函数可以被程序代码中的任意部分访问。
关键字Private(可选),表示函数在声明类的单元(源代码)外不能访问。
关键字Protected(可选),表示保护函数,保护元素只能被当前类和它的子类访问。
关键字Function(必选),表示调用函数,函数有返回值。
FunctionName(必选),调用外部函数的名称,区分大小写。
过引用传递。
通过引用传递参数,它的值没被复制到存放函数例程参数的堆栈中,程序执行速度快。
通过引用传值,将允许过程和函数改变参数的值。
ArgN:DataTypeN(可选),参数名以及参数类型,传递的参数类型可以是:Shorint,Smallint,Longint,Integer(16/32),Single,Double,Extended,Currency,Date,Pchar,Object,Variant等。
c调用 resource动态链接库函数
c调用 resource动态链接库函数C调用resource动态链接库函数的步骤如下:1. 引入头文件:首先需要在C程序中引入resource库的头文件。
头文件通常具有".h"扩展名,包含了库中函数的声明和定义。
```c#include <resource.h>```2. 加载动态链接库:使用`LoadLibrary`函数加载resource动态链接库。
该函数返回一个句柄,用于后续操作。
```cHMODULE hModule = LoadLibrary("resource.dll");```3. 获取函数地址:使用`GetProcAddress`函数获取resource 动态链接库中需要调用的函数的地址。
该函数需要传入动态链接库句柄和函数名。
```cFARPROC functionAddress = GetProcAddress(hModule, "functionName");```4. 定义函数指针:定义一个函数指针,用于指向resource动态链接库中的函数。
```ctypedef void (*FunctionType)(int, char*);FunctionType functionPtr;```5. 将函数地址赋值给函数指针:将获取到的函数地址赋值给函数指针。
```cfunctionPtr = (FunctionType)functionAddress;```6. 调用函数:通过函数指针调用resource动态链接库中的函数。
```cfunctionPtr(arg1, arg2);```7. 释放资源:在程序结束之前,需要释放动态链接库的句柄。
```cFreeLibrary(hModule);```以上是C调用resource动态链接库函数的基本步骤。
具体的函数名、参数和返回值类型需要根据resource库的文档进行调整。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TYRM3000动态库接口函数说明文档1.主要接口函数
PortOpen (PBYTE pszPort, PBYTE pszBuildCommDCB);
PortClose(void);
SendData (char ch1,char ch2, PBYTE pszReadData, int nReadLen);
CPUPowerOnOrDown (char ch1,char ch2, char mid ,PBYTE pszReadData, int nReadLen);
CPUSendAPDU (char ch1,char ch2, char mid, PBYTE pszSendData ,int nSendLen ,PBYTE pszReadData, int nReadLen);
2.函数说明
2.1 PortOpen(PBYTE pszPort, PBYTE
pszBuildCommDCB)
类型: bool;
返回值:
True--成功,
False--失败;
函数描述:根据参数打开指定串口;
参数定义:
pszPort –串口号,如”COM1”;
pszBuildCommDCB –串口设置参数, 如”COM1:9600,n,8,1”;
2.2 P ortClose(void)
类型: bool,
返回值:
True--成功,
False--失败;
函数描述:关闭串口,必须在调用函数PortOpen之后才能调用;
参数定义:无;
2.3 S endData (char ch1,char ch2, PBYTE
pszReadData, int nReadLen)
类型: int;
返回值:
1--收发正确
2--发送错误
3--接收错误
4--接收数据错误;
函数描述:发送功能指令;
参数定义:
ch1 -- 命令标识1,如41(参照附指令代码)
ch2 -- 命令标识2, 如52(参照附指令代码)
注:如下发查询指令,功能码为”c””A”,则ch1=99(“c”的ASCII码)
Ch2=65(“A”的ASCII码)
pszReadData --接收数据缓冲区
nReadLen -- 接收数据缓冲区大小.
2.4 DLL_EXP int PASCAL CPUPowerOnOrDown (char ch1,char ch2, char mid ,PBYTE pszReadData, int nReadLen);
类型: int;
返回值:
1--收发正确
2--发送错误
3--接收错误
4--接收数据错误;
函数描述:CPU卡上电和下电发送指令;
参数定义:
ch1 -- 命令标识1,如41(参照附指令代码)
ch2 -- 命令标识2, 如52(参照附指令代码)
注:如下发查询指令,功能码为”c””A”,则ch1=99(“c”的ASCII码)
Ch2=65(“A”的ASCII码)
mid --卡机编号,一般默认为0,即mid='0'
pszReadData --接收数据缓冲区
nReadLen -- 接收数据缓冲区大小
示例了:
根据TYRM-3000协议说明书中可知,CPU卡上电指令为"hB",卡机编号为0,则上电指令下:
缓冲区pszReadData[1024]
接收返回数据nReadLen=300
CPUPowerOnOrDown ('h','B', '0' ,pszReadData[0], 300);
2.5 DLL_EXP int PASCAL CPUSendAPDU (char ch1,char ch2, char mid, PBYTE pszSendData ,int nSendLen ,PBYTE pszReadData, int nReadLen);
类型: int;
返回值:
1--收发正确
2--发送错误
3--接收错误
4--接收数据错误;
函数描述:发送APDU指令函数;
参数定义:
ch1 -- 命令标识1,如41(参照附指令代码)
ch2 -- 命令标识2, 如52(参照附指令代码)
注:如下发查询指令,功能码为”c””A”,则ch1=99(“c”的ASCII码)
Ch2=65(“A”的ASCII码)
mid --卡机编号,一般默认为0,即mid='0'
pszSendData --发送的APDU指令缓冲区
nSendLen --发送缓冲区中数据长度
pszReadData --接收数据缓冲区
nReadLen -- 接收数据缓冲区大小
示例:
根据TYRM-3000协议说明书中可知,CPU卡发送APDU指令为"hC",卡机编号为0, pszSendData={A0 A4 00 00 02 2F E2}
没发送长度nSendLen=7
缓冲区pszReadData[1024]
接收返回数据nReadLen=300
CPUSendAPDU ('h','C', '0' ,pszSendData[0],7,pszReadData[0], 300); 附指令代码:。