FileIO :: Read()的实现

时间:2015-01-16 03:13:51

标签: google-nativeclient

当我读取fileIO :: read()的源代码时,我遇到了一个问题。 首先,fileIO :: Read()源代码是:

enter int32_t FileIO::Read(int64_t offset,
                 char* buffer,
                 int32_t bytes_to_read,
                 const CompletionCallback& cc)
  {
    if (has_interface<PPB_FileIO_1_1>()) {
      return get_interface<PPB_FileIO_1_1>()->Read(pp_resource(),
          offset, buffer, bytes_to_read, cc.pp_completion_callback());
   } else if (has_interface<PPB_FileIO_1_0>()) {
      return get_interface<PPB_FileIO_1_0>()->Read(pp_resource(),
    offset, buffer, bytes_to_read, cc.pp_completion_callback());
  }
  return cc.MayForce(PP_ERROR_NOINTERFACE);
}

我们可以看到,在get_interface()中,我们得到一个Func指针。问题是,如何获取这个指针。 然后我找到了get_interface的源代码:

template <typename T> inline T const* get_interface() {
  static T const* funcs = reinterpret_cast<T const*>(
  pp::Module::Get()->GetBrowserInterface(interface_name<T>()));
  return funcs;
}

然后是GetBrowserInterface()的源代码,

const void* Module::GetBrowserInterface(const char* interface_name) {
  return get_browser_interface_(interface_name);
}

Module::Module() : pp_module_(0), get_browser_interface_(NULL), core_(NULL){}

我们可以看到,在构造Module时,我们将get_browser_interface_设置为NULL,并且我发现根本没有调用InternalInit()Func。 所以它混淆了如何获取Read()指针.And()的实现的源代码在哪里?谢谢。

1 个答案:

答案 0 :(得分:1)

pp::Module::InternalInit中调用

ppp_entrypoints.cc。当您在ppapi_cpp库中进行链接时,此文件中的函数将被称为PPAPI Native Client模块的入口点。

具体而言,模块加载程序调用{​​{1}}来初始化Native Client模块。

可以在ppapi库here中找到PPP_InitializeModule的源代码。这转发给代理here