解决方案:【doc】VC++中DLL的实现及其在数据采集控制中的应用

优采云 发布时间: 2022-12-05 21:46

  解决方案:【doc】VC++中DLL的实现及其在数据采集控制中的应用

  DLL在VC++中的实现及其在数据采集控件中的应用第28期信息技术DRMAT0NTECHNOLOGYVOL。28号 7月1日。2004 DIJ在VC++中的实现及其在数据采集控制中的应用(黑龙江信息职业技术学院,哈尔滨150086) 摘要:介绍了VC++中DLL编程的基本方法和三种实现的基本形式,并分析了各自的优势DLL技术的缺点。以一个实际的数据采集和控制程序为例,编译出相应的数据采集程序,并对VC++中的DLL进行说明。DLL编程的基本流程和技术。关键词:VC++;DLL;Data采集CLC 编号:TP314 文件识别码:B文章编号:1009—2552[2004)07—0092—03DLL驱动程序VC++的实现及其在数据采集中的应用C}菜修方(黑龙江信息技术职业学院.哈尔滨150086-中国) 摘要:一个基于数据采集的实用程序。介绍了用VC++实现动态链接库(DLL)驱动程序的三种基本形式,并说明了其中的技术和基本的泛洪软件,不适合实践的方法,获得了优异的Hent性能。

  关键字:VC++;DLL;dataeoUeetion1VC++6. O中DIJL编程的实现方法 1.1 DLL的开发与应用 DLL工程中主要文件介绍 由于DLL不能独立运行,只能被其他应用程序调用,所以在开发DLL应用程序时,通常创建VC++中的一个EXE应用程序作为主项目(project);然后创建一个DLL应用程序作为主工程(sub-project)的子工程,并在主工程中调用该DLL。这样,DLL 本身和与应用程序的接口都可以调试。开发和使用DLL时要注意三种文件: (1) DLL头文件(.H)。DLL头文件是指DLL输出的类或符号(symbols,如函数)的原型或数据结构。H档。一方面,它是类或符号的原型描述文件,另一方面,在其他应用程序中调用DLL时,该文件应该收录在应用程序的源文件中。(2) DLL的导入库文件(.LIB)。导入的库文件是DLL编译链接成功后生成的文件。它的主要作用是:当其他应用程序调用该DLL时,应将该文件引入该应用程序,否则无法导入该DLL。引入库文件的方法有很多种,例如:可以将库文件名填入VC++6.0“项目设置”对话框“链接器”栏的“Object/Li—braryModules”编辑框中(通过菜单项 Build 子菜单项 Settings activation);

  (3)动态链接库文件(.DLL)。DLL文件是应用程序调用DLL运行库时真正的可执行代码。DLL应用程序编译链接成功后,DLL文件就存在了。一个开发成功的应用程序发布时,只需要有EXE文件和DLL文件,不需要LIB和DLL头文件。1.2 VC++6.0中MFC支持的三种DLL 在VC++6.0中,MFC支持三种DLL。下面介绍它们的制作和使用过程: 收稿日期:2004-03-22 作者简介:陈秀芳(1963年生),女,1986年毕业于黑龙江大学,高级讲师。1.2.1 类型一:普通形式的静态DLL (1) 创建一个普通形式的静态DLL工程。使用vc++6.0的AppWizard以通常的形式创建静态DLL,首先新建一个工程,然后选择选项(MFCAppWizard(DLL)),输入项目名称、路径等信息,点击“确定”,在“MFCAPWizArD—StePlofl”对话框中,选择圆圈按钮“RegularDLLwithMFCstaticallylinked”,继续其他选项,即即,您可以创建一个“普通形式的静态 DLL”项目。(2) 以通常的形式从静态 DLL 中导出函数。任何 Win32 应用程序都可以调用静态 DLL 的通常形式。

  

  在 DLL 中导出符号时使用标准“C”接口。如下图:extem "C" E) [PoRTYourExportedFunctionName 导出函数。实现调用有两种方式:一种是和其他形式的DLL一样,将DLL的导入库文件(.LIB文件,包括完整路径)放到“链接器”栏的“对象”栏中VC++ 中的“项目设置”对话框。/LibraryModules”编辑框(通过菜单项Build的子菜单项Settings激活);另一种是在应用程序运行时使用SDK函数LoadLi_brary()加载DLL。这样就可以从调用函数DLL,当然,收录函数原型描述的头文件应该收录在相应的代码文件中。 1.2.2 第二种:动态链接 MFC DLL 的通常形式。这种形式创建DLL工程的方法与上面基本相同,只是在“MFCAppWizard—Step1of1”对话框中,选择圆圈按钮“RegularDLLusingsh81~MFClinked”。这种形式的DLL导出函数的方法也和上面的方法类似,但是需要用宏AFX—MANAGE—STATE来转换MFC模块的状态。具体方法是在所有导出函数前添加如下一行代码: AFX-MANAGE-STATE(AfxGetStaticModuleState()) 这种形式的DLL也可以被任何Win32应用程序调用。

  从应用程序中调用这种形式的DLL函数时,方法同上,但不能使用函数LoadLi_brary()。1.2.3 第三种:Extended DIJL(Dynamic Link MFC) (1) 创建一个扩展DLL工程。使用VC++6.0的AppWizard也可以创建扩展DLL,创建方法与第一种相同,只需在“MFCAppWizard-Step1of1”对话框中选中圆圈按钮“MFCExtentionDLL(UsingsharedMFCDLL)”即可。(2) 从 DLL 中导出类和其他符号,例如函数。实现方式有两种:直接输出整个类,而不是在DEF文件中写装饰名(即带@符号的名字);操作方法如下: 在DLL的头文件中,在类定义中加入关键字AFX—EXT—CLASS,如:classAFXEXTCLfSCMyClass:publicCdocu 该方法允许Export整个类(CMyClass),不需要在DEF文件中添加其他修饰名,其他应用程序可以使用DLL中的类(CMyClass)。存在。将需要输出的变量或函数的修饰名添加到DEF文件中。这种方式需要在.DEF文件中写出所有输出函数的修饰名,适用于输出少量函数。操作方法是:在扩展DLL头文件的开头和末尾分别添加如下代码: #undefAFXDATA #defineAFXDATAAFXEXTDATA //beadyofyourheaderfile #undefAFXDATA #defineAFXDATA 这几行代码保证了扩展DLL的正确编译。其他应用程序可以使用 DLL 中的类 (CMyClass)。存在。将需要输出的变量或函数的修饰名添加到DEF文件中。这种方式需要在.DEF文件中写出所有输出函数的修饰名,适用于输出少量函数。操作方法是:在扩展DLL头文件的开头和末尾分别添加如下代码: #undefAFXDATA #defineAFXDATAAFXEXTDATA //beadyofyourheaderfile #undefAFXDATA #defineAFXDATA 这几行代码保证了扩展DLL的正确编译。其他应用程序可以使用 DLL 中的类 (CMyClass)。存在。将需要输出的变量或函数的修饰名添加到DEF文件中。这种方式需要在.DEF文件中写出所有输出函数的修饰名,适用于输出少量函数。操作方法是:在扩展DLL头文件的开头和末尾分别添加如下代码: #undefAFXDATA #defineAFXDATAAFXEXTDATA //beadyofyourheaderfile #undefAFXDATA #defineAFXDATA 这几行代码保证了扩展DLL的正确编译。适合导出少量函数。操作方法是:在扩展DLL头文件的开头和末尾分别添加如下代码: #undefAFXDATA #defineAFXDATAAFXEXTDATA //beadyofyourheaderfile #undefAFXDATA #defineAFXDATA 这几行代码保证了扩展DLL的正确编译。适合导出少量函数。操作方法是:在扩展DLL头文件的开头和末尾分别添加如下代码: #undefAFXDATA #defineAFXDATAAFXEXTDATA //beadyofyourheaderfile #undefAFXDATA #defineAFXDATA 这几行代码保证了扩展DLL的正确编译。

  不使用这些代码可能会导致 DLL 编译或链接错误。然后在DEF文件中依次写入输出函数的修饰名,如i Functionl@1 Function2@2,这样就可以输出Functionl、Function2等数字。(3) 从应用程序中调用 DLL。调用扩展DLL应用程序必须满足以下条件: 有一个派生自类CwiIlApp的对象,并且使用了MFC的共享DLL形式(Use MI;EInASharedDLL)。满足条件后,需要将扩展​​DLL的导入库文件(.LIB文件,包括完整路径)放入“Projects Settings”对话框“Linker”栏的“Object/LibraryModules”编辑框中VC++ 中的框(通过菜单项构建子菜单项设置被激活)。笔记:导入时版本要一致,即在DEBUG版本的“设置”对话框中添加DEBUG版本DLL的导入库;在RELEASE版本的“设置”对话框中添加该DLL的RELEASE版本导入库。93—最后,在调用扩展DLL的文件(如/CPP文件)中要收录DLL工程中收录函数原型描述的头文件,这样才能使用DLL的函数。

  笔者采用主工程(即EXE应用程序)与扩展DLL(Dynamic Link MFC)子工程共存的方式开发了一款故障诊断应用软件,并使用扩展DLL程序开发数据采集 和控制模块。1. 3DLL存在应用程序连接DLL时需要注意的路径问题。当应用程序启动时,它开始寻找与其连接的DLL并将其映射到进程的内存空间。为了找到DLL,操作系统需要搜索以下位置: (1) EXE文件运行的目录;(2)进程的当前目录;(3)Windows系统目录;(4) PATH环境变量指向的目录。笔记:当应用程序在上述四个目录中找不到需要的DLL文件时,程序就会出错,并显示相应的错误信息。因此,在使用时,应确保上述四个目录之一中有所需的DLL文件。一般可将生成的DLL文件复制到Windows系统目录或EXE文件运行的当前目录下。2 数据采集和DLL中控制程序的编写 以PCL-812PG板为例,说明实现数据采集的DLL程序。卡DLL驱动内容主要包括:通道号选择、模拟量输入Range设置、启动A/D转换和读取转换结果等,DLL驱动程序如下,其中Int()为初始化增益和通道功能; ADC()为A/D转换启动和数据读取函数;参数basea表示板卡的基地址,nlM´n表示数据的通道号采集,gain表示选择通道的增益,ADCResuh表示转换后的数字量,VoltageVa。

  

  1ue 是要返回的电压值。A/D转换触发方式采用软件触发方式,读取转换结果有3种方式: (1)查询A/D转换完成位,然后读取转换结果;(2) AID转换完成后触发中断,然后由中断服务程序读取数据;(3)采用软件延时的方法。本例采用第三种方法,延迟时间由dehv参数控制,在不同的微机上有所不同。将以下代码添加到文件中以确保正确编译扩展 DLL:floatFARPASCALEXPORTADC(unsignedshort basea,intgain,intdelay); #undefAFX—DATA #defineAFXDATAAFXEXTbATA 然后在 *. cpp 文件包括刚刚创建的头文件 *. h文件,编写刀柄和ADC函数。extem"C´´ voidFARPASCALEXPOTAC(unsignedshortbasea,intnunl,intgain);outp(basea+10,nUlTI);outp(basea+10,nlln1);voidFARPASCALEXPOTAC(unsignedshortbasea,intgain,intdelay);unsignedshortADCResult;floatVoltageValue-outp(basea 12, 0); f0r(intk=0;kiPort; //从参数sprinff(ip,"%d.

  %d。%d。%d",((~aram*) pParam)>a, ((I11IeadPaIam*)pParam)>b, ((,I1la bo*)pParam)>c, ((~araln*)oParam)> d);/ /将四段合并成ip地址 SOCKETWinSocket; structsockaddr—inlocal—sin; //定义地址和端口 local—sin.sin—family=AF [NET;local—sin.sin—port=htons(iPort); localsin.sinaddr. saddr=inetaddr(ip); pfinff("stratingscanport%don%s...\n". iPort,ip); //创建socket,如果失败会显示错误信息 if( (WinSocket:socket (AFINET,SOCK STREAM,0))==INVAI.113-SOCKE~) pfinff("Allocatingsocket jump led.Error:%d\n".WSAGetl~qtError()); //尝试建立连接,如果是成功,会显示端口打开 else{if((connect(WinSocket,(structsockaddr*) &local—sin,sizeof(1ocal—sin)))==0) prinff("%sport%disopen.

  [2] Visual C++ 6.0开发集[M].清远电脑工作室。北京:机械出版社。1999. 责任编辑:姚彦茹(上接94页)在微机数据采集和控制系统中,由于数据采集和控制模块使用频繁,要求实时性好响应速度快,可以用VC++6.0开发出功能强大的DLL Modules,然后在各种不同的用户程序中进行链接和调用。实践证明,这种方法易于实现,效果很好,能很好地满足微机数据采集和控制系统的要求。采集和控制系统,由于数据采集和控制模块使用频繁,要求实时性好,响应速度快,可以使用VC++6.0开发功能强大的DLL模块,然后在各种不同的用户程序中进行链接和调用。实践证明,这种方法易于实现,效果很好,能很好地满足微机数据采集和控制系统的要求。采集和控制系统,由于数据采集和控制模块使用频繁,要求实时性好,响应速度快,可以使用VC++6.0开发功能强大的DLL模块,然后在各种不同的用户程序中进行链接和调用。实践证明,这种方法易于实现,效果很好,能很好地满足微机数据采集和控制系统的要求。

  参考文献: [1] 王华,叶爱良,齐立雪,等.VisualC++6.0编程实例与技巧[M].北京:机械工业出版社,1999. [2]张权官,唐小伟.Visual C++6.0编程实例详解[M].北京:电子工业出版社。2000. [3] 大卫·杰鲁金斯克。Visual C++技术内幕[M].北京:希望图书创作室,译.北京:北京希望电子出版社,1999 责任编辑:杨利民

  解决方案:一种档案自动识别的方法技术

  本发明专利技术公开了一种文件自动识别方法,包括以下步骤:步骤S01,接收文件,接收纸质文件,统计文件整理工作负责人整理出的各类文件。 、选定相应图形后,制作分类图形对应表,并制作相关分类图形印章;步骤S02,档案整理,档案整理人员将需要识别的纸质文件与分类图形对应表进行比对,通过opencv的扩展技术实现文件类型的自动识别,识别成功后根据膨化坐标的相对距离自动定位读取需要的部分信息,填入文件目录信息中。采用自动识别编目技术,降低了人工录入文件出错的风险,提高了文件数字化的效率,解决了目前文件自动识别的难题。自动识别以前文件的问题。自动识别以前文件的问题。自动识别以前文件的问题。自动识别以前文件的问题。自动识别以前文件的问题。自动识别以前文件的问题。

  所有详细技术资料下载

  【技术实现步骤摘要】

  一种文件自动识别方法

  [0001] 本专利技术属于文件自动识别技术方向,具体涉及一种文件自动识别方法。

  技术介绍

  目前,各档案管理机构都存有大量的纸质档案,后续也不断有新的纸质档案产生。纸质档案从诞生到现在,长期以人工管理为主。纸质档案的人工管理费时费力,极不方便,效率低下。在使用过程中经常会造成文件丢失和损坏,这对档案事业的发展十分不利。存储、文件信息无法共享,利用率低,经济效益不显着。

  [0003] 在档案数字化过程中,档案整理扫描后,需要采集档案目录信息。作为后续档案信息管理的依据,必须保证其100%的准确性。目前采用的方法大多是使用OCR识别技术进行描述,这必然会因归档文件类型不同而导致识别错误,增加人工审核和修改的成本,且OCR识别技术无法做到准确每次都正确识别并填充到目录信息中。更有什者,档案中通常会有一些*敏*感*词*、*敏*感*词*或一些地形图等文件的*敏*感*词*,有的甚至可能是*敏*感*词*。图像模糊,仅靠 OCR 技术无法识别。人工审查后的文档增加了人工返工的成本。

  技术实现思路

  本专利技术的目的在于针对现有装置的一种文件自动识别的方法,以解决上述问题

  技术介绍

  中提出的问题。

  [0005] 为了解决上述技术问题,本专利技术提供如下技术方案:一种文件自动识别方法,包括如下步骤:

  步骤S01、档案接收,接收纸质档案,该工作由档案整理工作负责人整理的各类档案,选择其对应图后制作分类图对应表,制作相关分类图印章;

  步骤S02,档案整理,档案整理人员将需要识别的纸质档案与对应的分类图形表进行比对,选择该类档案对应的印章和对应颜色的印台,在左上角并在纸质档案右上角或指定部位盖章;

  步骤S03、档案扫描,档案分拣完成后,档案分拣人员将纸质档案扫描到电子影像文件存储中,进入档案分拣系统;档案管理软件内置分类图形对应算法,通过档案上的分类图形识别文件的形状和颜色后,判断文件的类别;

  步骤S04,文件识别,文件整理系统内置的分类模式识别算法识别图像文件上的图形对应的文件类型,从而确定文件的类型,然后调用对应的文件模板进行自动处理。描述;

  [0010] 步骤S05,文件装订,描述完成后,在文件管理系统中将文件文件与其对应的目录信息打包存储在一起,将纸质文件装箱装箱放回货架贮存。

  

  步骤S02中的整理方法包括以下步骤

  步骤S21、档案整理人员将纸质档案扫描成电子图像文件后上传至档案管理系统,档案管理系统扩充电子图像文件;

  步骤S22,膨化,对标准格式文件进行膨化填充操作;

  步骤S23,裁剪,根据图像文件四边的极值坐标裁剪,根据裁剪后的图像得到相关坐标(图像裁剪可以解决因为扫描操作导致坐标不一致的问题,什么保证存储的是标准布局坐标);

  步骤S24,比较得到坐标值后,将处理后得到的坐标与原系统信息库中的标准格式坐标进行比较,坐标相同的就是同类型的文件;

  步骤S25,识别文本填写文件目录信息,确定文件类型后调用标准格式文件模板,根据坐标点匹配模板所需信息的电子图像文件坐标点,填写标准格式文件模板,完成自动目录;

  [0017] 步骤S26,将文件包存储在文件管理系统中,在制作文件目录信息后,将电子图片文件与目录信息打包存储在文件管理系统中。

  步骤S04所述的方法包括以下步骤

  步骤S41、膨化、填充,利用了OpenCV中的膨胀填充操作,将纸质档案电子图像文件中的文字部分转换为黑色色块;

  步骤S42,计算角点距离得到特征值坐标,得到黑色色块后,计算每个黑色色块与电子图像文件四个边四个顶点的距离,并将所有数据进行比较;

  步骤S43,根据特征值坐标判断存档文件类型,比较所有数据后去掉相同的坐标值,留下不同的坐标值,该坐标就是每种存档文件的特征值,根据该特征值可以判断出的类别该文件并达到自动编目目的;

  步骤S44,自动描述,在获取档案文件的特征值坐标后,确定其类型,根据其类型选择相应的文件格式模板,根据模板内容进行识别操作后自动填写模板,完成自动描述。

  [0023] 步骤S45,打包存储,在自动记录完成后,将扫描的电子图像文件与获取的目录信息一起打包成文件存储在文件管理系统中。

  [0024] 分类图形对应表包括文件类型,以及每种文件唯一对应的图形。分类图形对应表包括分类图形印章,分类图形印章包括分类图形对应表中的所有图形。

  与现有技术相比,本专利技术所达到的有益效果是:本专利技术,

  opencv的扩展技术实现了文件类型的自动识别,识别成功后根据扩展坐标的相对距离再次自动定位读取需要的部分信息,并填写文件目录信息。利用自动识别和编目技术,降低人工文件输入出错的风险,提高文件数字化效率,opencv具有较高的可用性和准确性。

  图纸说明

  附图用于提供对本专利技术的进一步理解,并构成说明书的一部分,与本专利技术的实施例一起用于解释本专利技术,并不构成对本专利技术的限制。在附图中:

  图1为该专利技术的文件识别流程*敏*感*词*。

  

  详细方法

  [0029] 下面结合优选实施例和附图,对本专利的技术方案作进一步非限制性的详细说明。显然,所描述的实施例只是该专利技术的部分实施例,而不是全部的实施例。基于专利技术

  实施例,以及本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利保护的技术范围。

  请参见图1,本专利技术提供的技术方案:一种文件自动识别的方法,包括以下步骤:步骤S01,文件接收,接收纸质文件,由文件负责人安排完成本次工作统计工作 对各类档案,选择相应的图文建立分类图文对应表,并制作相关分类图文印章;

  步骤S02,档案整理,档案整理人员将需要识别的纸质档案与对应的分类图形表进行比对,选择该类档案对应的印章和对应颜色的印台,在左上角并在纸质档案右上角或指定部位盖章;

  步骤S03、文件扫描,档案整理完成后,档案整理人员将纸质档案扫描到电子影像文件存储中,进入档案整理系统;文件管理软件内置分类图形对应算法,通过档案上的分类图形识别文件的形状和颜色后,判断文件的类别;

  步骤S04、文件识别,文件整理系统内置的分类模式识别算法识别图像文件上的图形对应的文件类型,从而确定文件的类型,然后调用相应的文件模板进行自动描述;

  [0034] 步骤S05,文件装订,描述完成后,在文件管理系统中将文件文件与其对应的目录信息打包存储在一起,将纸质文件装箱装箱放回货架入库.

  步骤S02中的布置方法包括以下步骤

  【技术保护要点】

  【技术特点概要】

  1. 一种文件自动识别方法,其特征在于:包括以下步骤:步骤S01,文件接收,接收纸质文件,文件整理负责人统计本次工作中整理出的各类文件,并选择对应图形后,制作分类图形对应表,并制作相关分类图形印章;步骤S02,文件整理,文件整理人员将需要识别的纸质文件与分类图形对应表进行比对,选择该类文件对应的印章,印章上印上相应颜色的印泥。纸质档案的左上角、右上角或指定部分;步骤S03,文件扫描,文件排序完成后,档案分拣人员将纸质档案扫描成电子图像文件,存入档案分拣系统档案管理软件内置分类图形对应算法,通过识别分类的形状和颜色来判断档案的类别存档文件上的图形;步骤S04、文件识别,文件整理系统内置的分类图形识别算法识别图像文件图形对应的文件类型,从而确定文件的类型,进而调用相应的文件模板进行自动描述; 步骤S05,文件绑定,描述完成后的文件与对应的目录信息一起打包保存,如在文件管理系统中,纸质文件装订装箱后放回货架存放。2.根据权利要求1所述的一种文件自动识别方法,其特征在于:步骤S02中的整理方法包括以下步骤: 步骤S21,文件整理人员将纸质文件扫描成电子图像文件上传至文件管理系统,文件管理系统对电子图像文件进行扩充;步骤S22,扩展,对标准格式文件进行扩展填充操作;步骤S23、裁剪,根据图像文件四边的极值坐标进行裁剪,并根据裁剪后的图像得到相关坐标(图像裁剪可以消除扫描操作导致坐标不一致的问题,并确保存储的坐标是标准格式坐标);步骤S24,得到坐标值后,进行比较,将处理后得到的坐标与原系统信息库中的标准格式坐标进行比较...

  【专利技术性质】

  技术研发人员:刘金华、刘荣昌、曹越、谷一文、邱奕志、李翔、刘继轩、潘颖凡、杨松洪康、聂林、

  申请人(专利权):南京冀阳智能信息技术研究院*敏*感*词*,

  类型:发明

  国家省市:

  下载所有详细技术资料 我是该专利的所有者

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线