以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 求dll调用指点。 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=96303) |
-- 作者:54292550 -- 发布时间:2017/2/17 14:49:00 -- 求dll调用指点。 我有一个二次开发需求,一下内容是金橙子打标软件的二次开发接口。我只用到标识成黄色的那四个函数。 Markezd.dll是直接复制在foxtable目录下面就不用引用了吧? 跪求高手指点一下,在代码中如何引用markezd.dll,如何使用那四个函数?
—————————————————————————————————————————————————————————— 1. 概述
MarkEzd.dll 是金橙子提供给用户用于ezcad2和lmc1控制卡二次开发的动态连接库。 MarkEzdDll.h是MarkEzd.dll中输出的函数的头文件。
用户可以使用VC6.0来进行开发。 MarkEzd.dll动态链接库函数的调用方法为显示调用,显式调用方法需要调用Windows API函数加载和释放动态链接库。 显式调用方法如下: 1.调用Windows API函数LoadLibrary()动态加载DLL; 2.调用Windows API函数GetProcAddress()取得将要调用的DLL中函数的指针;用函数指针调用DLL中函数完成相应功能; 3.在程序结束时或不再使用DLL中函数时,调用Windows API函数FreeLibrary()释放动态链接库。 注意:调用MarkEzd.dll的程序必须放在ezcad2.exe同一个目录下,否则MarkEzd.dll将无法正常工作;而且ezcad2.exe在运行的时候MarkEzd.dll将无法正常使用,所以在使用MarkEzd.dll时必须关闭ezcad2.exe。 2.函数说明
在MarkEzd.dll中所有函数(个别函数除外)返回值均为一个整形的通用错误码 通用错误码定义如下: #define
LMC1_ERR_SUCCESS 0 //成功 #define
LMC1_ERR_EZCADRUN 1 //发现EZCAD在运行 #define
LMC1_ERR_NOFINDCFGFILE 2 //找不到EZCAD.CFG #define
LMC1_ERR_FAILEDOPEN 3 //打开LMC1失败 #define
LMC1_ERR_NODEVICE 4 //没有有效的lmc1设备 #define
LMC1_ERR_HARDVER 5 //lmc1版本错误 #define
LMC1_ERR_DEVCFG 6 //找不到设备配置文件 #define
LMC1_ERR_STOPSIGNAL 7 //报警信号 #define
LMC1_ERR_USERSTOP 8 //用户停止 #define
LMC1_ERR_UNKNOW 9 //不明错误 #define
LMC1_ERR_OUTTIME 10 //超时 #define
LMC1_ERR_NOINITIAL 11 //未初始化 #define
LMC1_ERR_READFILE 12 //读文件错误 #define
LMC1_ERR_OWENWNDNULL 13 //窗口为空 #define
LMC1_ERR_NOFINDFONT 14 //找不到指定名称的字体 #define
LMC1_ERR_PENNO 15 //错误的笔号 #define LMC1_ERR_NOTTEXT 16 //指定名称的对象不是文本对象 #define
LMC1_ERR_SAVEFILE 17 //保存文件失败 #define
LMC1_ERR_NOFINDENT 18 //找不到指定对象 #define
LMC1_ERR_STATUE 19 //当前状态下不能执行此操作 目 的:初始化lmc1控制卡。 语 法:int lmc1_Initial(TCHAR* strEzCadPath,BOOL bTestMode,HWND hOwenWnd); strEzCadPath是ezcad2.exe所处的目录的全路径名称; bTestMode 指是否是测试模式 hOwenWnd
指拥有用户输入焦点的窗口,用于检测用户暂停消息。 描 述:在程序中必须首先调用lmc1_Initial,其它函数才能工作。 返 回 值:通用错误码
函 数 名:lmc1_Close 目 的:关闭lmc1控制卡。 语 法:int lmc1_Close(); 描 述:在程序中退出时必须调用lmc1_Close来关闭lmc1控制卡。 返 回 值:通用错误码
函 数 名:lmc1_LoadEzdFile 目 的:打开指定的ezd文件,并清除当前数据库中的所有对象。 语 法:int lmc1_LoadEzdFile(TCHAR*
strFileName); 描 述:在程序中一般用此函数来打开一个用户建立ezd模板文件,这样用户就不需要在程序中设置加工参数,因为模板中的加工参数会自动导入。 返 回 值:通用错误码
函 数 名:lmc1_Mark 目 的:标刻当前数据库里的所有数据。 语 法:int lmc1_Mark(BOOL
bFlyMark); bFlyMark=
TRUE 使能飞动打标 描 述:在使用lmc1_LoadEzdFile载入ezd文件后即可以使用此函数开始打标加工,此函数一直等待设备加工完毕后才返回。 返 回 值:通用错误码
3.开发步骤
下面我们结合一个实例来讲解如何进行二次开发。 客户要求在一个矩形工件中心加工一行文本,每个工件要加工的文本都必须从网络服务器上去在线查询获得。
用户要进行二次开发一般的步骤如下: <!--[if !supportLists]-->1.<!--[endif]-->先用ezcad2建立一个模板文件test.ezd,然后新建一个文本对象,把文本对象命名为”name”。然后调节文本大小,位置和加工参数使加工效果达到客户要求,此时保存文件并退出ezcad2。
<!--[if !supportLists]-->2.<!--[endif]-->编写专用软件调用MarkEzd.dll动态链接库 第一步:.动态加载MarkEzd.dll HINSTANCE hEzdDLL =
LoadLibrary(_T("MarkEzd.dll"));
第二步:.取得将要调用的DLL中函数的指针 lmc1_Initial=(LMC1_INITIAL)GetProcAddress(hEzdDLL,"lmc1_Initial"); lmc1_Close=(LMC1_CLOSE)GetProcAddress(hEzdDLL,"lmc1_Close"); lmc1_LoadEzdFile=(LMC1_LOADEZDFILE)GetProcAddress(hEzdDLL,"lmc1_LoadEzdFile"); lmc1_Mark=(LMC1_MARK)GetProcAddress(hEzdDLL,"lmc1_Mark"); lmc1_ChangeTextByName=(LMC1_CHANGETEXTBYNAME)GetProcAddress(hEzdDLL,"lmc1_ChangeTextByName"); 第三步:用函数指针调用DLL中函数完成相应功能
1)初始化lmc1控制卡 lmc1_Initial() 2)打开test.ezd lmc1_LoadEzdFile(“test.ezd”)。 3)从网络服务器上去在线查询获得要加工的文本 (需要用户自己编写这段程序)
4)更新更改指定名称的文本对象的文本内容 假设上一步取得的文本是“1234567” lmc1_ChangeTextByName(“name”,“ 5)调用lmc1_Mark加工 6)如果还要加工则返回第3步继续。 7)关闭lmc1控制卡 lmc1_Close();
第四步: 调用Windows API函数释放动态链接库。 FreeLibrary(hEzdDLL)
|
-- 作者:有点色 -- 发布时间:2017/2/17 15:00:00 -- 叫对方给你一个C#或者vb.net的实例吧。
|
-- 作者:有点色 -- 发布时间:2017/2/17 15:01:00 -- 动态库的调用,参考
http://www.foxtable.com/webhelp/scr/2417.htm
|
-- 作者:54292550 -- 发布时间:2017/2/17 17:43:00 -- Public Declare Function lmc1_Initial lib "MarkEzd.dll" Alias "lmc1_Initial" (ByVal lj As String,ByVal cs As Integer,ByVal jd As Integer) As Integer \'连接设备 Public Declare Function lmc1_Close lib "MarkEzd.dll" Alias "lmc1_Close" () As Integer \'关闭设备 Public Declare Function lmc1_LoadEzdFile lib "MarkEzd.dll" Alias "lmc1_LoadEzdFile" (ByVal zd As String) As Integer \'指定文件 Public Declare Function lmc1_Mark lib "MarkEzd.dll" Alias "lmc1_Mark" (ByVal bk As Integer) As Integer \'标刻文件 出现这个报错是哪儿的问题? 无法加载 DLL“MarkEzd.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
|
-- 作者:有点色 -- 发布时间:2017/2/17 18:05:00 -- dll文件你拷贝到foxtable的安装文件夹下了吗? |