Foxtable(狐表)用户栏目专家坐堂 → DLL文件加载的问题


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

主题:DLL文件加载的问题

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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
DLL文件加载的问题  发帖心情 Post By:2014/8/17 19:47:00 [只看该作者]

一个DLL文件在VB6,VC, Delphi中均能正常调用,怎么在FT中就不能加载了?

外部引用后

在进行窗口设计时,要调用这个DLL文件时,显示DLL文件错误不能加载。之后关闭,再次打开项目后。

窗口不能进入了设计 了“未将对象引用设置到对象的实例”

只能 退出了,继续则进入 什么模式窗口了,只能强行退出了。

  

 

现在要完成的代码设置为:

 

Private Sub UpdatePortNameList()
  Dim str1 As String
  Dim Buf As String * GCAL_MAX_LEN_OF_PORTNAME_STRING
  Dim lSize As Long
 
  str1 = ComboPortName.Text
  ComboPortName.Clear
  Buf = Space$(GCAL_MAX_LEN_OF_PORTNAME_STRING)
  If GCal_GetFirstPortName(Buf, GCAL_MAX_LEN_OF_PORTNAME_STRING) <> 0 Then
    Do
      lSize = InStr(Buf, vbNullChar)
      If lSize > 0 Then
        ComboPortName.AddItem Left(Buf, lSize)
      End If
      Buf = Space$(GCAL_MAX_LEN_OF_PORTNAME_STRING)
    Loop Until GCal_GetNextPortName(Buf, GCAL_MAX_LEN_OF_PORTNAME_STRING) = 0
  End If
  If "" <> str1 Then
    ComboPortName.Text = str1
  Else
    ComboPortName.ListIndex = 0
  End If
End Sub

Private Sub RestartDevice()
  If 0 <> DeviceID Then
    GCal_CloseDevice (DeviceID)
  End If
  DeviceID = GCal_OpenDevice(ComboPortName.Text, ComboDeviceDescription.Text, Val(ComboBaudRate.Text))
  DeviceChannel = Val(TextChannel.Text)
  If 0 <> DeviceID Then
    GCal_SetChannel DeviceID, DeviceChannel, 1
  End If
End Sub

Private Sub ComboBaudRate_Change()
  RestartDevice
End Sub

Private Sub ComboBaudRate_Click()
  RestartDevice
End Sub

Private Sub ComboDeviceDescription_Change()
  RestartDevice
End Sub

Private Sub ComboDeviceDescription_Click()
  RestartDevice
End Sub

Private Sub ComboPortName_Change()
  RestartDevice
End Sub

Private Sub ComboPortName_Click()
  RestartDevice
End Sub

Private Sub CommandData_Click()
  AddData
End Sub

Private Sub CommandExit_Click()
  Unload Me
End Sub

Private Sub CommandZero_Click()
  If 0 <> DeviceID Then
    GCal_ZeroChannel DeviceID, DeviceChannel
  End If
End Sub

Private Sub Form_Load()
  DeviceID = 0
  DeviceChannel = 0
  GCal_SetCallBackProc AddressOf OnDataProc
  UpdatePortNameList
 
  ComboDeviceDescription.Clear
  ComboDeviceDescription.AddItem "Auto1"
  ComboDeviceDescription.AddItem "Auto1A"
  ComboDeviceDescription.AddItem "Auto64A"
  ComboDeviceDescription.AddItem "Ack64"
  ComboDeviceDescription.AddItem "Ack64A"
 
  ComboBaudRate.Clear
  ComboBaudRate.AddItem "4800"
  ComboBaudRate.AddItem "9600"
 
  RestartDevice
End Sub

Private Sub Form_Unload(Cancel As Integer)
  GCal_CloseAllDevices
End Sub

Private Sub ListData_Click()

End Sub

Private Sub TextChannel_Change()
  Dim ch1 As Long
  ch1 = Val(TextChannel.Text)
  If ch1 <> DeviceChannel Then
    GCal_SetChannel DeviceID, DeviceChannel, 0
    DeviceChannel = ch1
    GCal_SetChannel DeviceID, DeviceChannel, 1
  End If
End Sub

 

 

 

Global DeviceID As Long
Global DeviceChannel As Long

Public Sub AddData()
  With FormMain
    If "" <> .LabelData.Caption Then
      .ListData.AddItem .LabelData.Caption
      .ListData.ListIndex = .ListData.ListCount - 1
    End If
  End With
End Sub

Public Sub OnDataProc(ByVal ID As Long, ByVal Channel As Long, ByVal Value As Long, ByVal KeyPressed As Byte)
  Dim f As Double
  Dim n1 As Long
  Dim fmt As String
 
  If (ID = DeviceID) And (Channel = DeviceChannel) Then
    f = Val(FormMain.TextMultiplier.Text)
    If 0 = f Then
      f = 1
    End If
    f = f * Value / 100
    n1 = Val(FormMain.TextDecimalDigits.Text)
    fmt = IIf(0 = n1, "0", "0." & String(n1, "0"))
    FormMain.LabelData.Caption = Format$(f, fmt)
    If 0 <> KeyPressed Then
      AddData
    End If
  End If
End Sub

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:gcalcommonsharedevice.rar

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:在线检测.foxdb


图片点击可在新窗口打开查看此主题相关图片如下:在线检测.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2014-8-17 21:49:19编辑过]

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


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

 你这个dll不是可托管的dll,也就是可以注册使用的,不能直接在foxtable里面直接引用。

 

 对于那些com的dll,你需要先用vs新建一个项目,添加控件,然后会得到dll,在foxtable里面引用这个dll文件。


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


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

 看了你的例子,你想表达什么啊,什么代码都没有,调用的代码也没有。

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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/8/17 21:10:00 [只看该作者]

DLL引用不了,代码就不能往下写了。这个实例需要从 要引用的GCalCommonShareDevice.dll程序中,接收COM口所取得的数据,真正的代码很简单,直接读取就行。

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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/8/17 21:11:00 [只看该作者]

GCalCommonShareDevice.dll 这个引用不了,甜大师能不能帮转换一下,生成FT可以使用的DLL

 

Public Sub OnDataProc(ByVal ID As Long, ByVal Channel As Long, ByVal Value As Long, ByVal KeyPressed As Byte)
  Dim f As Double
  Dim n1 As Long
  Dim fmt As String
 
  If (ID = DeviceID) And (Channel = DeviceChannel) Then
    f = Val(FormMain.TextMultiplier.Text)
    If 0 = f Then
      f = 1
    End If
    f = f * Value / 100
    n1 = Val(FormMain.TextDecimalDigits.Text)
    fmt = IIf(0 = n1, "0", "0." & String(n1, "0"))
    FormMain.LabelData.Caption = Format$(f, fmt)
    If 0 <> KeyPressed Then
      AddData
    End If
  End If
End Sub

 

 

关键需要读取的数据就是 Value 这个变更的值。

[此贴子已经被作者于2014-8-17 21:13:04编辑过]

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


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

 你这个GCalCommonShareDevice要怎么调用?调用代码是什么?

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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/8/17 21:15:00 [只看该作者]

 

' GCalCommonShareDevice developments software package. '

 ' GCalCommonShareDevice开发软件包 '

 ' GCalCommonShareDevice秨祇硁ン '

 ' Includes:

 '  GCalCommonShareDevice.DLL   User interface DLL

 '  GCalCommonShareDevice.h     Header file for C

 '  GCalCommonShareDevice.lib   lib file for C

 '  GCalCommonShareDevice.pas   Unit file for Delphi

 '  GCalCommonShareDevice.bas   Module file for Visual Basic

 '  Some protocol processing DLLs

 '

'

' 这里的说明使用了英文、简体中文、繁体中文等。

 ' 如果您的系统不支持其中的某种语言,显示可能会是乱码。

 ' 处理数据的回调过程的原型。

 ' 接收到数据时回调过程将被调用。

 ' ID就是OpenDevice时返回的非0值,每个不同的ID代表一个连接到不同端口的设备。

 ' Channel是多通道设备的通道索引号码,使用单通道设备时Channel为0。

 ' Value是该通道的数值

 ' KeyPressed=TRUE则表示按下了采样键

Global Const GCAL_MAX_LEN_OF_PORTNAME_STRING = 80

Global Const GCAL_MAX_LEN_OF_PRODUCTID_STRING = 80

' 设置回调过程的地址。

 ' 在一个程序中只需设置一次就行。

 ' 如果返回FALSE则表示发生了错误。

Public Declare Function GCal_SetCallBackProc Lib "GCalCommonShareDevice" (ByVal CallBackProc As Long) As Byte

' 打开设备。

 ' PortName就是设备所连接的端口名称,比如"COM1"或"USB"。

 ' DeviceDescription可以是产品ID或协议名称,如果是USB口ProtocolName可以为空,这时自动选择连接到USB口的设备。               1

 ' BaudrateValue是波特率值,0表示使用默认值。

 ' 如果成功则返回非0的设备ID,否则返回0。 '

Public Declare Function GCal_OpenDevice Lib "GCalCommonShareDevice" (ByVal PortName As String, ByVal DeviceDescription As String, ByVal BaudrateValue As Long) As Long

 ' 允许或禁止设备通道。

 ' ID就是欲设置的设备ID。

 ' Channel就是欲设置的通道号。

 ' Enabled为TRUE则该通道被允许,否则禁止。

 ' 如果返回FALSE则表示发生了错误。 '

Public Declare Function GCal_SetChannel Lib "GCalCommonShareDevice" (ByVal ID As Long, ByVal Channel As Long, ByVal Enabled As Byte) As Byte

' 清0。

 ' ID就是欲清0的设备ID。

 ' Channel就是欲清0的通道号。

 ' 如果返回FALSE则表示发生了错误。

Public Declare Function GCal_ZeroChannel Lib "GCalCommonShareDevice" (ByVal ID As Long, ByVal Channel As Long) As Byte


' 所有通道清0。

 ' ID就是欲清0的设备ID。

 ' 如果返回FALSE则表示发生了错误。


Public Declare Function GCal_ZeroAllChannels Lib "GCalCommonShareDevice" (ByVal ID As Long) As Byte

' 所有设备的所有通道清0。

 ' 如果返回FALSE则表示发生了错误。

 'Public Declare Function GCal_ZeroAllDeviceChannels Lib "GCalCommonShareDevice" () As Byte

' 关闭设备。

 ' ID就是欲关闭设备ID。

 ' 如果返回FALSE则表示发生了错误。 '

Public Declare Function GCal_CloseDevice Lib "GCalCommonShareDevice" (ByVal ID As Long) As Byte

' 关闭所有打开的设备。

 ' 如果返回FALSE则表示发生了错误。

Public Declare Function GCal_CloseAllDevices Lib "GCalCommonShareDevice" () As Byte

' 设置使用无线连接的起始通道号及无线连接的最大延迟时间。

 ' ID就是欲设置的设备ID。

 ' Channel是使用无线连接的起始通道号。                                                                                    2

 ' Delay是无线连接的最大延迟时间。

 ' 如果返回FALSE则表示发生了错误。

Public Declare Function GCal_SetWirelessChannel Lib "GCalCommonShareDevice" (ByVal ID As Long, ByVal Channel As Long, ByVal Delay As Long) As Byte

' 获取可用的第一个端口名称。

 ' Buf用于保存名称。

 ' BufSize是Buf的大小。

 ' 如果返回FALSE则表示没有端口或发生了错误。


Public Declare Function GCal_GetFirstPortName Lib "GCalCommonShareDevice" (ByVal Buf As String, ByVal BufSize As Long) As Byte

' 获取可用的下一个端口名称。

 ' Buf用于保存名称。

 ' BufSize是Buf的大小。

 ' 如果返回FALSE则表示已经没有下一个端口或发生了错误。

Public Declare Function GCal_GetNextPortName Lib "GCalCommonShareDevice" (ByVal Buf As String, ByVal BufSize As Long) As Byte

' 获取第一个USB设备的产品ID。

 ' Buf用于保存产品ID。

 ' BufSize是Buf的大小。

 ' 如果返回FALSE则表示没有USB设备或发生了错误。

Public Declare Function GCal_GetFirstUsbProductID Lib "GCalCommonShareDevice" (ByVal Buf As String, ByVal BufSize As Long) As Byte

' 获取下一个USB设备的产品ID。

 ' Buf用于保存产品ID。

 ' BufSize是Buf的大小。

 ' 如果返回FALSE则表示已经没有下一个USB设备或发生了错误。

Public Declare Function GCal_GetNextUsbProductID Lib "GCalCommonShareDevice" (ByVal Buf As String, ByVal BufSize As Long) As Byte

                                                                                                                            3


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


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

 不是给你做了一个例子了吗?你先测试这个例子,如果这个例子可以使用,那么你用这个例子改一下vs的代码使用。

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=55154&skin=0

 


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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/8/17 21:50:00 [只看该作者]

测试例子可以打开,但运行时不能取得数据

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


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

以下是引用supwork在2014-8-17 21:50:00的发言:
测试例子可以打开,但运行时不能取得数据

 

如果你的vs例子可以运行取到数据,那么foxtalbe里面的运行应该是能够取到数据的。打开的那个窗口,设置好以后,就应该能读取到数据的。


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