金橙子打标软件学习流程
- 学习C++基本语法
C++教程从零到一 - 学习Qt
Qt从入门到实战 - 学习动态调用动态链接库,观看EZCAD2开发者手册
3.1 调用Windows API函数LoadLibrary()动态加载DLL;
3.2 调用Windows API函数GetProcAddress()取得将要调用的DLL中函数的指
针;用函数指针调用DLL中函数完成相应功能;
3.3 在程序结束时或不再使用DLL中函数时,调用Windows API函数
FreeLibrary()释放动态链接库。
注意:调用MarkEzd.dll的程序必须放在ezcad2.exe同一个目录下,否则MarkEzd.dll将无法正常工作;而且ezcad2.exe在运行的时候MarkEzd.dll将无法正常使用,所以在使用MarkEzd.dll时必须关闭ezcad2.exe。
首先要把MarkEzdDll.h文件加入头文件
再创建lmc1.h和lmc1.cpp文件
lmc1.h中声明变量
#pragma once
#include "MarkEzdDll.h"class LMC1
{public:LMC1();~LMC1();HINSTANCE m_hEzdDLL;LMC1_INITIAL lmc1_Initial;LMC1_INITIAL2 lmc1_Initial2;LMC1_CLOSE lmc1_Close;LMC1_STOPMARK lmc1_StopMark;LMC1_LOADEZDFILE lmc1_LoadEzdFile;LMC1_MARK lmc1_Mark;LMC1_MARKENTITY lmc1_MarkEntity;LMC1_ISMARKING lmc1_IsMarking;LMC1_SETBARCODEPARAM lmc1_SetBarcodeParam;LMC1_RESET lmc1_Reset;LMC1_AXISMOVETOPULSE lmc1_AxisMoveToPulse;LMC1_GETAXISCOORPULSE lmc1_GetAxisCoorPulse;LMC1_SETDEVCFG2 lmc1_SetDevCfg2;LMC1_GETENTITYCOUNT lmc1_GetEntityCount;LMC1_REDLIGHTMARK lmc1_RedLightMark;LMC1_GETBARCODEPARAM lmc1_GetBarcodeParam;LMC1_READPORT lmc1_ReadPort;LMC1_GETOUTPORT lmc1_GetOutPort;LMC1_WRITEPORT lmc1_WritePort;LMC1_UNGROUPENT2 lmc1_UnGroupEnt2;LMC1_UNGROUPENT lmc1_UnGroupEnt;LMC1_SETDEVCFG lmc1_SetDevCfg;LMC1_GROUPENT2 lmc1_GroupEnt2;LMC1_GETPENPARAM lmc1_GetPenParam;LMC1_SETPENPARAM lmc1_SetPenParam;LMC1_CLEARENTLIB lmc1_ClearEntLib;LMC1_ADDTEXTTOLIB lmc1_AddTextToLib;LMC1_ADDFILETOLIB lmc1_AddFileToLib;LMC1_ADDCURVETOLIB lmc1_AddCurveToLib;LMC1_ADDCIRCLETOLIB lmc1_AddCircleToLib;LMC1_ADDBARCODETOLIB lmc1_AddBarCodeToLib;LMC1_CHANGETEXTBYNAME lmc1_ChangeTextByName;LMC1_AXISMOVETO lmc1_AxisMoveTo;LMC1_AXISCORRECTORIGIN lmc1_AxisCorrectOrigin;LMC1_GETAXISCOOR lmc1_GetAxisCoor;LMC1_SAVEENTLIBTOFILE lmc1_SaveEntLibToFile;LMC1_GETALLFONTRECORD lmc1_GetAllFontRecord;LMC1_MOVEENT lmc1_MoveEnt;
};
lmc1.cpp中获取句柄
#include "lmc1.h"
#include <iostream>
using namespace std;
LMC1::LMC1()
{//防止野指针m_hEzdDLL = NULL;//赋予句柄m_hEzdDLL = LoadLibrary(_T("MarkEzd.dll"));//获取句柄出错检验if (m_hEzdDLL == NULL){cout << "找不到MarkEzd.dll文件" << endl;}else{lmc1_Initial = (LMC1_INITIAL)GetProcAddress(m_hEzdDLL, "lmc1_Initial");if (lmc1_Initial == NULL){cout << "lmc1_Initial接口加载失败" << endl;}lmc1_Initial2 = (LMC1_INITIAL2)GetProcAddress(m_hEzdDLL, "lmc1_Initial2");if (lmc1_Initial == NULL){cout << "lmc1_Initial2接口加载失败" << endl;}lmc1_Close = (LMC1_CLOSE)GetProcAddress(m_hEzdDLL, "lmc1_Close");if (lmc1_Initial == NULL){cout << "lmc1_Initial2接口加载失败" << endl;}lmc1_SetDevCfg = (LMC1_SETDEVCFG)GetProcAddress(m_hEzdDLL, "lmc1_SetDevCfg");if (lmc1_Initial == NULL){cout << "lmc1_SetDevCfg接口加载失败" << endl;}lmc1_Mark = (LMC1_MARK)GetProcAddress(m_hEzdDLL, "lmc1_Mark");if (lmc1_Initial == NULL){cout << "lmc1_Mark接口加载失败" << endl;}lmc1_IsMarking = (LMC1_ISMARKING)GetProcAddress(m_hEzdDLL, "lmc1_IsMarking");if (lmc1_Initial == NULL){cout << "lmc1_IsMarking接口加载失败" << endl;}lmc1_StopMark = (LMC1_STOPMARK)GetProcAddress(m_hEzdDLL, "lmc1_StopMark");if (lmc1_Initial == NULL){cout << "lmc1_StopMark接口加载失败" << endl;}lmc1_SetBarcodeParam = (LMC1_SETBARCODEPARAM)GetProcAddress(m_hEzdDLL, "lmc1_SetBarcodeParam");if (lmc1_SetBarcodeParam == NULL){cout << "lmc1_SetBarcodeParam接口加载失败" << endl;}lmc1_LoadEzdFile = (LMC1_LOADEZDFILE)GetProcAddress(m_hEzdDLL, "lmc1_LoadEzdFile");if (lmc1_LoadEzdFile == NULL){cout << "lmc1_LoadEzdFile接口加载失败" << endl;}lmc1_SaveEntLibToFile = (LMC1_SAVEENTLIBTOFILE)GetProcAddress(m_hEzdDLL, "lmc1_SaveEntLibToFile");if (lmc1_SaveEntLibToFile == NULL){cout << "lmc1_SaveEntLibToFile接口加载失败" << endl;}lmc1_SetPenParam = (LMC1_SETPENPARAM)GetProcAddress(m_hEzdDLL, "lmc1_SetPenParam");if (lmc1_SetPenParam == NULL){cout << "lmc1_SetPenParam接口加载失败" << endl;}lmc1_GetPenParam = (LMC1_GETPENPARAM)GetProcAddress(m_hEzdDLL, "lmc1_GetPenParam");if (lmc1_GetPenParam == NULL){cout << "lmc1_GetPenParam接口加载失败" << endl;}lmc1_ReadPort = (LMC1_READPORT)GetProcAddress(m_hEzdDLL, "lmc1_ReadPort");if (lmc1_ReadPort == NULL){cout << "lmc1_ReadPort接口加载失败" << endl;}lmc1_GetOutPort = (LMC1_GETOUTPORT)GetProcAddress(m_hEzdDLL, "lmc1_GetOutPort");if (lmc1_GetOutPort == NULL){cout << "lmc1_GetOutPort接口加载失败" << endl;}lmc1_WritePort = (LMC1_WRITEPORT)GetProcAddress(m_hEzdDLL, "lmc1_WritePort");if (lmc1_WritePort == NULL){cout << "lmc1_WritePort接口加载失败" << endl;}lmc1_Reset = (LMC1_RESET)GetProcAddress(m_hEzdDLL, "lmc1_Reset");if (lmc1_Reset == NULL){cout << "lmc1_Reset接口加载失败" << endl;}lmc1_AxisCorrectOrigin = (LMC1_AXISCORRECTORIGIN)GetProcAddress(m_hEzdDLL, "lmc1_AxisCorrectOrigin");if (lmc1_AxisCorrectOrigin == NULL){cout << "lmc1_AxisCorrectOrigin接口加载失败" << endl;}lmc1_AxisMoveTo = (LMC1_AXISMOVETO)GetProcAddress(m_hEzdDLL, "lmc1_AxisMoveTo");if (lmc1_AxisCorrectOrigin == NULL){cout << "lmc1_AxisMoveTo接口加载失败" << endl;}lmc1_AxisMoveToPulse = (LMC1_AXISMOVETOPULSE)GetProcAddress(m_hEzdDLL, "lmc1_AxisMoveToPulse");if (lmc1_AxisMoveToPulse == NULL){cout << "lmc1_AxisMoveToPulse接口加载失败" << endl;}lmc1_GetAxisCoor = (LMC1_GETAXISCOOR)GetProcAddress(m_hEzdDLL, "lmc1_GetAxisCoor");if (lmc1_GetAxisCoor == NULL){cout << "lmc1_GetAxisCoor接口加载失败" << endl;}lmc1_GetAxisCoorPulse = (LMC1_GETAXISCOORPULSE)GetProcAddress(m_hEzdDLL, "lmc1_GetAxisCoorPulse");if (lmc1_GetAxisCoor == NULL){cout << "lmc1_GetAxisCoor接口加载失败" << endl;}lmc1_SetDevCfg2 = (LMC1_SETDEVCFG2)GetProcAddress(m_hEzdDLL, "lmc1_SetDevCfg2");if (lmc1_GetAxisCoor == NULL){cout << "lmc1_SetDevCfg2接口加载失败" << endl;}lmc1_GetEntityCount = (LMC1_GETENTITYCOUNT)GetProcAddress(m_hEzdDLL, "lmc1_GetEntityCount");if (lmc1_GetAxisCoor == NULL){cout << "lmc1_GetEntityCount接口加载失败" << endl;}lmc1_RedLightMark = (LMC1_REDLIGHTMARK)GetProcAddress(m_hEzdDLL, "lmc1_RedLightMark");if (lmc1_RedLightMark == NULL){cout << "lmc1_RedLightMark接口加载失败" << endl;}lmc1_ClearEntLib = (LMC1_CLEARENTLIB)GetProcAddress(m_hEzdDLL, "lmc1_ClearEntLib");if (lmc1_ClearEntLib == NULL){cout << "lmc1_ClearEntLib接口加载失败" << endl;}lmc1_AddBarCodeToLib = (LMC1_ADDBARCODETOLIB)GetProcAddress(m_hEzdDLL, "lmc1_AddBarCodeToLib");if (lmc1_AddBarCodeToLib == NULL){cout << "lmc1_AddBarCodeToLib接口加载失败" << endl;}lmc1_GetBarcodeParam = (LMC1_GETBARCODEPARAM)GetProcAddress(m_hEzdDLL, "lmc1_GetBarcodeParam");if (lmc1_GetBarcodeParam == NULL){cout << "lmc1_GetBarcodeParam接口加载失败" << endl;}lmc1_ChangeTextByName = (LMC1_CHANGETEXTBYNAME)GetProcAddress(m_hEzdDLL, "lmc1_ChangeTextByName");if (lmc1_ChangeTextByName == NULL){cout << "lmc1_ChangeTextByName接口加载失败" << endl;}}}LMC1::~LMC1()
{FreeLibrary(m_hEzdDLL);
}
最后在主文件中调用
//示例#include <iostream>
#include <string>
#include "MarkEzdDll.h"
#include <tchar.h>
#include <atlstr.h>
#include "lmc1.h"
using namespace std;//继承于LMC1类
class TestDLL:LMC1 {public:void ezd_text();
};
void TestDLL::ezd_text() {//获得MarkEzd.dll句柄m_hEzdDLL = LoadLibrary(_T("MarkEzd.dll"));//输出调用是否出错cout << m_hEzdDLL << endl;//EzCad2.exe和dll以及配置文件都要在一个目录下//定义一个变量存储这个目录TCHAR strEzCadPath[256];//传入目录参数TCHAR _strEzCadPath[256] = _T("C:\\Users\\ADVANTECH\\Desktop\\build-QRcode-Desktop_Qt_5_14_2_MSVC2017_32bit-Debug\\debug");//调用初始化函数并输出返回值//返回值为错误号,具体定义见MarkEzdDll.h文件int nErr = lmc1_Initial2(_strEzCadPath, 0);//初始化lmc1控制卡cout << nErr << endl;//调用加载函数句柄lmc1_LoadEzdFile = (LMC1_LOADEZDFILE)GetProcAddress(m_hEzdDLL, "lmc1_LoadEzdFile");//传入打标ezd文件位置TCHAR szFile[256] = _T("C:\\Users\\ADVANTECH\\Desktop\\15-CODE.ezd");//调用加载函数加载文件并输出返回值nErr = lmc1_LoadEzdFile(szFile);cout << nErr << endl;//调用标刻函数句柄lmc1_Mark = (LMC1_MARK)GetProcAddress(m_hEzdDLL, "lmc1_Mark");cout << lmc1_Mark << endl;//调用标刻函数并输出返回值nErr = lmc1_Mark(0);cout << nErr << endl;//调用关闭函数句柄lmc1_Close = (LMC1_CLOSE)GetProcAddress(m_hEzdDLL, "lmc1_Close");//关闭并输出返回值nErr = lmc1_Close();cout << nErr << endl;//释放句柄FreeLibrary(m_hEzdDLL);
}int main(){//在主函数中调用TestDLL td;td.ezd_text();return 0;
}
以上为一个简单的动态调用动态链接库的流程,具体开发要根据实际需求来编写。
4. 学习Qt创建TCP通信
Qt创建TCP通信
这是一个比较长的课程,只看其中创建TCP通信的几节课就可以,不过若是对MFC,数据库感兴趣也可以观看。
有需要要学习modbus-TCP通信的话,可以阅读《MODBUS软件开发实战指南》
参考文章:金橙子打标卡二次开发应用
金橙子打标软件学习流程相关推荐
- 基于Qt的金橙子打标卡二次开发
激光加工行业中经常会用到不规则图形的加工,这时用金橙子的软件就不能满足我们的需求,需要对金橙子软件进行二次开发,在金橙子开发Demo中只有基于MFC的例子和C#的例子. 为把架构做成硬件无关,先定义一 ...
- 视觉打标软件 在线视觉打标系统 1.金橙子控制板卡 2.自主研发的定位系统
视觉打标软件 在线视觉打标系统 1.金橙子控制板卡 2.自主研发的定位系统 3.操作界面简洁,易上手 4.标刻精度高,误差正负0.02 注:该系统属于本人开发和维护 ID:99100067460474 ...
- 金橙子软件不锈钢打黑_什么是锈? 安全,快速,简便的软件开发
金橙子软件不锈钢打黑 快速,安全,易于编写-选择任意两个. 长期以来,这一直是软件开发的状态. 强调便利性和安全性的语言往往很慢(例如Python ). 强调性能的语言往往很难使用,并且很容易让您大吃 ...
- 软件开发流程--学习笔记
软件开发流程--学习笔记 背景 产生原因及作用 个人理解 软件开发流程 需求 需求调研 需求分析 需求确认 设计 概要设计 详细设计 编码 测试 交付 维护 知识拓展 软件开发生命周期(SDLC) 软 ...
- IOS学习之appStore上传苹果应用程序软件发布流程
原文地址:appStore上传苹果应用程序软件发布流程 兄弟们:最新的界面图片已经更新. 我也很忙,问问题的话尽量有个大概的了解,别问太多问题,我是个屌丝,要工作赚钱. 首先确定帐号是否能发布, ht ...
- SAMLight二次开发,打标软件定制,激光软件定制,视觉定位
承接SAMLight二次开发,金橙子二次开发,以及提供各种定制化的激光打标机,激光切割机的软件解决方案,如视觉打标,视觉定位打标机等. 联系QQ616180284 转载于:https://www.cn ...
- 软件开发流程管理中的6个重点
1.需求的确定 充分了解用户真实需求,与用户保持沟通交流:需求文档需详尽.准确,明确功能和客户期望:确保需求的合理性.完整性和可行性,并对需求进行优先级排序. 软件开发流程管理中的6个重点 2.设 ...
- 工具类软件操作手册_全套广联达软件学习资料合集:教程+实例讲解+操作手册,一文搞定...
要学习并掌握好算量软件,不仅仅需要软件知识,还需要各种造价相关知识,只有精通软件及造价知识,才能大大的提高算量的速度及准确度. 一个算量的高手掌握的不单是软件操作技术,还要掌握的是造价的基础知识,你要 ...
- (6)Vivado软件开发流程(第2天)
(6)Vivado软件开发流程(第2天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)Vivado软件开发流程(第2天) 5)技术交流 6)参考资料 2 FPG ...
最新文章
- CNN如何用于NLP任务?一文简述文本分类任务的7个模型
- 广东省普通高中计算机会考,广东会考网
- C++的三大特性:封装,继承,多态
- 2017.10.25笔记3
- 虚拟机VMware12下安装windows7 x64系统使用教程
- 【推荐系统入门】一窥推荐系统的原理
- 线程的生命周期和状态控制
- CVPR 2019审稿排名第一满分论文:让机器人也能「问路」的视觉语言导航新方法...
- markdown单元格快速合并(不用自己写html代码)
- 查询SQL Server中表占用的空间方法
- 利用IsPostBack检查网页是不是第一次进入(asp.net)
- 数据结构(java语言描述)递归实现——汉诺塔问题
- android 函数式编程,响应式编程在Android中的应用
- [STC单片机] STC32G单片机双CAN通信测试
- 全国哀悼日,CSS如何把整个网页黑白显示
- python flask上传Excel并把Excel的数据导入数据库
- GBase 8c 数据库产品简介
- 怎么把MySQL数据库卸载干净
- 队测 逆序对 permut
- localhost拒绝了我们的连接请求
热门文章
- SpringMvc-HandlerMapping/RequestCondition
- bat 两个文本字符替换_Excel中最全最实用的文本函数公式大全
- python使用字典描述学生信息_一起学Python:字典介绍
- 发布一款给图片批量加水印的程序PicNet V1.0
- Linux NFS存储服务部署
- Windows 下修改 MySQL 编码为 utf8
- [js]DOM 篇
- cocos2dx-lua 笔记 方向控制 v2
- 程序员界大杯具:蜗居中的小贝是搞C++ 的 !
- C++---基于ffmpeg实现视频播放器(一)