pcbadboy 2018-10-07 14:32 采纳率: 0%
浏览 4630

调用CefSharp.Cef.Shutdown,再次调用CefSharp.Cef.Initialize出现异常【红包感谢】

没有分因此不能悬赏,能帮忙解决问题红包感谢!!

今日在做一个小程序,需要嵌入浏览器,但自带的webbroswer实在太高(la)端(ji),因此使用CefSharp。
程序中需不断修改UserAgent,但是CefSharp是在开始时就将配置信息都写入CefSettings,再通过CefSharp.Cef.Initialize方法进行初始化。
后面就没有找到什么地方能够修改UserAgent。
初始化的代码为:

 CefSharp.CefSettings setting = new CefSharp.CefSettings();
                setting.Locale = "zh-CN";
                setting.CachePath = "CHBrowser/BrowserCache3";//缓存路径 
                setting.AcceptLanguageList = "zh-CN,zh;q=0.8";//浏览器引擎的语言
                setting.LocalesDirPath = "CHBrowser/localeDir3";//日志
                setting.LogFile = "CHBrowser/LogData";//日志文件
                setting.PersistSessionCookies = true;//
                setting.UserAgent = "";//浏览器内核
                setting.UserDataPath = "CHBrowser/userData3";//个人数据
                CefSharp.Cef.Initialize(setting);

                CefSharp.WinForms.ChromiumWebBrowser WebBrowser = new CefSharp.WinForms.ChromiumWebBrowser("http://www.baidu.com"); //初始页面

                WebBrowser.Dock = DockStyle.Fill;//设置停靠方式
                this.Controls.Add(WebBrowser);//加入窗体

自己的思路:想要修改UserAgent,就需要释放CefSharp.Cef,通过代码:

 CefSharp.Cef.Shutdown();

进行释放。

之后再修改setting的信息,再调用

 CefSharp.Cef.Initialize(setting);

调用以上代码的时候,程序不抛出异常,直接闪退了,输出记录提示:退出。返回值:0x80000003

求大神指导应如何处理!!!

经多方查询资料,初步判断问题为:在C++回调C#函数的时候,C#里的内存回收机制,会影响C++动态库的稳定性。C++回调C#里面的函数,C++里面用的是函数指针,但C#里面只能用委托了。造成错误。
参考:http://www.debugease.com/csharp/3532235.html

该文章提出解决方案:
在声明委托前要加上这句:
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
包含在:
using System.Runtime.InteropServices;

但是我的程序是直接引用的CefSharp,并未声明委托,我应该如何添加?

求大神指导:
1、是否可以另有办法修改UserAgent
或:
2、如何处理上述错误

  • 写回答

1条回答

  • liaoxingwei2008 2022-06-21 19:47
    关注

    解决了吗

    评论

报告相同问题?

悬赏问题

  • ¥15 用三极管设计—个共射极放大电路
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示