2015-01-16 2 views
0

когда я прочитал исходный код fileIO :: read(). У меня возникла проблема. Прежде всего, 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.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() Pointer.And где исходный код реализации Read()? Спасибо.

ответ

1

pp::Module::InternalInit вызывается в ppp_entrypoints.cc. Функции в этом файле вызывается как точка входа в модуль собственного клиента PPAPI, когда вы связываетесь в библиотеке ppapi_cpp.

В частности, PPP_InitializeModule вызывается загрузчиком модуля для инициализации модуля собственного клиента.

Исходный код PPB_FileIO_1_1::Read можно найти в библиотеке ppapi here. Это пересылается прокси here.

+0

большое спасибо! Кроме того, у меня есть другой вопрос. Я использую VS2012 для компиляции source.and сгенерировать libs.But существует несоответствие между символами, которые libs и VS2012 компилируют результат. Например, функция pp :: Instance :: Init (uint32_t, const char *, const char *,) Я использую эту функцию в своем projiect.And я использую libs, которые я создал VS2012.Но компилятор говорит, что не может найти символ? Pp :: Instance :: Init2h3j2 (Конечно, имя искажено, i не помню точное имя). И я использую dumpbin для экспорта символов libs.I узнать символы (после искалеченных) разные. – FT9

+0

Это смущает меня, я использую VS2012 для генерации libs, и я использую VS2012 для компиляции моего projiect, почему один и тот же символ отличается от искаженного? Он должен быть тем же механизмом переключения? Является ли MAKEFILE worng? – FT9

+0

Я бы предложил просмотреть аргументы командной строки, используемые при компиляции как библиотек, так и исполняемого файла. Возможно, вы сможете найти расхождение, из-за которого имена будут искажены по-разному. – binji

Смежные вопросы