大家好:
    请教一下,下面这两条语句
//Dispatch: IDispatch;
Dispatch := IHTMLDocument2(WebBrowser1.Document).Script
这句在EXE里运行正常,放到线程里就报“不支持此接口”的错误,
网上查了一下,需要加入CoInitialize,
但我加入CoInitialize(nil);程序会停在这不动,
加入CoInitialize(self);还是报同一错误,
不知道有什么解决的方法? 

解决方案 »

  1.   

    OLE对象需要初始化和终止化:大家在执行TWebBrowser的某个方法以进行期望的操作,如ExecWB等的时候可能都碰到过“试图激活未注册的丢失目标”或“OLE对象未注册”等错误,或者并没有出错但是得不到希望的结果,比如不能将选中的网页内容复制到剪贴板等。以前用它编程的时候,我发现ExecWB有时侯起作用但有时侯又不行,在Delphi生成的缺省工程主窗口上加入TWebBrowser,运行时并不会出现“OLE对象未注册”的错误。同样是一个偶然的机会,我才知道OLE对象需要初始化和终止化...
      

  2.   

    在程序塊加入以下語句,問題即可解決:initialization
       OleInitialize(nil);
      finalization
       try
        OleUninitialize;
       except
       end;  这几句话放在主窗口所有语句之后,“end.”之前。
      

  3.   

    TO:kye_jufei
        加入了,还是不行,一样的错误:“不支持此接口”.
      

  4.   

    用截包工具看,加入CoInitialize(nil);这个后,webbrowser打开网页只打开了一点点就停着不动(例如网页上有1000行,只打开了10行左右),然后程序就停着不动,去掉CoInitialize(nil);可以打开,但总提示“不支持此接口”的错误
      

  5.   

    原来是这里有问题
        while not WebFun.isFinish do
        begin
          if Terminated then exit;
          sleep(10);
          continue;
        end;这里的本意是,设一个变量,等待网页打开后再做下面的代码,在webbrowser的WebBrowser1NavigateComplete2里设为true,
    在不加CoInitialize(nil);的时候,这个等待正常,加了这个之后,就一直在这里循环,
    有什么方法可以让webbrowser打开网页后再执行的啊?
      

  6.   

    还有,加了CoInitialize(nil);还是会报“不支持此接口”的错误..........
      

  7.   

    有可能是调用javascript的问题,或者线程调用主界面控件的问题