hexx 2024-03-06 11:43 采纳率: 0%
浏览 11

c++builder 怎样用 CEF4Delphi 获得网页source code?

我获取网页源代码的语句,如下:

class TMyStringVisitor : public TCefBaseRefCountedOwn , public ICefStringVisitor
{
public:
   void __fastcall Visit(const Uceftypes::ustring str);
   void * __fastcall Wrap(void) {return TCefBaseRefCountedOwn::Wrap();}
   bool __fastcall SameAs(void * aData) {return TCefBaseRefCountedOwn::SameAs(aData);}
   bool __fastcall SameAs(const _di_ICefBaseRefCounted aBaseRefCounted) {return TCefBaseRefCountedOwn::SameAs(aBaseRefCounted);}
   bool __fastcall HasOneRef(void) {return TCefBaseRefCountedOwn::HasOneRef();}
   bool __fastcall HasAtLeastOneRef(void) {return TCefBaseRefCountedOwn::HasAtLeastOneRef();}
   void __fastcall DestroyOtherRefs(void) {TCefBaseRefCountedOwn::DestroyOtherRefs();}
   virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject)
    {return TCefBaseRefCountedOwn::QueryInterface(riid, ppvObject);}
   virtual ULONG STDMETHODCALLTYPE AddRef( void) {return TCefBaseRefCountedOwn::_AddRef();}
   virtual ULONG STDMETHODCALLTYPE Release( void) {return TCefBaseRefCountedOwn::_Release();}

//   IMPLEMENT_REFCOUNTING(TMyStringVisitor);    cef4delphi没有这宏定义
};

void __fastcall TMyStringVisitor::Visit(const Uceftypes::ustring str)
{FILE *fp;
 AnsiString source = str;

 fp = fopen((AnsiString(ExtractFilePath(Application->ExeName)) + "网页源代码.txt").c_str(), "w");
 fwrite(source.c_str(), 1, source.Length(), fp);
 fclose(fp);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 _di_ICefStringVisitor myStringVisitor = new TMyStringVisitor;
 Form1->Chromium1->Browser->MainFrame->GetSource(myStringVisitor);
// Form1->Chromium1->Browser->FocusedFrame->GetSource(myStringVisitor);
}

但调试跟踪没有执行Visit,请教一下哪里弄错了?

  • 写回答

3条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-03-06 11:43
    关注

    hexx 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    为了在C++Builder中使用CEF4Delphi获取网页源代码,你需要进行以下步骤:

    1. 创建一个派生自TCefStringVisitorProc的类,重写Invoke方法以显示源代码:
    class TMyStringVisitorProc : public TCefStringVisitorProc
    {
    public:
        void __fastcall Invoke(const ustring str)
        {
            ShowMessage(str);
        }
    };
    
    1. 在主程序中创建一个_di_TCefStringVisitorProc对象和一个_di_ICefStringVisitor对象,并将前面创建的类的实例分配给它们:
    _di_TCefStringVisitorProc myStringVisitorProc;
    _di_ICefStringVisitor CefStringVisitor;
    
    myStringVisitorProc = new TMyStringVisitorProc();
    CefStringVisitor = myStringVisitorProc;
    
    1. 调用GetSource方法并传递CefStringVisitor对象作为参数:
    Form1->Chromium1->Browser->MainFrame->GetSource(CefStringVisitor);
    

    这样就可以在C++Builder中使用CEF4Delphi获取网页源代码了。

    以上就是使用CEF4Delphi在C++Builder中获取网页源代码的步骤。

    评论

报告相同问题?

问题事件

  • 修改了问题 3月8日
  • 修改了问题 3月8日
  • 创建了问题 3月6日

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向