以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  怎样声明dll中的类  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=62153)

--  作者:东坡一剑
--  发布时间:2014/12/26 11:50:00
--  怎样声明dll中的类
别的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



--  作者:有点甜
--  发布时间: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)))



--  作者:东坡一剑
--  发布时间:2014/12/26 12:54:00
--  
感谢甜老师!

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

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




--  作者:有点甜
--  发布时间:2014/12/26 14:09:00
--  

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


--  作者:东坡一剑
--  发布时间:2014/12/26 14:53:00
--  
非常感谢!最近就想把foxtable和vs结合起来用。狐表这一部分的帮助写得真不怎么样。
还想问一下关于声明API函数的问题,是否有什么比较合适的例子?


--  作者:有点甜
--  发布时间: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
\'关闭设备