Foxtable(狐表)用户栏目专家坐堂 → 怎样声明dll中的类


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

主题:怎样声明dll中的类

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


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
怎样声明dll中的类  发帖心情 Post By:2014/12/26 11:50:00 [只看该作者]

别的dll文件中有一个类,源代码如下:

Public Class person
    Public ID As String
    Public name As String
    Public sex As String
    Public birthday As Date

    Public Function getName(ByVal per As person) As String
        Return Me.name
    End Function

    Public Sub New(ByVal xID As String, ByVal xName As String, ByVal xSex As String, ByVal xBirthday As String)
        Me.ID = xID
        Me.name = xName
        Me.sex = xSex
        Me.birthday = xBirthday
    End Sub
End Class

在全局代码中这样声明:
<DLLImport("classlibrary1.dll",CharSet:=CharSet.Ansi,CallingConvention:=CallingConvention.Cdecl)> _
Public Function getName(ByVal per As person) As String
End function

窗口中按钮click代码如下:
Dim you As person
you = new person("100","老张","男",#5/17/1990#)
messagebox.show((you.getName(you)))

问题是:
1、如果直接将以上dll的源代码放进全局代码,命令窗口的代码可以成功运行。
2、如果以引用dll的方式编译全局代码会失败,提示为:未定义类型 person
请教:该如何以dll引用的方式来实现?

附上项目

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



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


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

 1、你的dll有问题

 

 

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

 

 2、引用后,代码这样写

 

Dim you As classlibrary1.person
you = new classlibrary1.person("100","老张","男",#5/17/1990#)
messagebox.show((you.getName(you)))



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


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2014/12/26 12:54:00 [只看该作者]

感谢甜老师!

就是说不用在全局代码中写任何东西都可以成功。
我编译dll的运行时比较新,所以foxtable无法加载。你用的什么版本编译的呢?VC6.0行不行?

未能加载文件或程序集“ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集。




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


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

 就是用VS编译的啊,新建项目的时候,.net Framework要设置成2.0


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


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2014/12/26 14:53:00 [只看该作者]

非常感谢!最近就想把foxtable和vs结合起来用。狐表这一部分的帮助写得真不怎么样。
还想问一下关于声明API函数的问题,是否有什么比较合适的例子?


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


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

  声明就这样声明,类似

 

 

在Foxtable的全局代码中定义好API函数:

 

Public Declare Function CVR_InitComm Lib "termb.dll" Alias "CVR_InitComm" (ByVal Port As Integer) As Integer '连接设备
Public Declare Function
CVR_Authenticate Lib "termb.dll" Alias "CVR_Authenticate" () As Integer '验证身份证
Public Declare Function
CVR_Read_Content Lib "termb.dll" Alias "CVR_Read_Content" (ByVal Active As Integer) As Integer '读取身份证信息
Public Declare Function
CVR_CloseComm Lib "termb.dll" Alias "CVR_CloseComm" () As Integer
'关闭设备


 回到顶部