标题:想同时封装成以下2代码成DLL文件,但编译时就出错,生成不了DLL文件,想让高手 ...
取消只看楼主
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
结帖率:51.67%
 问题点数:0 回复次数:6 
想同时封装成以下2代码成DLL文件,但编译时就出错,生成不了DLL文件,想让高手帮忙我错在哪里
我在ActiveX DLL中想将下列代码封装成以下DLL: 但不成功,请高手帮忙解决一下:谢谢!!
新建一个类模块,bhsq1.cls

bhsq是类名,类的工程名  bhsq1:   
Public Function sl(ByVal sql As String) As ADODB.Recordset
Dim mycon As ADODB.Connection
Dim rst As ADODB.Recordset
Set mycon = New ADODB.Connection
mycon.ConnectionString = "rovider=sqloledb;server=.;Database=sxcpmc;Uid=sawd=;"
mycon.Open
Dim stokens() As String
  Set rst = New ADODB.Recordset
  rst.Open Trim(sql), mycon, adOpenKeyset, adLockOptimistic
Set sl = rst
End Function

单独封装上面的代码,能在程序使用
   Dim bhs As New bhsq '用里面的类名,而不是用类的工程名
        Set mrc1 = bhs.sl(Trim(txtsql))
        Set bhs = Nothing                                      '能正常编译和使用'

-----------------------------
但是,再在以上的代码基础上再想封装以下代码就报错了(我把两代码放在同一个类模块中,也再无其他模块了..).
编译时就有错误提示:提示private 对象模块不能作为参数/公共过程的返回类型,公共数据成员或公共用户定义类型字段在公共的对象中使用 ,生成不了DLL

Public Sub gongdandata(ByVal MSF1 As MSFlexGrid)   '预览生产单gongdan窗体时用到
Dim i As Integer
Dim mrc1 As ADODB.Recordset

  Set mrc1 = sl(Trim(txtsql))
  If mrc1.EOF = False Then
   mrc1.MoveFirst
   MSF1.RowHeightMin = 410
    MSF1.CellAlignment = 0
   With MSF1
    .Rows = 1
    Do While Not mrc1.EOF
     .Rows = .Rows + 1
     For i = 1 To mrc1.Fields.Count
         .TextMatrix(.Rows - 1, i - 1) = FormatNumber(mrc1.Fields(i - 1), 3, -1)
     Next i
     mrc1.MoveNext
    Loop
    mrc1.Close
  End With
End If
End Sub
请高手帮忙解答一下,我错在哪里了????
搜索更多相关主题的帖子: 新建 server 工程 sql 
2012-01-06 21:08
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
得分:0 
为什么没有人来回答我这个问题呢?

是不是理解为以对象作为参数的???

2012-01-08 18:27
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
得分:0 
为什么没有人来回答我这个问题呢?

期待......
2012-01-12 14:41
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
得分:0 
为什么没有人来回答我这个问题呢?
  这个问题都有一年未解决了.....???

期待......
2012-02-07 15:00
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
得分:0 
   试了:
1、把定义,从传值(ByVal)改为 传地址(ByRef)。  
    错误提示一样, 提示private 对象模块不能作为参数/公共过程的返回类型,公共数据成员或公共用户定义类型字段在公共的对象中使用.

2、在类里定义一个 对象 MSF1为 公用对象,调用这个过程前,把这个 MSF1 对象先赋值进去,然后再去调用这个过程。
  过程中,直接使用这个对象,而不再传参数进去。
如何赋值.能否再指点一下.我不明白?我的代码在上面,帮忙修改 如何赋值??

  还有我试了一下:将
    Public Sub gongdandata(ByVal MSF1 As MSFlexGrid)   '预览生产单gongdan窗体时用到
  改为:
   private Sub gongdandata(ByVal MSF1 As MSFlexGrid)   '预览生产单gongdan窗体时用到

    能编译,编译后只能访问到Public 的过程或函数, 不能访问到这里面的私有过程或函数
    如何去访问到这里面的私有过程(就不是知道怎么去传递这个对象的地址)???


2012-02-08 10:27
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
得分:0 
如何定义公用属性???
以下是引用bczgvip在2012-2-8 10:37:51的发言:

那就定义个公用属性吧!
如何定义公用属性??? 请指点,用了public 的话会提示我第1个帖的那个错误 ....
2012-02-08 20:20
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
得分:0 
回复 9楼 lowxiong
没有完全看懂....如何那个.OCX 文件,我找不到去引用/.....
2012-02-14 20:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-359280-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.740439 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved