当我读取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()的实现的源代码在哪里?谢谢。