我有一些继承的代码用于打开IE,这是短版本:
procedure OpenIE(URL: OleVariant; FieldValues: string = '');
var ie : IWebBrowser2;
begin
ie := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
ie.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
ShowWindow(ie.HWND, SW_SHOWMAXIMIZED);
ie.Visible := true;
...
end;
Run Code Online (Sandbox Code Playgroud)
由于CreateOleObject需要很长时间才能执行,所以我希望第一次运行时有一个"准备好的"IE.
例如,在Main FormCreate中调用CreateOleObject,然后对OpenIE的第一次调用使用已经创建的"IE"对象.
对于OpenIE的第2次,第3次调用 - 通常调用ie:= CreateOleObject
当我尝试编写它时,我得到一些线程和编组错误,我是这个领域的新手.什么是正确的方法(一些小代码示例会很棒)?
提前致谢.
我有一些继承的代码用于打开IE,我有一些麻烦,这就是我所拥有的:
IEUnit.pas(无表格)具有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;
Run Code Online (Sandbox Code Playgroud)
我想在单元中有"全局"即变量,并像这样编写LoadIE例程:
应从FormCreate(主线程)调用LoadIE
它应该只是创建"全局"即对象
ie := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
Run Code Online (Sandbox Code Playgroud)
所以OpenIE功能不需要创建它,只是为了使用它(目的是加快速度)
所以问题是如何从2个不同的线程访问相同的OLE对象,一个创建对象,另一个使用它.
当我编写不处理线程的代码时,我收到错误
异常类EOleSysError,消息'该应用程序称为为不同线程编组的接口'
我应该怎么做,照顾线程(我没有线程经验,欢迎一些阅读和视频链接).
提前致谢
我需要创建很多帮助程序来转换字符串.
就像是 :
String Function1(String s) {}
Run Code Online (Sandbox Code Playgroud)
我想从任何人那里打电话给他们Activity.
做这个的最好方式是什么 ?我是否需要创建课程?我只是想拥有一个包含所有这些功能的独立文件.这是否是包裹的候选人?