找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5460|回复: 3

【求助】老马请求ActiveX EXE单元模型线程问题

[复制链接]

1

主题

3

回帖

0

精华

初来乍到

积分
414
发表于 2009-5-17 21:16:38 | 显示全部楼层 |阅读模式
<p>&nbsp;你好老马:</p>
<p>&nbsp;&nbsp;&nbsp; 我学了你的 <font face="Verdana">ActiveX EXE单元模型线程 二个例,</font></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 想分析下多线程的可能性.发现一个问题:</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;<strong>&nbsp; 软件不能多开....</strong></p>
<p><strong></strong>&nbsp;</p>
<p><strong>&nbsp;</strong> 经我测试:把你的一个声明:</p>
<p>&nbsp;</p>
<p><font face="Verdana">Private Const MyEvent As String = "m5home"</font></p>
<p><strong></strong>&nbsp;</p>
<p><strong>改为:</strong></p>
<p><font face="Verdana">Private MyEvent As String</font></p>
<p><font face="Verdana">&nbsp;If Len(MyEvent) = 0 Then MyEvent = returncvv5(8) '随机生成一串英文字符</font></p>
<p><font face="Verdana">&nbsp; </font></p>
<p>这样软件可以多开了,不过中间不能再使用:</p>
<p><font face="Verdana">Set theDO = Nothing</font></p>
<p><font face="Verdana">Set theDO = CreateObject("TestDownload.cMain")</font></p>
<p>不然就会同时打多N个窗口,N&gt;3</p>
<p>&nbsp;</p>
<p>----------------------------</p>
<p><font color="#0000ff">能提供下<font face="Verdana">ActiveX EXE</font>多开的方法吗.</font></p>
<p>我主要是想解决inet控件 在网络差访问会死掉的方法,<font face="Verdana">Inet1.Cancel没用</font></p>
<p>&nbsp;</p>
<p>想用<font face="Verdana">ActiveX EXE进程外打开.这样死了我<font face="Verdana">Set theDO = Nothing</font>,再CreateObject一个就行了</font></p>
<p>&nbsp;</p>
<p>十分多谢.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

1

主题

3

回帖

0

精华

初来乍到

积分
414
 楼主| 发表于 2009-5-18 12:09:13 | 显示全部楼层
<p>&nbsp;</p>
<p>请问阿杰会不?可以帮下不?</p>

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2009-5-18 21:06:56 | 显示全部楼层
<p>你的思路是对的.有可能是你方法用错了. </p>
<p>&nbsp;</p>
<p>还有,RND函数容易得到相同的序列,还是使用PID稳当些:</p>
<p>&nbsp;</p>
<div class="msgheader">QUOTE:</div><div class="msgborder">
<p><font face="Verdana">Option Explicit</font></p>
<p>&nbsp;</p>
<p><font face="Verdana">Private Declare Function CreateEvent Lib "kernel32.dll" Alias "CreateEventA" ( _<br/>&nbsp;&nbsp;&nbsp;&nbsp; ByVal lpEventAttributes As Long, _<br/>&nbsp;&nbsp;&nbsp;&nbsp; ByVal bManualReset As Long, _<br/>&nbsp;&nbsp;&nbsp;&nbsp; ByVal bInitialState As Long, _<br/>&nbsp;&nbsp;&nbsp;&nbsp; ByVal lpName As String) As Long<br/>Private Declare Function OpenEvent Lib "kernel32.dll" Alias "OpenEventA" ( _<br/>&nbsp;&nbsp;&nbsp;&nbsp; ByVal dwDesiredAccess As Long, _<br/>&nbsp;&nbsp;&nbsp;&nbsp; ByVal bInheritHandle As Long, _<br/>&nbsp;&nbsp;&nbsp;&nbsp; ByVal lpName As String) As Long<br/>Private Declare Function CloseHandle Lib "kernel32.dll" ( _<br/>&nbsp;&nbsp;&nbsp;&nbsp; ByVal hObject As Long) As Long<br/>Private Declare Sub ExitProcess Lib "kernel32.dll" ( _<br/>&nbsp;&nbsp;&nbsp;&nbsp; ByVal uExitCode As Long)<br/>Private Declare Function GetCurrentProcessId Lib "kernel32.dll" () As Long</font></p>
<p><font face="Verdana">Private Const STANDARD_RIGHTS_REQUIRED As Long = &amp;HF0000<br/>Private Const SYNCHRONIZE As Long = &amp;H100000<br/>Private Const EVENT_MODIFY_STATE As Long = &amp;H2<br/>Private Const EVENT_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &amp;H3)</font></p>
<p>&nbsp;</p>
<p><font face="Verdana">'Private Const MyEvent As String = "m5home"<br/>Private MyEvent As String<br/>Dim hEvent As Long</font></p>
<p>&nbsp;</p>
<p><font face="Verdana">Sub Main()<br/>&nbsp;&nbsp;&nbsp; If GetEventHandle = 0 Then&nbsp;&nbsp;&nbsp;&nbsp; '由于每个新对象的建立,都要执行Main()过程,因此使用事件对象来进行判断.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hEvent = CreateEvent(0&amp;, False, False, MyEvent)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '在单元线程下,模块里的全局变量已经没有用了.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frmMain.Show&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '显示主窗体<br/>&nbsp;&nbsp;&nbsp; End If<br/>End Sub</font></p>
<p>&nbsp;</p>
<p><font face="Verdana">Private Function GetEventHandle() As Long<br/>&nbsp;&nbsp;&nbsp; If MyEvent = vbNullString Then MyEvent = CStr(GetCurrentProcessId)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '取当前PID作为事件字符串<br/>&nbsp;&nbsp;&nbsp; GetEventHandle = OpenEvent(EVENT_ALL_ACCESS, False, MyEvent)<br/>&nbsp;&nbsp;&nbsp; Call CloseHandle(GetEventHandle)<br/>End Function</font></p>
<p>&nbsp;</p>
<p><font face="Verdana">Public Function Quit()<br/>&nbsp;&nbsp;&nbsp; Call CloseHandle(hEvent)<br/>End Function<br/></font></p>
<p>&nbsp;</p></div>
<p></p>
我就是嗷嗷叫的老马了......

1

主题

3

回帖

0

精华

初来乍到

积分
414
 楼主| 发表于 2009-5-19 10:47:13 | 显示全部楼层
<p>&nbsp;</p>
<p>老马真强,通过你的方法解决了.多谢了.</p>
<p>&nbsp;</p>
<p>我得努力学习中.</p>
<p>&nbsp;</p>
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表