以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]关于第三方DLL引入并使用的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=117323) |
-- 作者:xndd -- 发布时间:2018/4/10 17:26:00 -- [求助]关于第三方DLL引入并使用的问题 老师好! 我这边有个dll,是第三方的dll,案例有vb的,也有c#的。我把vb的或者c#的dll文件复制到foxtable目录下,然后在foxtable的外部引用中添加进引用选项卡中,然后应该怎么做?
全局代码中参考帮助定义: 以下内容为程序代码: 1 [DllImport("NT77.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] 2 Public static extern int NTFindFirst(String appID); 3 Declare Function NTFindFirst Lib "NT77.dll" (ByVal NTCode As String) As Long 直接报错,提示编译错误,无法加载引用的库:xxx 试图加载格式不正确的程序
是dll的问题?vb程序和c#程序引用都正常。请指教谢谢。
|
-- 作者:有点甜 -- 发布时间:2018/4/10 17:28:00 -- 你在C#程序里面,是如何引用和使用的?说明步骤和贴出所写的代码。 |
-- 作者:xndd -- 发布时间:2018/4/11 8:38:00 -- [求助]关于第三方DLL引入并使用的问题 首先,引用该dll,然后调用api,如下: 加密锁API 函数调用流程 第一步:通过加密锁识别码找到机器上连接的加密锁,调用方法为: NTFindFirst 第二步:通过NTpassword (加密锁登录密码)登录指定加密锁识别码的加密锁,调用方法为:NTLogin 第三步:加密锁登录后,即可进行如下操作: ?? 读写掉存储区数据调用方法为:NTWrite, NTRead 第四步:完成所有加密锁操作后加密锁登出(NTLogout). 在以上的操作过程中,调用失败时可以使用Rtn返回值来得到出错的原因。 |
-- 作者:xndd -- 发布时间:2018/4/11 8:39:00 -- [求助]关于第三方DLL引入并使用的问题 有时候发代码总是不成功 以下内容为程序代码: 1 int Rtn = 1;//Rtn函数方法调用后接收返回值,如果出现错误则返回值为错误码 2 String sStr = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";//赋值字符串 3 4 private void btnFindFirst_Click(object sender, EventArgs e) 5 { 6 String NTCode = this.textNTCode.Text;//获取到加密锁识别码 7 8 Rtn = NT77.NT77.NTFindFirst(NTCode);//查找指定加密锁识别码的加密锁,如果返回值为 0,表示加密锁存在。 9 //如果返回值不为0,则可以通过返回值Rtn查看错误代码 10 if (Rtn != 0) 11 { 12 this.listBox1.Items.Add("加密锁错误码为:" + Rtn.ToString()); 13 } 14 else 15 { 16 this.listBox1.Items.Add("查询到加密锁"); 17 } 18 } 19 20 private void btnNTGetHardwareID_Click(object sender, EventArgs e) 21 { 22 StringBuilder HardwareID = new StringBuilder(32);// 硬件序列号 23 24 Rtn = NT77.NT77.NTGetHardwareID(HardwareID);//获取硬件序列号,如果返回值为 0,表示获取硬件序列号成功。 25 //如果返回值不为0,则可以通过返回值Rtn查看错误代码 26 if (Rtn != 0) 27 { 28 this.listBox1.Items.Add("获取硬件序列号失败 错误码:" + Rtn.ToString()); 29 } 30 else 31 { 32 this.listBox1.Items.Add("获取硬件序列号成功" + HardwareID.ToString()); 33 this.textID.Text = HardwareID.ToString(); 34 } 35 } |
-- 作者:xndd -- 发布时间:2018/4/11 8:39:00 -- private void btnNTLogin_Click(object sender, EventArgs e) { String NTpassword = this.textNTpassword.Text;// 登录密码 Rtn = NT77.NT77.NTLogin(NTpassword); //登录加密锁,如果返回值为 0,表示加密锁登录成功。 //如果返回值不为0,则可以通过返回值Rtn查看错误代码 if (Rtn != 0) { this.listBox1.Items.Add("登录加密锁失败,错误码为:" + Rtn.ToString()); } else { this.listBox1.Items.Add("登录加密锁成功"); } } private void btnNTWrite_Click(object sender, EventArgs e) { int address = 0; //加密锁读取数据的起始位置,可以自定义加密锁读取数据的起始位置,最大为1024 int Length = 64; //加密锁读取数据的长度,可以自定义加密锁读取数据的长度,最大为1024 byte[] pBuffer = new byte[64]; pBuffer = Encoding.GetEncoding("gb2312").GetBytes(sStr); Rtn = NT77.NT77.NTWrite(address, Length, pBuffer);//存储区数据写入,如果返回值为 0,表示数据写入成功。 //如果返回值不为0,则可以通过返回值Rtn查看错误代码 if (Rtn != 0) { this.listBox1.Items.Add("写入数据失败,错误码:" + Rtn.ToString()); } else { this.listBox1.Items.Add("写入数据成功写入数据为:" + System.Text.Encoding.Default.GetString(pBuffer)); } } private void btnNTRead_Click(object sender, EventArgs e) { int address = 0; //加密锁读取数据的起始位置,可以自定义加密锁读取数据的起始位置,最大为1024 int Length = 64;//加密锁读取数据的长度,可以自定义加密锁读取数据的长度,最大为1024 byte[] pBuffer = new byte[64];//存储区数据读取,如果返回值为 0,表示数据写入成功。 //如果返回值不为0,则可以通过返回值Rtn查看错误代码 Rtn = NT77.NT77.NTRead(address, Length, pBuffer); if (Rtn != 0) { this.listBox1.Items.Add("读取数据失败,错误码:" + Rtn.ToString()); } else { this.listBox1.Items.Add("读取数据成功数据为:" + System.Text.Encoding.Default.GetString(pBuffer)); } } private void btnNTLogout_Click(object sender, EventArgs e) { Rtn = NT77.NT77.NTLogout(); this.listBox1.Items.Add("登出加密锁成功");//加密锁登出,与NTFindFirst成对使用 } }
|
-- 作者:xndd -- 发布时间:2018/4/11 9:26:00 -- 我用的是win10,我发现无法 regsvr32 nt77.dll 这个dll,用管理员权限也不行,这? |
-- 作者:xndd -- 发布时间:2018/4/11 9:30:00 -- 哦 我这是非托管的DLL,只能用 [DllImport("NT77.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int NTFindFirst(string NTCode); 这样引用对吧,但是在代码那边无法加载啊,会报错。 |
-- 作者:有点蓝 -- 发布时间:2018/4/11 10:00:00 -- 把NT77.dll复制到狐表安装目录 |
-- 作者:有点甜 -- 发布时间:2018/4/11 10:44:00 -- 看你C#的代码,没有必要声明函数调用的。
你编译一下你的c#项目看debug里面生成什么dll文件,你在foxtable那里也引用对应的dll,即可。
然后照抄c#的代码过来,转换成vb.net代码,参考 http://converter.telerik.com/
|
-- 作者:xndd -- 发布时间:2018/4/11 13:20:00 -- 谢谢!现在可以引用了,只是加密锁报错误码, 我问问厂商。谢谢。
|