金橙子打标软件学习流程

  1. 学习C++基本语法
    C++教程从零到一
  2. 学习Qt
    Qt从入门到实战
  3. 学习动态调用动态链接库,观看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软件开发实战指南》

参考文章金橙子打标卡二次开发应用

LabVIEW是一种图形化编程语言和开发环境,由美国国家仪器公司(National Instruments)开发。它主要用于控制、测量和数据采集等领域的应用开发。LabVIEW具有直观的图形化编程界面,使得开发者可以通过拖拽和连接图标来构建程序,而无需编写传统的文本代码。 对于橙子激光打标软件的二次开发,LabVIEW可以提供强大的功能和灵活性。通过使用LabVIEW,您可以利用其丰富的工具和库来实现自定义的激光打标功能。以下是LabVIEW在橙子激光打标软件二次开发中的一些应用: 1. 控制激光器:LabVIEW可以与激光器进行通信,并控制其开关、功率、频率等参数。您可以使用LabVIEW提供的串口或网络通信功能与激光器进行交互。 2. 打标模式设计:LabVIEW可以帮助您设计和实现不同的打标模式,如点阵、矢量、连续等。您可以通过编程方式控制激光器的运动轨迹和打标内容。 3. 数据处理与分析:LabVIEW具有强大的数据处理和分析功能,您可以使用LabVIEW对激光打标过程中的数据进行实时处理和分析,以实现更精确的打标效果。 4. 用户界面设计:LabVIEW提供了丰富的用户界面设计工具,您可以创建直观友好的界面,方便操作人员进行参数设置、监控和结果展示。 总之,LabVIEW作为一种强大的开发工具,可以帮助您进行橙子激光打标软件的二次开发,实现定制化的功能和需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值