小弟目前做一个东东,要自己用VB 6 开发DLL;可是问题如下:
1、Module 中的方法与变量无法被其他项目引用参考(VB 6 IDE中F2中没有这些Module出现, 在Global中没有Module的这些变量,
所以这些Module中的变量只能在自己的DLL工程中引用。
2 若把 Module 中的 属性,方法迁移到Class中,并把Class的instancing 属性设置为: GlobalMultiUse,则与上相反:只能在其他工程中引用,而无法在该DLL工程中直接引用(不进行Class实例化而直接使用其成员)请大侠指点一二!

解决方案 »

  1.   

    'Module
    Public g_Name as string'GlobalMultiUse Class
    Public Property Get Name() as string
        Name = g_Name
    end property
    Public Property Let Name(byval RHS as string)
        g_Name = RHS
    end property
      

  2.   

    谢谢 Tiger_Zhao 的回答,但是仍有疑问:1. 假若 g_name 是一个Object,在get它时有N多逻辑在里面,而 Module 中的 g_name 仅仅是个声明,没有逻辑!难道把 Module 中的 g_name 也作为一个 property 定义并加入逻辑?然后再在 Class 中 再次声明为仅一条语句的 set get 方法?,可是这样觉得语句过于繁琐!2. 在 VB 6 IDE中 F2 后能看到其他的类库 如 Excel 的类库中的 VBA.Constants 就是一个Module(图标),但是对其他工程,如我的DLL工程就可见,我如何做到这种效果,?使得别人的工程可以直接看到我的DLL的Module????3. 如果把Class的instancing 属性设置为: GlobalMultiUse, 按理说所有的调用都是一个该Class的实例,但是对于 这样的属性
    public static property get oMyObject() as MyObject  ' 假如这个类为 MyClass
        dim value as New MyObject
        set oMyObject = value
    end property
    其他工程 创建 MyClass或再获取 MyObject属性 与 在我的DLL工程new MyClass 后获取的MyObject 是否是同一个引用?是的话我就可以按 最开始提问中的第二种方式使用了,若不是就麻烦了。能否再度释疑?
      

  3.   

    1)应该这样做,不算繁琐。
    Module 中的 Property 是具体实现,Class 的中 Property 只是为了外部的调用而进行的封装。
    封装通常就是这种一条语句进行调用传递,很公式化的做法。2)这是在 tlb 中定义的 Module,与 VB 的 Module 不是同一个。3)每个 MyClass 实例的 Static 变量是独立的,要全局共享实例就用模块的全局变量
    'Module
    Public g_MyObject as MyObject'GlobalMultiUse Class
    Public Property Get oMyObject() as MyObject
        If g_MyObject Is Nothing Then
            Set g_MyObject = New MyObject
        End If
        Set oMyObject = g_MyObject
    end property
      

  4.   

    どもありがとう~恩, 第三种方式在跟帖后也测试了,确实不行!呵呵,正采用此方法修改中,做的东东是给上面头头们用的,现在Excel的VBA编辑器中编辑,完成逻辑,
    现在则最大限度的把代码转移到DLL中,进行业务逻辑保密!!再次 Thanks!!!