工厂生产需要,搞过一段时间的激光雕刻金橙子EzCad二次开发,网上关于这方面的资料比较少且比较零碎,最近闲下来写篇文章总结一下开发流程,希望对大家能有所帮助!
先在这里放个图片,证明我搞成功了!
首先你的电脑需要能够运行正常的激光雕刻软件进行常规雕刻作业,然后检查一下你的激光雕刻软件里面是否有 MarkEzd.dll 这个文件,如果有那么恭喜你,搞成功的概率不较大。如果没有,那可能就要使用我提供的 MarkEzd.dll,我提供的这个MarkEzd.dll 文件是2.7.0版本,可能在某些雕刻机上需要加密狗才能运行。最后还需要我编写的动态链接库 MyMarkEzd.dll 或 MyMarkEzd_xp.dll 用于显示预览图。
上述材料均可可从我在上文提供的源码下载地址下载。
首先从上文中的下载地址下载我提供的开发示例源代码,编译运行下试试,如果能正常运行显示预览图和雕刻,那么恭喜你,一次点亮!
如果可以运行,提示 “没有找到加密狗”,那么在某宝购买个USB加密狗插上去试试,或许就行了!
如果可以运行且可以显示预览图,雕刻的时候提示错误,可能是EzCad软件没有配置好,打开二次开发目录下的EzCad软件,按照你的可以正常工作的EzCad软件配置一遍试试。
1. 将你原来的能运行的Ezcad软件复制一份;
2. 将我示例代码中的 MyMarkEzd.dll ,MyMarkEzd_xp.dll ,MarkEzd.dll,这三个文件及我们二次开发编译exe可执行文件,复制到你原来的EzCad文件加内。
3.如果我们编译的exe文件能在此文件夹下正常运行,恭喜你成功了。如果不能运行,根据错误提示,从我提供的EzCad软件中替换相关的dll文件到你的EzCad软件中。每替换一次,运行一次,不保证最后可以成功。
首先要从dll文件中导入如下函数,供c#语言调用:
[DllImport(@"MarkEzd.dll", EntryPoint = "lmc1_Close", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern Int32 lmc1_Close();
[DllImport("MarkEzd.dll", EntryPoint = "lmc1_Initial", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int lmc1_Initial(string strEzCadPath, int bTestMode, IntPtr hOwenWnd);
[DllImport("MarkEzd.dll", EntryPoint = "lmc1_LoadEzdFile", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int lmc1_LoadEzdFile(string strFileName);
[DllImport("MarkEzd.dll", EntryPoint = "lmc1_ChangeTextByName", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int lmc1_ChangeTextByName(string strTextName, string strTextNew);
[DllImport("MarkEzd.dll", EntryPoint = "lmc1_DeleteEnt", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int lmc1_DeleteEnt(string strEntName);
[DllImport("MarkEzd.dll", EntryPoint = "lmc1_Mark", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int lmc1_Mark(int bFlyMark);
[DllImport("MarkEzd.dll", EntryPoint = "lmc1_RedLightMark", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
public static extern Int32 lmc1_RedLightMark(); //显示一次红光对标
[DllImport("MyMarkEzd.dll", EntryPoint = "CsGetHBitmap", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr CsGetHBitmap(IntPtr hOwenWnd, int width, int height);
[DllImport("MyMarkEzd_xp.dll", EntryPoint = "CsGetHBitmap", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr CsGetHBitmap_XP(IntPtr hOwenWnd, int width, int height);
激光雕刻机驱动流程如下:
int c = lmc1_Initial(Application.StartupPath, 0, Handle); //初始化激光雕刻机
if (c != 0)
{
MessageBox.Show("初始化Lmc失败\r\n错误代码:" + c + "\r\n错误原因:" + EzCad_Error_Code.ErrorMessage[c]);
//lmc1_Close();
return;
}
if (lmc1_LoadEzdFile(Application.StartupPath + "/test.ezd") == 0) //加载模板丝印文件
{
lmc1_Close();
MessageBox.Show("加载模板文件出错\r\n错误代码:" + c + "\r\n错误原因:" + EzCad_Error_Code.ErrorMessage[c]);
return;
}
lmc1_ChangeTextByName("test_qr", textBox.Text); //修改二维码
lmc1_ChangeTextByName("test_str", textBox.Text); //修改文本
Bitmap m = null;
try
{
if (Environment.OSVersion.Version.Major > 5) //主版本号大于五为Vasta以上系统
{
m = Image.FromHbitmap(CsGetHBitmap(Handle, 560, 320)); //获取预览图片,win7及以上
}
else
{
m = Image.FromHbitmap(CsGetHBitmap_XP(Handle, 560, 320));//获取预览图片,XP系统
}
}
catch (Exception ex)
{
MessageBox.Show("获取预览图时发生错误:" + ex.Message);
return;
}
if (m == null)
{
MessageBox.Show("无法获取预览图!!!");
lmc1_Close();
return;
}
else
{
pictureBox.Image = m; //将预览图显示到页面上
}
lmc1_RedLightMark(); //执行一次红光对标
Thread.Sleep(10); //间隔时间可调
lmc1_RedLightMark(); //执行一次红光对标
Thread.Sleep(10); //间隔时间可调
lmc1_RedLightMark(); //执行一次红光对标
Thread.Sleep(10); //间隔时间可调
c = lmc1_Mark(0); //执行镭雕
if (c == 0)
{
MessageBox.Show("雕刻完成!!!");
else
{
MessageBox.Show("雕刻时出错\r\n错误代码:" + c + "\r\n错误原因:" + EzCad_Error_Code.ErrorMessage[c]);
}