【发布时间】:2015-01-16 03:13:51
【问题描述】:
当我阅读 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 Pointer。问题是,如何得到这个指针。 然后我找到了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){}
我们可以看到,在构建模块时,我们将 get_browser_interface_ 设置为 NULL,而我发现根本没有调用 InternalInit() Func。 所以它混淆了如何获取Read()指针。Read()的实现源代码在哪里?谢谢。
【问题讨论】: