vb引用vb封装的Active DLL为何会没有公共模块中的函数?
用vb制作active dll,dll中有一个类模块,一个公共模块。其中类模块代码:
Private Sub Class_Initialize()
Debug.Print "Initialize Thing "
End Sub
Private Sub Class_Terminate()
Debug.Print "Terminate Thing "
End Sub
......
公共模块中代码:
Public a As Long
Public Function inc() As Long
a = 0
inc = a + 1
End Function
然后生成dll,再另外启动vb标准窗体程序,引用生成的这个dll,结果在对象浏览器中并没有发现Module标准模块中的inc函数,只能看到Class类模块及其成员。
接着参考网上的添加active dll中输出函数的方法结果也是一样,难道一定要用vc或其它工具来制作
com组件才能实现这样的功能吗?
--------------------编程问答-------------------- 你要弄一个public class然后把public function写在public class里面 --------------------编程问答-------------------- VB中,使用activeexe,activexdll,ocx控件,封装后,只能存在于类模块中,被定义为public的属性方法过程,而定义在basmodule中的任何变量或方法在类用户中都是不可见的,如果过程方法希望在类用户可见,则需要将该方法定义到类模块中 --------------------编程问答-------------------- 哪楼上所说,然后可以把这个类模块的Instancing属性定义成GlobalMultiUse,实现类似你要的公共模块的效果 --------------------编程问答-------------------- 估计楼主没看MSDN的习惯,MSDN上有现成的例子。
编写ActiveXDLL程序一定要先看MSDN,这样你编写的程序才会高效。 --------------------编程问答-------------------- 这就是面向对象。
面向对象三原则之首就是“封装”,所有非公共接口的函数都不应该暴露给调用者。 --------------------编程问答-------------------- 首先感谢各位老大的回帖,关于这一块MSDN上也没有详细说明,本人也是在做多线程开发的时候,在引用第三方控件的dll(如ThreadFactory)中可以看到Module中的函数,而ThreadFactory的dll好像是用C++和汇编所写的com组件,感觉如果将常用的API函数或其它个人编写的函数封装到Dll的Module模块中会方便很多,有些代码就不需要重复Key了。
--------------------编程问答-------------------- 封装到类中吧。
标准模块是公共的,大家都可以用,包括类模块也可使用标准模块。没有封装标准模块这个说法。标准模块中的全局函数要通过类模块才能调用。
补充:VB , COM/DCOM/COM+