我想在CEF里使用PPAPI,CEF使用VS 2013 Update 4编译。因此我尝试了使用VS 2013来编译PPAPI插件。
PPAPI的代码在这里:[https://chromium.googlesource.com/chromium/src/ppapi/](https://chromium.googlesource.com/chromium/src/ppapi/),可以用下列命令check出来:
~~~
git clone https://chromium.googlesource.com/chromium/src/ppapi
~~~
也可以下载master分支的tgz包。
# VS工程
新建一个Win32项目,类型选DLL,去掉预编译头文件stdafx.h和stdafx.cpp,并且在项目属性–>配置属性–>C/C++–>预编译头,把预编译头选项的值设置为不使用预编译头。
复制ppapi/examples/stub/stub.c文件到项目文件夹下,并添加到项目里。做简单修改,打印点儿调试信息。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\r\n"));
return PP_OK;
}
PP_EXPORT void PPP_ShutdownModule() {
OutputDebugString(_T("PPP_ShutdownModule was called\r\n"));
}
PP_EXPORT const void* PPP_GetInterface(const char* interface_name) {
// You will normally implement a getter for at least PPP_INSTANCE_INTERFACE
// here.
OutputDebugString(_T("PPP_GetInterface was called\r\n"));
return NULL;
}
~~~
# PPAPI plugin
参考[https://code.google.com/p/ppapi/wiki/GettingStarted](https://code.google.com/p/ppapi/wiki/GettingStarted),C语言版的PPAPI plugin,必须实现下列函数:
- PPP_InitializeModule,插件加载时会被调用,返回0表示成功
- PPP_ShutdownModule,插件卸载时会被调用
- PPP_GetInterface,浏览器创建插件实例时会被调用
这些函数在ppp.h中定义。实现这些函数时,使用PP_EXPORT宏修饰一下即可。
一个DLL,实现了上述三个函数,就可以做为PPAPI插件来用了,不过只是样子货,只能看到被加载、创建,干不了什么实际的事儿,是个PPAPI 版本的Hello World。
后面我们会改造stub,显示点东西出来。
相关文章参考:
- [**CEF Windows开发环境搭建**](http://blog.csdn.net/foruok/article/details/50468642)
- [**CEF加载PPAPI插件**](http://blog.csdn.net/foruok/article/details/50485448)
- 前言
- CEF Windows开发环境搭建
- CEF加载PPAPI插件
- VS2013编译最简单的PPAPI插件
- 理解PPAPI的设计
- PPAPI插件与浏览器的交互过程
- Windows下从源码编译CEF
- 编译PPAPI的media_stream_video示例
- PPAPI插件的绘图与输入事件处理
- 在PPAPI插件中创建本地窗口
- PPAPI插件与浏览器的通信
- Windows下从源码编译Skia
- 在PPAPI插件中使用Skia绘图
- 加载DLL中的图片资源生成Skia中的SkBitmap对象
- PPAPI+Skia实现的涂鸦板
- PPAPI中使用Chromium的3D图形接口
- PPAPI中使用OpenGL ES绘图