MultiUse的dll依赖module中public变量的问题,描述如下:有一个EXE工程A,以及3个ActiveX dll工程B、C、D,其中A调用B和C,而B和C都调用D,也就是说D是个公用组件。D内部很多函数都依赖模块内的public变量,而D内的类的Instancing属性是MultiUse,所以导致在同一进程内,不管new多少个D,但实质上,它们依赖的Public变量只有一个,会产生冲突,也就是说,B和C创建各自全局的D的对象后,在使用过程中,有可能B初始化D后(D设置相应的模块public变量值),C又初始化D(D又根据C的要求设置相应的模块public变量值),B再调用D的方法,就出错了。请问各位高手,有没有办法在不改变D依赖于模块public变量和B、C只初始化一次D的情况下,解决这个问题?万分感谢!
在 D 的公共模块中加入公共变量 isInited as booleanD.init 写为:
public sub Init()
if isInited then
exit sub
endif isInited = true ' 最好再这里标志,最大程度避免 多线程重入
…… 你的初始化代码
end sub只所以不用 Static 变量,因为你无法假设用户不会创建多个 D 的实例
publicNotCreate ---接口用,引用但不创建
在这里定义你所有的方法但不实现;2.定义你的实体dll;
引用接口,采用多态实现接口的方法;
implements 接口dll'
实现代码
'
个人觉得这样合理一些。
但如果你在脚本中调用自定义接口的组建,可能有点小麻烦。
所以我以前是通过将模块public变量放在窗体中解决这个问题的。呵呵,水平有限,惭愧。
把 public变量值(D用到的)改为D的成员变量