没有分因此不能悬赏,能帮忙解决问题红包感谢!!
今日在做一个小程序,需要嵌入浏览器,但自带的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、如何处理上述错误