我有一些用于打开 IE 的继承代码,但遇到了一些麻烦,这就是我所拥有的:
IEUnit.pas (no form) 有 LoadIE 和 OpenIE 的例程
从单独的线程调用 OpenIE,它看起来像这样
procedure OpenIE(URL: OleVariant; FieldValues: string = '');
var ie : IWebBrowser2; // <-- This should become "global" variable for the IEUnit
begin
ie := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
ie.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
ShowWindow(ie.HWND, SW_SHOWMAXIMIZED);
ie.Visible := true;
...
end;
我想在单元中有“全局”即变量,并像这样编写 LoadIE 例程:
LoadIE 应该从 FormCreate 调用(主线程)
它应该只创建“全局”即对象
ie := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
所以OpenIE函数不需要创建它,只是为了使用它(目的是加快速度)
所以问题是如何从 2 个不同的线程访问同一个 OLE 对象,一个创建对象,另一个使用它。
当我编写不处理线程的代码时,我得到一个错误
带有消息的异常类 EOleSysError '应用程序调用了为不同线程编组的接口'
我应该怎么做,照顾线程(我没有线程经验,欢迎一些阅读和视频链接)。
提前致谢