szbory 发表于 2008-10-15 09:49:20

[求助]追老马追到这里来了

<p>那天我问<span id="topicSubject" csdnid="topicSubject">ActiveX.exe与程序传递数据</span>的问题</p>
<p>&nbsp;</p>
<p>你回答说:</p>
<p>与使用普通的类差别不大,只是要注意: <br/><br/>一,编译A EXE时,编译选项里选择"每个对象使用一个线程"; <br/><br/>二,实例化对象时,不能使用New,而要用CreateObject语句. <br/><br/>三,数据放入对象后,可以使用一个定时器来返回当前过程,具体: <br/><br/>(调用者端)数据放入对象内-----&gt;启动定时器-------&gt;返回调用者 <br/><br/>(A EXE端)接收到数据-------&gt;等待定时器事件(此时调用者已经返回)--------&gt;定时器事件到来,开始提交数据 <br/><br/>不然,你如果直接利用A EXE里的对象来提交,还是一样会在提交完成前造成无响应. <br/></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>我想再问问你, 为啥要用CreateObject语句? </p>
<p>还有就是我用NEW能正常调用, 用CreateObject就会报实时错误91 这是为什么呢? 先谢了哈~</p>

马大哈 发表于 2008-10-15 12:34:47

<p>CreateObject的作用是让建立的对象处于一个新的线程里......你用NEW当然也可以,只是NEW出来的对象并非是处于另一线程,而是在你当前线程里</p>
<p>&nbsp;</p>
<p>因此如果这个NEW的对象里有阻塞操作,一样会挂起整个程序(VB6里就是当前线程).</p>
<p>&nbsp;</p>
<p>所以才要用CreateObject.</p>
<p>&nbsp;</p>
<p>至于这个函数,具体语法可能你没有弄对,查一下MSDN里的具体用法吧</p>
<p>&nbsp;</p>
<p>我这里有关于利用ActiveX EXE实现多线程的相关文章与代码,你可以参考一下,有不明白的请回复:</p>
<p>&nbsp;</p>
<p><font face="Verdana"><a href="http://www.m5home.com/blog/article.asp?id=65">http://www.m5home.com/blog/article.asp?id=65</a></font></p>
<p>&nbsp;</p>
<p><font face="Verdana"><a href="http://www.m5home.com/blog/article.asp?id=54">http://www.m5home.com/blog/article.asp?id=54</a></font></p>

szbory 发表于 2008-10-15 15:21:05

<p>Dim myJob As Object<br/>myJob = CreateObject("<font face="Verdana">BigJobServer</font>.BigJob")</p>
<p>&nbsp;</p>
<p>这样会出现实时错误91, 但用NEW方式就没错</p>
<p>&nbsp;</p>
<p>这种情况是我A EXE里有错误吗?</p>

马大哈 发表于 2008-10-16 10:54:35

<p>我这里是完全正常的</p>
<p>&nbsp;</p>
<p><font face="Verdana">BigJobServer</font>.BigJob,这里面的<font face="Verdana">BigJobServer是不是BigJob类所在的库名?有没有拼写/大小写错误?</font></p>
<p>&nbsp;</p>
<p>EXE工程里,你按F2打开对象浏览器,在第一个库名COMBO里选中你的库,看看下面是不是类似这样:</p>
<p>&nbsp;</p><font face="Verdana">
<p>Library MultThread<br/>&nbsp;&nbsp;&nbsp; D:\SysBack\我的程序\VB6.0\VB多线程(用ActiveX EXE实现)\A EXE\MultThread.exe<br/></font></p>
<p>"Library MultThread"这里就说明了真正的库名,我的例子是MultThread.那么就应该写"<font face="Verdana">MultThread.XXXXX".</font></p>

szbory 发表于 2008-10-16 12:48:12

<p>问题解决了 只能用</p>
<p><font face="Verdana">Set myJob = CreateObject("BigJobServer.BigJob")</font></p>
<p>&nbsp;</p>
<p>如果我用</p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; Dim myJob As Object<br/>&nbsp;&nbsp;&nbsp; myJob = CreateObject("BigJobServer.BigJob")</font></p>
<p>&nbsp;</p>
<p>会出现实时错误91...</p>
<p>&nbsp;</p>
<p>MSDN的例子都可以这样的嘛</p>
<p>&nbsp;</p>
<p>
<table>
<tbody>
<tr>
<td style="BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px">
<div class="CodeSnippetTitleBar">
<div class="CopyCodeButton">&nbsp;</div></div></td></tr>
<tr>
<td style="BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px"><pre class="libCScode" id="ctl00_rs1_mainContentContainer_ctl31other" space="preserve">Sub CreateADODB()
   Dim adoApp As Object
   adoApp = CreateObject("ADODB.Connection")
End Sub</pre></td></tr></tbody></table><br/></p>
[此贴子已经被作者于2008-10-18 21:04:46编辑过]

szbory 发表于 2008-10-18 20:58:00

<p>OMG 虽然问题解决了 但还是比较迷惑.....</p>

马大哈 发表于 2008-10-23 01:00:13

<p>我估计是ADODB.Connection对象与你建立的对象有不同.</p>
<p>&nbsp;</p>
<p>原因不清楚,没研究过.....</p>
<p>&nbsp;</p>
<p>查了一下MSDN,貌似也没有说明SET使用中的必要性.</p>
<p>&nbsp;</p>
<p>看来这个细节MSDN是没有考虑到?</p>
页: [1]
查看完整版本: [求助]追老马追到这里来了