问题是这样的,blink线程的void WaitableEvent::Wait() 里会卡死,等待UI线程。但UI线程可能在等blink线程的npapi真窗口响应消息。
WebKit.dll!WebCore::BlobURL::createBlobURL(const WTF::String & originString) 行 76 C++ WebKit.dll!WebCore::BlobURL::createPublicURL(WebCore::SecurityOrigin * securityOrigin) 行 47 C++ > WebKit.dll!WebCore::FileReaderLoader::start(WebCore::ScriptExecutionContext * scriptExecutionContext, WebCore::Blob * blob) 行 81 C++ WebKit.dll!WebCore::FileReader::readInternal(WebCore::Blob * blob, WebCore::FileReaderLoader::ReadType type, int & ec) 行 149 C++ WebKit.dll!WebCore::FileReader::readAsText(WebCore::Blob * blob, const WTF::String & encoding, int & ec) 行 113 C++ WebKit.dll!WebCore::jsFileReaderPrototypeFunctionReadAsText(JSC::ExecState * exec) 行 565 C++ > WebKit.dll!WebCore::BlobResourceHandle::BlobResourceHandle(WebCore::BlobData * blobData, const WebCore::ResourceRequest & request, WebCore::ResourceHandleClient * client, bool async) 行 173 C++ WebKit.dll!WebCore::BlobResourceHandle::createAsync(WebCore::BlobData * blobData, const WebCore::ResourceRequest & request, WebCore::ResourceHandleClient * client) 行 143 C++ WebKit.dll!WebCore::BlobRegistryImpl::createResourceHandle(const WebCore::ResourceRequest & request, WebCore::ResourceHandleClient * client) 行 80 C++ WebKit.dll!WebCore::createResourceHandle(const WebCore::ResourceRequest & request, WebCore::ResourceHandleClient * client) 行 59 C++ WebKit.dll!WebCore::ResourceHandle::create(WebCore::NetworkingContext * context, const WebCore::ResourceRequest & request, WebCore::ResourceHandleClient * client, bool defersLoading, bool shouldContentSniff) 行 92 C++ WebKit.dll!WebCore::ResourceLoader::start() 行 218 C++ WebKit.dll!WebCore::ResourceLoadScheduler::servePendingRequests(WebCore::ResourceLoadScheduler::HostInformation * host, WebCore::ResourceLoadPriority minimumPriority) 行 285 C++ WebKit.dll!WebCore::ResourceLoadScheduler::scheduleLoad(WebCore::ResourceLoader * resourceLoader) 行 189 C++ WebKit.dll!WebCore::ResourceLoadScheduler::scheduleSubresourceLoad(WebCore::Frame * frame, WebCore::CachedResource * resource, const WebCore::ResourceRe
chrome.dll!ui::TouchDispositionGestureFilter::CancelTapIfNecessary 行 394 C++ 已加载符号。 > chrome.dll!ui::TouchDispositionGestureFilter::SendGesture 行 364 C++ 已加载符号。 chrome.dll!ui::TouchDispositionGestureFilter::FilterAndSendPacket 行 302 C++ 已加载符号。 chrome.dll!ui::TouchDispositionGestureFilter::SendAckedEvents 行 254 C++ 已加载符号。 chrome.dll!ui::TouchDispositionGestureFilter::OnTouchEventAck 行 218 C++ 已加载符号。 chrome.dll!content::TouchEmulator::HandleTouchEventAck 行 327 C++ 已加载符号。 chrome.dll!content::TouchEventAckQueue::ProcessAckedTouchEvents 行 196 C++ 已加载符号。 chrome.dll!content::TouchEventAckQueue::MarkAcked 行 182 C++ 已加载符号。 chrome.dll!content::RenderWidgetHostImpl::OnTouchEventAck 行 2802 C++ 已加载符号。 chrome.dll!content::InputRouterImpl::OnTouchEventAck 行 419 C++ 已加载符号。 chrome.dll!content::PassthroughTouchEventQueue::AckCompletedEvents 行 241 C++ 已加载符号。 chrome.dll!content::PassthroughTouchEventQueue::ProcessTouchAck 行 154 C++ 已加载符号。 chrome.dll!content::InputRouterImpl::TouchEventHandled 行 634 C++ 已加载符号。 chrome.dll!base::internal::Invoker<...>::RunOnce 行 645 C++ 已加载符号。 chrome.dll!content::mojom::WidgetInputHandler_DispatchEvent_ForwardToCallback::Accept 行 1983 C++ 已加载符号。 chrome.dll!mojo::InterfaceEndpointClient::HandleValidatedMessage 行 428 C++ 已加载符号。 chrome.dll!mojo::internal::MultiplexRouter::ProcessIncomingMessage 行 874 C++ 已加载符号。 chrome.dll!mojo::internal::MultiplexRouter::Accept 行 598 C++ 已加载符号。 chrome.dll!mojo::Connector::DispatchMessageW 行 524 C++ 已加载符号。 chrome.dll!mojo::Connector::ReadAllAvailableMessages 行 600 C++ 已加载符号。 chrome.dll!mojo::Connector::OnHandleReadyInternal 行 437 C++ 已加载符号。 chrome.dll!base::internal::Invoker<...>::RunOnce 行 645 C++ 已加载符号。
最后的结论很简单,是我绑定v8 function的时候没释放。但查找问题的过程比较艰难,因为
后来发现原来是js里调用了preventDefaultMethodCallback,是jquey调用的:
周五晚,小雨,少见的未加班。无聊,遂准备写一篇博客,介绍一下C和C++运行库,只因发现工作几年的人对此一知半解的大有人在。 在使用VC构建项目时,经常会遇到下面的链接错误:
--url=http://music.yule.sohu.com/20170926/n514522612.shtml 里有断言错误
> urlmon.dll!CPolicyBrowserModeFilter::_EnsureFilterIfNoDataFound C++ urlmon.dll!CBrowserModeFilter::_EnsureBrowserModeFilter C++ urlmon.dll!CBrowserModeFilter::IsIE7Mode C++ fast_mb.exe!GetBrowserEmulation C++ fast_mb.exe!WebBrowser::OnNavigateComplete2 C++ fast_mb.exe!WebBrowser::Invoke C++ ieframe.dll!EnumInvokeCallback 未知 ieframe.dll!EnumConnectionPointSinks 未知 ieframe.dll!IConnectionPoint_InvokeIndirect 未知 ieframe.dll!DoInvokeParamHelper 未知 ieframe.dll!FireEvent_NavigateComplete 未知 ieframe.dll!CBaseBrowser2::v_ActivatePendingView 未知 ieframe.dll!CWebBrowserSB::v_ActivatePendingView 未知 ieframe.dll!CBaseBrowser2::_ExecShellDocView 未知 ieframe.dll!CBaseBrowser2::Exec 未知 ieframe.dll!CWebBrowserSB::Exec 未知 ieframe.dll!CDocObjectHost::_Navigate 未知 ieframe.dll!CDocObjectHost::_OnReadyState 未知 ieframe.dll!CDocObjectHost::_OnChangedReadyState 未知 ieframe.dll!CDocObjectHost::OnChanged 未知 mshtml.dll!CBase::FirePropertyNotify 未知 mshtml.dll!CMarkup::SetReadyState 未知 mshtml.dll!CMarkup::SetInteractiveInternal 未知 mshtml.dll!CMarkup::RequestReadystateInteractive 未知 mshtml.dll!CMarkup::BlockScriptExecutionHelper 未知 mshtml.dll!CHtmPost::Exec 未知 mshtml.dll!CHtmPost::Run 未知 mshtml.dll!PostManExecute 未知 mshtml.dll!PostManResume 未知 mshtml.dll!CHtmPost::OnDwnChanCallback 未知 mshtml.dll!CDwnChan::OnMethodCall 未知 mshtml.dll!GlobalWndOnMethodCall 未知 mshtml.dll!GlobalWndProc 未知 user32.dll!_InternalCallWinProc@20 未知 user32.dll!_UserCallWinProcCheckWow@32 未知 user32.dll!_DispatchMessageWorker@8 未知 user32.dll!_DispatchMessageW@4 未知 fast_mb.exe!wWinMain3 C++ fast_mb.exe!wWinMain C++ fast_mb.exe!invoke_main C++ fast_mb.exe!__scrt_common_main_seh C++ fast_mb.exe!__scrt_common_main
如果是程序方面的识别,一般我们如果直接在C++中引用.NET DLL程序会报错的,一般需要我们将.NET DLL生成组件dll 然后再在C++中用,而且需要做些相应的配置。比如开启clr 选项之类的。
Platform::current()->mainThread()->postTask(FROM_HERE,
57是给blink的每个引入v8的变量,搞了个基类:ActiveScriptWrappableBase
1,跟进anshy提出的加载慢问题,发现webkit会走内存缓存,而miniblink和chromium都不会走,只要是本地文件,每次都加载新的。另外miniblink可以加个优化,在firstlayout后才显示内容。不过还是无法达到webkit的速度,需要继续优化
1,基本上找到播放cctv直播的解决方案了。这网站用了wasm,但代码是加密的。我找了个emscripten的代码:
本文记录一个 WPF 已知问题,此问题已经被我修复。传入错误的数据给到 WriteableBitmap 对象,比如调用 WritePixels 时传入错误的 stride 数值,将可能导致渲染线程进入无限自旋锁
以前写过一篇题为《VC++的DLL应用(含Demo演示)》的文章,当时是刚开始接触DLL,而且所讲到的一些DLL的应用都是比较浅层次的数据传递,基本不具备很强的实用性,而且所选用的开发环境是VC6.0,这次因为做做WinCE开发的过程中需要用到这个技术,所以进行了比较深入的研究,而且此次用的是VS2005开发环境,对比VC6.0的一些操作略有不同,所以重新进行了整理。
之前写了一篇 浅谈Qt控件绘制 。之所以叫浅谈是因为调用都是比较表层的调用。其实 Qt 的绘制,可以说用 Qt 的人都有用到,但是对于绘制底层,了解的人并不见得很多。我其实之前也是云山雾罩,从来没有深究过。所以想着知其然还是要知其所以然。
在大学大一的时候学的是C,然后后来大二的时候专业又开了C++这个课程,然后再后来自己又自学了一点VC++,大三的时候也试着编写过一个MFC的最简单的窗口程序。到大四的时候,自己又做了一个GIS的项目,是用C#.NET来编写的,然后发现C#上手好容易,而且还大部分语法规则都沿用了C,C++的习惯,于是觉得C++实在是没有一点优势可言啊。但这个暑假的实习经历又改变了我的观点:C++在写窗口程序虽然麻烦,但是却什么能做,而且对比C#来说,对运行环境的要求不高,不用像C#程序在安装之前还要安装100M多的运行.NET环境。C++和C#各有优缺,目前我对它们俩的定位是:C++用来写一些底层的程序,比如驱动,或者是一些算法类型的函数接口,然后用C#来调用这些接口并进行界面设计。如何函数的实现跨语言呢?显然DLL是个很重要的内容,故在此对VC++的DLL模块进行介绍。
IE有很多比较恶心的弹窗。一般是用put silient禁用。但ie的证书弹窗,禁用了的话,页面就不继续加载了。
想起之前在公司做的关于 HighDPI 的适配,在 Qt4 下可以说是比较繁琐,代码敲到手疼。早就听说 Qt5.6 开始支持了 HighDPI ,一直没机会看详细的代码。一直到开始做 Gal ,才刚好在 Qt5 下需要 HighDPI 支持。用过之后,真的感叹,用起来太方便了。故看了一下详细实现。不过比较遗憾的是代码中有一个小瑕疵。
SloppyBlockFunctionStatement* delegate放到scope_->DeclarationScope()->sloppy_block_function_map()里。而这个delegate是zone堆上new出来的。
在 C 语言中, extern 关键字具有外延性,使修饰的变量作用域可以拓展到其他文件中。而在C++中,extren被重载后有了其他功能,就是修饰函数以什么方式进行编译。决定了在编译过程中是否对函数进行倾轧(Name Mangling)操作,也是在今天才知道倾轧这个词语。
正常如果你想写一个 .NET 的 NuGet 包,直接打包就好了,你的引用程序集会出现在 NuGet 包内的 lib 文件夹内。然而,如果我们的 NuGet 包包含本机依赖的话怎么办呢?
起因还是上次那个wke\3d-cube-loading动画。在启动后如果鼠标不hover上去,动画居然不会动。
不久前,由于C#语言限制(太麻烦,代码量太多,并不是无法实现),我用C++写了实现一样功能的动态库,供C#调用
https://cloud.tencent.com/document/product/867/44383
从业务代码构建出来 GlyphRun 对象,在 WPF 的渲染层里,如何利用 GlyphRun 提供的数据将字符在界面呈现出来。本文将和大家聊聊从 WPF 的渲染层获取到 GlyphRun 数据,到调用 DirectX 的各个渲染相关方法的过程,也就是 WPF 绘制文本字符的原理或者实现方法
本文记录一个 WPF 已知问题,当传入到渲染的 Geometry 几何里面包含了 NaN 数值,将可能让应用程序收到从渲染层抛上来的 UCEERR_RENDERTHREADFAILURE 异常,且此异常缺乏必要信息,比较难定位到具体错误逻辑
Microsoft Visual C++ 2005 Redistributable Package (x86) http://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.exe Microsoft Visual C++ 2005 Redistributable Package (x64) http://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.exe
if (job->m_response.httpHeaderField(WebString::fromUTF8("Content-Type")).equals("application/octet-stream")) { RequestExtraData* requestExtraData = reinterpret_cast<RequestExtraData*>(job->firstRequest()->extraData());
2 点击下一步,在应用程序设置里选择带静态链接的MFC规则,这个主要为了以静态库的形式生成MFC dll,便于动态库可以移植到其它编程语言或者其它计算机系统里调用。
node.dll!content::WebSchedulerImpl::postTimerTask(const blink::WebTraceLocation & location, blink::WebThread::Task * task, __int64 delayMs) 行 64 C++ node.dll!blink::TimerBase::setNextFireTime(double now, double delay) 行 113 C++ node.dll!blink::TimerBase::start(double nextFireInterval, double repeatInterval, const blink::WebTraceLocation & caller) 行 67 C++ node.dll!content::WebPluginImpl::invalidateRect(_NPRect * rect) 行 958 C++ > node.dll!NPN_InvalidateRect(_NPP * instance, _NPRect * invalidRect) 行 127 C++
现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额。因此很多以前搞VC++开发的人都转向用更强大的VS.Net。在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类的问题。下面就用一个完整的实例来详细说明怎样用托管C++封装一个C++类以提供给C#使用。 比如,现在有一个工程名为NativeCppDll的由C++编写的DLL,里面输出了一个CPerson类。下面是具体的代码:
编写dll时,有个重要的问题需要解决,那就是函数重命名——Name-Mangling。解决方式有两种,一种是直接在代码里解决采用extent”c”、_declspec(dllexport)、#pragma comment(linker, "/export:[Exports Name]=[Mangling Name]"),另一种是采用def文件。
经常使用VC6的Dependency查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系。
c#客户端不能直接调用c++ dll,需要做2个黏合层把它们连接起来,这里以trtc sdk的dll为例
至此, C#做为脚本已经完全可行了: 可嵌入, 跨平台, 高效率, 热更新, 几乎可以忽略的编译时间, 强大的IDE支持, 丰富的第三方库, 部分动态语言特性的支持, 可以接受的体积与内存占用
编译 冒似不编译没有.lib可以用 从官方上下载稳定版本的代码, 不要去GitHub直接拉 默认的工程有几个路径和宏之类的不对, 小改一下就可以 如果缺文件, 可以到GitHub的历史版本里去找 编译好了就一个lib, 一个dll, pdb看需要 环境配置 C++这边肯定要链接mono.lib, 所以dll要拷贝到exe的目录 除了mono本身外, 还需要.net的runtime assembly, 最精简的情况只需要一个mscorlib.dll, 其它的用到再加进去就可以 脚本的编译可以用mono的SDK
python3使用ctypes在windows中访问C和C++动态链接库函数示例 这是我们的第一个示例,我们尽量简单,不传参,不返回,不访问其他的动态链接库 一 测试环境介绍和准备 测试环境: 操作系统:windows10 Python版本:3.7.0 VS版本:vs2015社区版(免费) 相关工具下载: VS版本vs2015社区版(免费) Python3.7.0 (源码和安装文件) http://ffmpeg.club/python 二 C/C++部分代码 1 首先完成C/C++的动态链接库,与做python扩展库不同,ctypes调用的c++库其实与python没有代码关联,只是提供了开放公共标准。
在使用 Visual Studio 进行 C++ 编程时,你可能会遇到 c1xx: fatal error C1356: 无法找到 mspdbcore.dll 这样的错误。这个错误通常出现在编译过程中,而且很可能是由于缺少或损坏了 mspdbcore.dll 文件引起的。在本文中,我们将讨论这个错误的原因,并提供一些解决方案来解决这个问题。
这是关于PCL 编译成.net可用的DLL ,来自于ccjia的分享,希望大家都能够踊跃的敢于分享,
我在去年其实写过一篇关于dll的博客,但当时只是简单记录了过程,今年在给新员工出dll题目时,发现很多人对dll不太熟悉,所以想再写一篇博客,详细讲讲。
背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使用一些第三方通讯组件的时候,通过C#来开发应用软件时,就需要利用DllImport特性进行方法调用。本篇文章将引导你快速
项目中可能会经常用到第三方库,主要是出于程序效率考虑和节约开发时间避免重复造轮子。无论第三方库开源与否,编程语言是否与当前项目一致,我们最终的目的是在当前编程环境中调用库中的方法并得到结果或者借助库中的模块实现某种功能。这个过程会牵涉到很多东西,本篇文章将简要的介绍一下该过程的一些问题。
使用VS2017项目模板创建C++动态库生成工程,生成动态库。然后再创建一个C++工程调用动态库完成测试。
领取专属 10元无门槛券
手把手带您无忧上云