Foxtable(狐表)用户栏目专家坐堂 → [求助]关于第三方DLL引入并使用的问题


  共有3380人关注过本帖树形打印复制链接

主题:[求助]关于第三方DLL引入并使用的问题

帅哥哟,离线,有人找我吗?
xndd
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:537 积分:4471 威望:0 精华:0 注册:2014/11/26 15:23:00
[求助]关于第三方DLL引入并使用的问题  发帖心情 Post By:2018/4/10 17:26:00 [只看该作者]

老师好!

        我这边有个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#程序引用都正常。请指教谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/4/10 17:28:00 [只看该作者]

你在C#程序里面,是如何引用和使用的?说明步骤和贴出所写的代码。

 回到顶部
帅哥哟,离线,有人找我吗?
xndd
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:537 积分:4471 威望:0 精华:0 注册:2014/11/26 15:23:00
[求助]关于第三方DLL引入并使用的问题  发帖心情 Post By:2018/4/11 8:38:00 [只看该作者]

  首先,引用该dll,然后调用api,如下:
            加密锁API 函数调用流程

    第一步:通过加密锁识别码找到机器上连接的加密锁,调用方法为: NTFindFirst
     第二步:通过NTpassword (加密锁登录密码)登录指定加密锁识别码的加密锁,调用方法为:NTLogin
     第三步:加密锁登录后,即可进行如下操作:
??                      读写掉存储区数据调用方法为:NTWrite, NTRead
     第四步:完成所有加密锁操作后加密锁登出(NTLogout).
             在以上的操作过程中,调用失败时可以使用Rtn返回值来得到出错的原因。 
   


 回到顶部
帅哥哟,离线,有人找我吗?
xndd
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:537 积分:4471 威望:0 精华:0 注册:2014/11/26 15:23:00
[求助]关于第三方DLL引入并使用的问题  发帖心情 Post By:2018/4/11 8:39:00 [只看该作者]

有时候发代码总是不成功

以下内容为程序代码:

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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:537 积分:4471 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:537 积分:4471 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By:2018/4/11 9:26:00 [只看该作者]

我用的是win10,我发现无法 regsvr32 nt77.dll 这个dll,用管理员权限也不行,这?

 回到顶部
帅哥哟,离线,有人找我吗?
xndd
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:537 积分:4471 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By:2018/4/11 9:30:00 [只看该作者]

哦 我这是非托管的DLL,只能用

[DllImport("NT77.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
        public static extern int NTFindFirst(string NTCode);

这样引用对吧,但是在代码那边无法加载啊,会报错。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112419 积分:572369 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/4/11 10:00:00 [只看该作者]

NT77.dll复制到狐表安装目录

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/4/11 10:44:00 [只看该作者]

看你C#的代码,没有必要声明函数调用的。

 

你编译一下你的c#项目看debug里面生成什么dll文件,你在foxtable那里也引用对应的dll,即可。

 

然后照抄c#的代码过来,转换成vb.net代码,参考 http://converter.telerik.com/

 


 回到顶部
帅哥哟,离线,有人找我吗?
xndd
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:537 积分:4471 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By:2018/4/11 13:20:00 [只看该作者]


    谢谢!现在可以引用了,只是加密锁报错误码, 我问问厂商。谢谢。

 回到顶部