當我讀取fileIO :: read()的源代碼時,遇到了一個問題。所有的 首先,FILEIO ::閱讀()的源代碼是:執行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.the的問題是,如何讓這個指針。 然後我找到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()的實現的源代碼在哪裏?謝謝。
非常感謝你!除此之外,我還有一個問題。 我使用VS2012編譯source.and生成libs.But庫和VS2012編譯結果的符號不匹配。例如,函數pp :: Instance :: Init(uint32_t,const char *,const char *)我在我的projiect中使用了這個函數,並且我使用了由VS2012生成的庫。但是編譯器說找不到符號?pp :: Instance :: Init2h3j2(當然,這個名字被破壞了,我不記得確切的名字)。並且我使用dumpbin導出libs.的符號。我發現這些符號(損壞之後)是不同的。 – FT9
它使我困惑,我使用VS2012來生成庫,我用VS2012來編譯我的結構,爲什麼同樣的符號在破壞後不同呢?它應該是相同的破壞機制嗎?MAKEFILE蠕蟲? – FT9
我建議看編譯庫和可執行文件時使用的命令行參數。也許你會發現導致名稱被改變的差異。 – binji