NO IMAGE

我想在CEF裡使用PPAPI,CEF使用VS 2013 Update 4編譯。因此我嘗試了使用VS 2013來編譯PPAPI外掛。

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,C語言版的PPAPI plugin,必須實現下列函式:

  • PPP_InitializeModule,外掛載入時會被呼叫,返回0表示成功
  • PPP_ShutdownModule,外掛解除安裝時會被呼叫
  • PPP_GetInterface,瀏覽器建立外掛例項時會被呼叫

這些函式在ppp.h中定義。實現這些函式時,使用PP_EXPORT巨集修飾一下即可。

一個DLL,實現了上述三個函式,就可以做為PPAPI外掛來用了,不過只是樣子貨,只能看到被載入、建立,幹不了什麼實際的事兒,是個PPAPI 版本的Hello World。

後面我們會改造stub,顯示點東西出來。


相關文章參考: