调用多个带窗口的ActivexDll出现问题了

时间:2023-01-08 21:03:05
主程序和DLL都是用VB写的,每个DLL都带有一个窗口,在主程序中用两个按钮来分别调用两个DLL。
比如点下Button1就调出DLL1中的Form1;点下Button2就调出DLL2中的Form2;
但现在的问题是如果先点了Button1是可以调出From1没错,再点Button2就调不出Form2了;同样,如果先点了Button2可以调出Form2,但再去点Button1就调不出Form1了。
看一下这段代码:
----------------------------------------------------------------
Dim th As Long
Dim F As Object

        Set F = CreateObject("Func_AllReg.FuncCls_AllReg")
        th = F.ShowForm(MainForm.FuncCon(0).hwnd)
        Set F = Nothing

        Set F = CreateObject("Func_SubReg.FuncCls_SubReg")
        th = F.ShowForm(MainForm.FuncCon(1).hwnd)
        Set F = Nothing
----------------------------------------------------------------
MainForm是主程序的窗口,FuncCon(i)是一个picturebox
th是返回的的DLL中窗口的句柄,上面这段代码两次的 th 的值是一样的,请高手指点一下,我对VB不太熟,谢谢!

6 个解决方案

#1


主要看看ShowForm这个函数是怎么根据picturebox的句柄来返回对DLL中窗口的。
我怀疑是重名了,第二次打开的时候还是在打开上一次打开了的窗体

#2


ShowForm函数的代码呢?

#3


lz代码贴的不全啊 
按道理不该出现这种情况的

#4


该回复于2010-02-23 09:43:15被版主删除

#5


真的是form名相同引起的,怎么在两个不同的DLL里也不能重名的,有点不理解

#6


因为你的主程序实例化的时候名称相同 dll中名称相同没关系,但主程序中不能相同.

#1


主要看看ShowForm这个函数是怎么根据picturebox的句柄来返回对DLL中窗口的。
我怀疑是重名了,第二次打开的时候还是在打开上一次打开了的窗体

#2


ShowForm函数的代码呢?

#3


lz代码贴的不全啊 
按道理不该出现这种情况的

#4


该回复于2010-02-23 09:43:15被版主删除

#5


真的是form名相同引起的,怎么在两个不同的DLL里也不能重名的,有点不理解

#6


因为你的主程序实例化的时候名称相同 dll中名称相同没关系,但主程序中不能相同.