我编写的代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Code01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
///函数名:lmcl_Initial
///目的:初始化lmcl控制卡
///语法int lmcl_Intitial(TCHAR* strEzCadPath,BOOL bTestMode,HWND hOwenWnd);
///strEzCadPath:是ezcad.exe所在的目录的全路径名称
///bTestMode:指是否测试模式
///hOwenWnd:指用户输入焦点的窗口,用于检测用户暂停消息
///描述:在程序中必须首先调用lmc_Initial,其他函数才能工作
///返回值:通用错误代码
[DllImport("MarkEzd.dll",EntryPoint="lmcl_Initial",CharSet=CharSet.Auto,CallingConvention =CallingConvention.StdCall)]
public static extern int lmcl_Initial(ref string strEzCadPath,bool bTestMode,string hOwenWnd);
///函数名:lmcl_Close
///目的:关闭lmcl控制卡
///语法:int lmcl_Close();
///描述:在程序中退出时必须调用lmcl_Close来关闭lmcl控制卡
///返回值:通用错误代码
[DllImport("MarkEzd.dll", EntryPoint = "lmcl_Close", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int lmcl_Close();
///函数名:lmcl_LoadEzdFile
///目的:打开指定的ezd文件,并清除当前数据库中的所有对象
///语法int lmcl_LoadEzdFile(TCHAR* strFileName);
///描述:在程序中一般用此函数来打开一个用户建立ezd模板文件,这样用户就不需要在程序中设置加工参数,因为模板中的加工参数会自动导入
///返回值:通用错误代码
[DllImport("MarkEzd.dll", EntryPoint = "lmcl_LoadEzdFile", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int lmcl_LoadEzdFile(ref string strFileName);
///函数名:lmcl_Mark
///目的:标刻当前数据库里的所有数据
///语法:int lmcl_Mark(BOOL bFlyMark);
///bFlyMark=True 使能飞动打标
///描述:在使用lmcl_LoadEzdFile载入ezd文件后即可以使用此函数开始打标加工,此函数一直等待设备加工完毕后才返回
///返回值:通用错误代码
[DllImport("MarkEzd.dll", EntryPoint = "lmcl_Mark", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int lmcl_Mark(bool bFlyMark);
///函数名:lmcl_ChangeTextByName
///目的:更改指定名称的文本对象的文本内容
///语法:int lmcl_ChangeTextByName(tchar* strTextName,TCHAR* strTextNew);
///strTextName:要更改内容的文本对象的名称
///strTextNew:新的文本内容
///描述:在使用lmcl_LoadEzdFile载入ezd文件后,在每次加工前即可以使用此函数更改指定对象的内容
///返回值:通用错误代码
[DllImport("MarkEzd.dll", EntryPoint = "lmcl_ChangeTextByName", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int lmcl_ChangeTextByName(ref string strTextName, ref string strTextNew);
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = "";//清空文本框
}
private void button1_Click(object sender, EventArgs e)
{
int dwErrCde;//初始化成功或错误
string _strEzCadPath="C:\\EzCad2.1.3_UNICODE(20090912)\\EzCad2.exe";//存储ezcad.exe所在的目录的全路径名称
bool _bTestMode=false ;//是否为测试模式
string _hOwenWnd="";//用户输入焦点的窗口,用于检测用户暂停消息
string _strFileName = "27701202";//指定的ezd模板文件
bool _bFlyMark = true;//使能飞动打标
string _strTextName = "2770120";//要更改内容的文本对象的名称
string _strTextNew = "ABCDE02123456789";//新的文本内容
dwErrCde = lmcl_Initial(ref _strEzCadPath, _bTestMode, _hOwenWnd);//设备初始化
if (dwErrCde == 0)
{
lmcl_LoadEzdFile(ref _strFileName);//加载打印模板
lmcl_ChangeTextByName(ref _strTextName, ref _strTextNew);//填充模板的文本内容
lmcl_Mark(_bFlyMark);//使能飞动打标
}
lmcl_Close();
}
}
}
调试时,语句“ dwErrCde = lmcl_Initial(ref _strEzCadPath, _bTestMode, _hOwenWnd);”报错,报错信息为“无法加载 DLL“MarkEzd.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”。
我怀疑是"_hOwenWnd"赋值有误,可惜不知道此处该使用何种方式。文中可能还有其他错误,请大家帮忙。
10 个解决方案
#1
无法加载时找不到,MarkEzd.dll这个dll 或者与这个dll关联的其他文件。
#2
确定只有这一个库么?是不是还有一个辅助库?
无法加载就是找不到无法识别
无法加载就是找不到无法识别
#3
只有这一个库,不涉及到其它的。。。
我是c#新手,刚自学了2个月的时间。
这个程序段的主要设计思路是:
通过C# 动态连接c++函数库,实现打标机的初始化、设定打标内容、打标、关闭打标机这一系列动作。
我总感觉是赋值的格式与内容不正确,仔细琢磨了三天,还是发现不了问题,很苦恼。
我是c#新手,刚自学了2个月的时间。
这个程序段的主要设计思路是:
通过C# 动态连接c++函数库,实现打标机的初始化、设定打标内容、打标、关闭打标机这一系列动作。
我总感觉是赋值的格式与内容不正确,仔细琢磨了三天,还是发现不了问题,很苦恼。
#4
把项目的输出目录定位到ezcad目录下,因为MarkEzd.dll还引用了其他的dll
#5
楼上正解,或者把EzCard目录下的文件拷贝到项目所在目录下即可。
不知道拷哪个干脆全部拷过去,把你认识没用的删掉就行了。
#6
楼主可以qq交流么,549086692.
#7
64位还是32位?
#8
用depends看下该dll用到其他哪些dll.
#9
你好,看到你也搞金橙子二次开发,我现在遇到的问题是初始化函数调用会报参数类型错误,请问会是哪里出了问题,我的QQ 2170913,可以请教一下吗?谢谢。
#10
[DllImport("MarkEzd.dll")]
public static extern int lmcl_Initial(string strEzCadPath,bool bTestMode,int hOwenWnd);
public static extern int lmcl_Initial(string strEzCadPath,bool bTestMode,int hOwenWnd);
#1
无法加载时找不到,MarkEzd.dll这个dll 或者与这个dll关联的其他文件。
#2
确定只有这一个库么?是不是还有一个辅助库?
无法加载就是找不到无法识别
无法加载就是找不到无法识别
#3
只有这一个库,不涉及到其它的。。。
我是c#新手,刚自学了2个月的时间。
这个程序段的主要设计思路是:
通过C# 动态连接c++函数库,实现打标机的初始化、设定打标内容、打标、关闭打标机这一系列动作。
我总感觉是赋值的格式与内容不正确,仔细琢磨了三天,还是发现不了问题,很苦恼。
我是c#新手,刚自学了2个月的时间。
这个程序段的主要设计思路是:
通过C# 动态连接c++函数库,实现打标机的初始化、设定打标内容、打标、关闭打标机这一系列动作。
我总感觉是赋值的格式与内容不正确,仔细琢磨了三天,还是发现不了问题,很苦恼。
#4
把项目的输出目录定位到ezcad目录下,因为MarkEzd.dll还引用了其他的dll
#5
楼上正解,或者把EzCard目录下的文件拷贝到项目所在目录下即可。
不知道拷哪个干脆全部拷过去,把你认识没用的删掉就行了。
#6
楼主可以qq交流么,549086692.
#7
64位还是32位?
#8
用depends看下该dll用到其他哪些dll.
#9
你好,看到你也搞金橙子二次开发,我现在遇到的问题是初始化函数调用会报参数类型错误,请问会是哪里出了问题,我的QQ 2170913,可以请教一下吗?谢谢。
#10
[DllImport("MarkEzd.dll")]
public static extern int lmcl_Initial(string strEzCadPath,bool bTestMode,int hOwenWnd);
public static extern int lmcl_Initial(string strEzCadPath,bool bTestMode,int hOwenWnd);