以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]调用第三方DLL,foxtable直接关闭退出? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=110549) |
-- 作者:noway143 -- 发布时间:2017/12/5 11:38:00 -- [求助]调用第三方DLL,foxtable直接关闭退出? 我连接一台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中, 然后,直接MessageBox.Show(ConnectDobot("", 115200)) foxtable不报错,直接关闭退出 [此贴子已经被作者于2017/12/5 11:39:02编辑过]
|
-- 作者:noway143 -- 发布时间:2017/12/5 11:43:00 -- vs中的<DllImport>用的Public Shared Function,foxtable的全局代码中不能使用Shared |
-- 作者:有点色 -- 发布时间: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 -- 发布时间:2017/12/5 11:48:00 -- 这是VS中使用的DLL文件,我直接拷贝到了foxtable的安装目录下 ![]() ![]() |
-- 作者:有点色 -- 发布时间:2017/12/5 11:54:00 -- 1、参考3楼代码;
2、你foxtable设置成 管理员身份 运行。 |
-- 作者:noway143 -- 发布时间:2017/12/5 14:06:00 -- foxtable还是一样的关闭退出,没有任何异常跳出。 它这个DLL,在VS中使用的时候,必须把项目属性设置为.NET 3.5 以下,并且目标CPU设置必须是X86,不然就会报错,会不会和这个有关系,导致foxtable使用的时候关闭退出??
|
-- 作者:有点甜 -- 发布时间:2017/12/5 15:22:00 -- 目标cpu设置成 any 行不行?foxtable本身就是设置成 any 的。
或者是,你这个vs项目,转成类库,生成dll以后,直接在foxtable里面引用dll文件 http://www.foxtable.com/webhelp/scr/1936.htm
|
-- 作者:noway143 -- 发布时间:2017/12/5 15:36:00 -- 目标cpu设置成 any 不行,我试过了,只能X86。请问,foxtable有修改这个项目参数的方法吗? 如果把我这个vs项目生成托管DLL,那生成的这个DLL它内部调用的非托管DLL怎么解决呢?难道说那些第三方的非托管DLL可以重新封装打包成一个单独的新的DLL文件吗???
|
-- 作者:有点甜 -- 发布时间:2017/12/5 15:46:00 -- 1、无法修改foxtable的项目参数;
2、vs项目改成类库,然后生成一个dll,在foxtable里面,引用这个dll,然后调出dll里面的窗口、执行代码,看行不行。如果不行就没办法了。 [此贴子已经被作者于2017/12/5 15:46:40编辑过]
|
-- 作者:noway143 -- 发布时间: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工具
|