我获取网页源代码的 c++builder 语句,如下:
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();}
};
void __fastcall TMyStringVisitor::Visit(const Uceftypes::ustring str)
{
ShowMessage(str);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
_di_ICefStringVisitor myStringVisitor = new TMyStringVisitor;
Form1->Chromium1->Browser->MainFrame->GetSource(myStringVisitor);
}
但调试跟踪没有执行TMyStringVisitor::Visit()
后来,我用Delphi写了一个unit,如下:
procedure StringVisitor(const str: ustring);
begin
ShowMessage(str);
end;
procedure GetSourceHtml(chromium : TChromium);
var
CefStringVisitor : ICefStringVisitor;
begin
CefStringVisitor := TCefFastStringVisitor.Create(StringVisitor);
chromium.Browser.MainFrame.GetSource(CefStringVisitor);
end;
然后,在c++builder里执行:GetSourceHtml(Form1->Chromium1);
正常显示了网页源码
现在,我想把 Delphi 的改为 c++builder 来写,遇到的问题是:
TCefStringVisitorProc 在Delphi 里定义为:TCefStringVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const str: ustring);
而在 c++builder 里定义为:
__interface TCefStringVisitorProc : public System::IInterface
{
virtual void __fastcall Invoke(const Uceftypes::ustring str) = 0 ;
};
请教大家,应怎样弄?