zoukankan      html  css  js  c++  java
  • CEF载入PPAPI插件

    CEF基于Chromium和Webkit而来,支持PPAPI和NaCI。

    CEF3的binary包默认已经支持PPAPI(參考http://magpcss.org/ceforum/viewtopic.php?

    f=10&t=10509),以cefsimple为例(參考CEF Windows开发环境搭建)。能够通过命令行參数来注冊PPAPI plugin,通过–url參数传递一个载入相应plugin的html页面。

    以下是我測试可用的一个命令行參数

    --ppapi-out-of-process --register-pepper-plugins="D:projectscef_binary_3.2357.1271.g8e0674e_windows32Releasestub.dll;application/x-ppapi-stub" --url=file:///d:/projects/cef_binary_3.2357.1271.g8e0674e_windows32/Release/stub.html
    

    stub.html很easy,代码例如以下:

    <!DOCTYPE html>
    <html>
    <head>
      <title>stub</title>
    </head>
    
    <body>
    
    <embed id="plugin" type="application/x-ppapi-stub">
    
    </body>
    </html>
    

    当中stub.dll是我编译的PPAPI SDK里的演示样例。做了些许修改。stub.c代码例如以下:

    // Copyright (c) 2010 The Chromium Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    
    // This is the simplest possible C Pepper plugin that does nothing. If you're
    // using C++, you will want to look at stub.cc which uses the more convenient
    // C++ wrappers.
    
    #include <stddef.h>
    #include <stdint.h>
    #include <Windows.h>
    #include <tchar.h>
    
    #include "ppapi/c/pp_errors.h"
    #include "ppapi/c/pp_module.h"
    #include "ppapi/c/ppb.h"
    #include "ppapi/c/ppp.h"
    #include "ppapi/c/pp_instance.h"
    #include "ppapi/c/ppp_instance.h"
    
    PP_Module g_module_id;
    PPB_GetInterface g_get_browser_interface = NULL;
    
    PP_EXPORT int32_t PPP_InitializeModule(PP_Module module_id,
       PPB_GetInterface get_browser_interface) {
      // Save the global module information for later.
      g_module_id = module_id;
      g_get_browser_interface = get_browser_interface;
      OutputDebugString(_T("PPP_InitializeModule was called
    "));
    
      return PP_OK;
    }
    
    PP_EXPORT void PPP_ShutdownModule() {
    OutputDebugString(_T("PPP_ShutdownModule was called
    "));
    }
    
    PP_EXPORT const void* PPP_GetInterface(const char* interface_name) {
      // You will normally implement a getter for at least PPP_INSTANCE_INTERFACE
      // here.
      return NULL;
    }
    

    如你所见,我仅仅是使用OutputDebugString函数输出了调试信息。

    执行cefsimple。使用DbgView工具能够看到我们输出的信息。


    关于PPAPI插件的细节。后面会有一些文章来讲。

    相关文章參考:

  • 相关阅读:
    自己动手将整数转换字符串
    自己动手实现字符串倒叙
    欧拉计划第13题题解
    洛谷P1016 旅行家的预算 题解 贪心+单调队列
    欧拉计划第12题题解
    欧拉计划第11题题解
    欧拉计划第10题题解
    欧拉计划第9题题解
    欧拉计划第8题题解
    欧拉计划第7题题解
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7207676.html
Copyright © 2011-2022 走看看