Foxtable(狐表)用户栏目专家坐堂 → [求助]调用第三方DLL,foxtable直接关闭退出?


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

主题:[求助]调用第三方DLL,foxtable直接关闭退出?

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


加好友 发短信
等级:幼狐 帖子:92 积分:839 威望:0 精华:0 注册:2016/1/27 15:09:00
[求助]调用第三方DLL,foxtable直接关闭退出?  发帖心情 Post By:2017/12/5 11:38:00 [只看该作者]

我连接一台DOBOT机器臂,使用它们的DLL,在VS2015中,把项目属性改为.net 2.0,目标CPU设置为X86后,可以正常连接调用。
但是把这几个DLL拷贝到foxtable安装目录下,然后全局代码中使用<DllImport>引用API函数,在代码中直接调用这些函数时,foxtable没报任何错,直接关闭退出

在vs2015中

DobotDll.vb :

Imports System.Runtime.InteropServices

Namespace VBdemo
    Public Class DobotDll
        <DllImport("DobotDll.dll", CallingConvention:=CallingConvention.Cdecl)> Public Shared Function ConnectDobot(ByVal portName As String, ByVal baudrate As Int32) As Int32
        End Function
    End Class

End Namespace

Form1.vb :

Imports test01.VBdemo
Public Class Form1

    Dim result As Integer
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        result = DobotDll.ConnectDobot("", 115200)
        If result <> 0 Then
            MsgBox("Could not find Dobot or Dobot is occupied!")
            Return
        Else
            MsgBox("连接成功!")
        End If
    End Sub
End Class


在foxtable中, 

图片点击可在新窗口打开查看此主题相关图片如下:image 1.jpg
图片点击可在新窗口打开查看

然后,直接MessageBox.Show(ConnectDobot("", 115200))

foxtable不报错,直接关闭退出

[此贴子已经被作者于2017/12/5 11:39:02编辑过]

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


加好友 发短信
等级:幼狐 帖子:92 积分:839 威望:0 精华:0 注册:2016/1/27 15:09:00
  发帖心情 Post By:2017/12/5 11:43:00 [只看该作者]

vs中的<DllImport>用的Public Shared Function,foxtable的全局代码中不能使用Shared 

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/12/5 11:47:00 [只看该作者]

全局代码

 

Public Class DobotDll

        <DllImport("DobotDll.dll", CallingConvention:=CallingConvention.Cdecl)> Public Shared Function ConnectDobot(ByVal portName As String, ByVal baudrate As Int32) As Int32
        End Function
End Class
 
调用代码
 
DobotDll.ConnectDobot("", 115200)

 

 


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


加好友 发短信
等级:幼狐 帖子:92 积分:839 威望:0 精华:0 注册:2016/1/27 15:09:00
  发帖心情 Post By:2017/12/5 11:48:00 [只看该作者]

这是VS中使用的DLL文件,我直接拷贝到了foxtable的安装目录下

图片点击可在新窗口打开查看此主题相关图片如下:image 2.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/12/5 11:54:00 [只看该作者]

1、参考3楼代码;

 

2、你foxtable设置成 管理员身份 运行。


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


加好友 发短信
等级:幼狐 帖子:92 积分:839 威望:0 精华:0 注册:2016/1/27 15:09:00
  发帖心情 Post By:2017/12/5 14:06:00 [只看该作者]

foxtable还是一样的关闭退出,没有任何异常跳出。

它这个DLL,在VS中使用的时候,必须把项目属性设置为.NET 3.5 以下,并且目标CPU设置必须是X86,不然就会报错,会不会和这个有关系,导致foxtable使用的时候关闭退出??

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


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

目标cpu设置成 any 行不行?foxtable本身就是设置成 any 的。

 

或者是,你这个vs项目,转成类库,生成dll以后,直接在foxtable里面引用dll文件 http://www.foxtable.com/webhelp/scr/1936.htm

 


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


加好友 发短信
等级:幼狐 帖子:92 积分:839 威望:0 精华:0 注册:2016/1/27 15:09:00
  发帖心情 Post By:2017/12/5 15:36:00 [只看该作者]

目标cpu设置成 any 不行,我试过了,只能X86。请问,foxtable有修改这个项目参数的方法吗?

如果把我这个vs项目生成托管DLL,那生成的这个DLL它内部调用的非托管DLL怎么解决呢?难道说那些第三方的非托管DLL可以重新封装打包成一个单独的新的DLL文件吗???

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


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

1、无法修改foxtable的项目参数;

 

2、vs项目改成类库,然后生成一个dll,在foxtable里面,引用这个dll,然后调出dll里面的窗口、执行代码,看行不行。如果不行就没办法了。

[此贴子已经被作者于2017/12/5 15:46:40编辑过]

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


加好友 发短信
等级:幼狐 帖子:92 积分:839 威望:0 精华:0 注册:2016/1/27 15:09:00
  发帖心情 Post By:2017/12/7 15:30:00 [只看该作者]

百度了很久,似乎是因为,我电脑装的是64位的Windows系统,而foxtable默认是anyCPU,而要调用的第三方DLL是32位的。

foxtable编译代码的时候根据当前操作系统选择64位的方式,而按照微软的说法,在64位的Windows系统中,一个64位进程不能加载一个32位dll的。

不知道,狐表在之前有没有碰到过类似的问题,需要64位的进程调用32位的DLL?

如果foxtable无法像VS那样可以自己设置目标CPU,而只能使用anyCPU方式,那是不是,我把foxtable开发出来的软件(其内部调用了32位的DLL),安装到64位的Windows操作系统里,就必定会出错?

如果是这样的话,有没有什么方法或工具,可以让foxtable开发出来的软件强制以32位的方式运行?vs中好像有个CorFlags工具

 回到顶部
总数 11 1 2 下一页