各位大虾:
我遇到一个问题
在做VB的ACTIVEX DLL控件的时候,class里的函数比较容易导出,
只要将属性:
Instancing:设为5Multiuse,或6GloablMultiUse。
但是Module里的函数
当生成好Dll后,可以看到自动转为private。
再放到别的工程里的时候,就什么也看不到了。
如何将Module里的函数自动转为<Globals>能看到的。我也知道一种方式,把moudle里的函数放到类里,然后将类的属性instancing:6:GlobalMultiUse。
类里的函数就变成全局的函数了
但是还有别的方法,就能直接将Moudle里的函数变成public吗?
谢谢啦

解决方案 »

  1.   

    在类里的Friend函数或子过程里调用它似乎也应行.直接有困难.
      

  2.   

    LZ应该明确Public的作用,在Module里,表示在整个工程里可见;在Class里,表示Class的实例所提供的方法对调用者来说可见,二者不是一个概念。
      

  3.   

    声明时定义为Public
    Public Function sReady() As String
        sReady = isready()
    End Function
      

  4.   

    5楼的大虾
    我在Module里是这样写的。
    但是在生成的activex中,这个module就变成了私有的,它其中的所有函数就看不到了4楼的大虾:
    你说的很对,我也知道
    但是我看到有些我们调用的dll中能看到<Gloabls>有函数
    但是class内没有这些函数,说明生成<Gloabls>的函数不是在类里。
    我是想如何能在<Gloabls>里看到函数,而可以不是在类里写的呢请教大家了
      

  5.   

    GloablMultiUse 类中的函数就会出现在 <Globals> 中。
      

  6.   

    还是那个问题,dll控件的对外接口函数,都应该写在类中,而不是模块中,你可以再模块中写任何函数,但必须在类中定义公共函数去调用。模块中函数,支持的是内部调用,并不作为外部接口存在
      

  7.   

    楼上的大虾们非常感谢你们的回答我知道:
    如果写在函数写在类里,并且这个类声明成:GloablMultiUse,可以在<Gloabls>看到这些函数但是同时在这个类里也能看到,那不是2种方式可以调用这一个函数?还有什么别的可以解决的方案吗?
      

  8.   

    vb的模块不是标准类库的标准模块, 他更象一个无特定规则的代码去, 形式更接近masm格式的代码
    将函数写到 GloablMultiUse 属性的类中, 这个类将会是自动激活的, 本身就是实例, 和窗口 form 是一样的,可以按照 窗口名(类名).方法直接调用模块中的默认函数应用级别是 Global , 类中是 Public 
    但在模块中 global public 的表现是等同的按照msdn的说法, Public > Global > Friend > Private  注... Global 只可应用于模块中
    以上所指函数,方法,属性,变量的作用范围而言
      

  9.   

    对纯函数来说,有多个调用入口没有任何影响。
    就像点桌面快捷方式或直接点击exe,都能运行程序。