类库的异步问题,不知道怎么实现 就是一个网站,里面有资料,不过要登录,并且要经过几个链接才能打开。我用 WebBrowser控件,并在DocumentCompleted事件里保存状态,结果多次调用DocumentCompleted才能打开该页面,并得到数据。现在我想把这个功能封装到DLL类库里,没有思路了,好像这样就异步调用了,如何得到数据呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 换个问法,WebBrowser控件能不能在dll库中使用?不用 WebRequest 相关类是因为网址动态,而且跳转复杂。 { IPersistStream interface }{$EXTERNALSYM IPersistStream}IPersistStream = interface(IPersist)[´{00000109-0000-0000-C000-000000000046}´]function IsDirty: HResult; stdcall;// 最后一次存盘后是否被修改function Load(const stm: IStream): HResult; stdcall;// 从流中载入function Save(const stm: IStream;fClearDirty: BOOL): HResult; stdcall;// 保存到流function GetSizeMax(out cbSize: Largeint):HResult; stdcall; // 取得保存所需空间大小end;{ IPersistStreamInit interface }{$EXTERNALSYM IPersistStreamInit}IPersistStreamInit = interface(IPersistStream)[´{7FD52380-4E07-101B-AE2D-08002B2EC713}´]function InitNew: HResult; stdcall; // 初始化end;首先来实现写,因为这是最迫切的要求:procedure SetHtml(const WebBrowser:TWebBrowser; const Html: string);varStream: IStream;hHTMLText: HGLOBAL;psi: IPersistStreamInit;beginif not Assigned(WebBrowser.Document) then Exit;hHTMLText := GlobalAlloc(GPTR, Length(Html) + 1);if 0 = hHTMLText then RaiseLastWin32Error;CopyMemory(Pointer(hHTMLText),PChar(Html), Length(Html));OleCheck(CreateStreamOnHGlobal(hHTMLText, True, Stream));tryOleCheck(WebBrowser.Document.QueryInterface(IPersistStreamInit, psi));tryOleCheck(psi.InitNew);OleCheck(psi.Load(Stream));finallypsi := nil;end;finallyStream := nil;end;end; c# 用流创建XmlReader的问题 C# 给文件和文件夹写保护 有两个ACCESS数据库的两个表中有相同字段,想要的查询结果中需要这两个表中所有字段 C#程序执行的逻辑先后问题? DataGridView导出EXCEL成功,但是每次导出的EXCEL无论保存还是关闭进程里都多个EXCEL.EXE,都要手动关闭进程才行... 如何判断上一步数据库操作是否正常? 怎样在里datagrid出现滚动条 急!! WinForm程序,控件不要跟随父容器字体变化 在线等候——如何从指定的证书文件和私钥文件中获得私钥和数字签名的哈稀算法。 c sharp 怎样对地图进行操作,有意者请进! ERP的多语言版本
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货