Применение устаревшей технологии NPAPI.
Реализовано с использованием имитации NPAPI технологии вспышки, инкапсулирующих NAPI для FF/Chrome и ActiveX для IE.
| Оглавление | иллюстрировать | Примечание |
|---|---|---|
| Мозилла | Код организации Firefox, SDK с открытым исходным кодом | Пожалуйста, не изменяйте |
| npapi | Npapi Sdk | Пожалуйста, не изменяйте |
| npplugin | Реализация плагина NPAPI | Автоматическая обработка интерфейса и перенаправление данных были реализованы и могут использоваться без модификации по умолчанию. |
| регс | Реестр, в том числе 32-битная/64-битная и связанная с ним обработка безопасности | Пользователи генерируют частный CLSID на основе программы и изменяют соответствующее значение идентификатора |
| вспышка | Код реализации плагина Flashness | Пользователи генерируют соответствующие бизнес -коды, CLSIDS и другую информацию в соответствии с их потребностями и ссылками на реализацию интерфейса |
| выпускать | Скомпилировать и генерировать каталог для защиты сгенерированной npflashness.dll и регистрационной партии, тестовой страницы и т. Д. | Пользователи могут зарегистрировать и открыть тест. HTML для простых тестов |
Создание проекта
Используйте мастер Visual Studio, чтобы создать активную библиотеку шаблонов (с использованием ATL) в качестве отправной точки, чтобы начать написание библиотеки динамических ссылок (DLL).
Описание документа
| имя файла | иллюстрировать | Примечание |
|---|---|---|
| Flashness.vcxproj | Wizard VS генерирует основной файл проекта проекта VC ++, включая информацию о версии VC ++, а также информацию на платформе, конфигурации и проектных функциях. | |
| Flashness.vcxproj.filters | Файл фильтра проекта, сгенерированный мастером, содержит фильтр и соответствующую информацию о файле. | |
| Flashness.idl | Определения IDL библиотеки типов, интерфейс и классы компонентов, определяемые проектом, обрабатываются компилятором MIDL для генерации определений интерфейса C ++ и объявлений GUID (Flashness.h), определения GUID (Flashness_i.c), библиотека типа (Flashness.tlb) и коды Marshalling (Flashness_p.c и dlldata.c) и коды маршалля | Файл основного проекта, определение интерфейса |
| Flashness.h | Содержит определение интерфейса C ++ и объявление GUID проекта, определенное в Flashness.idl, восстановленном MIDL во время компиляции. | Не нужно его изменять, он будет автоматически генерироваться после изменения файла IDL. |
| Flashness.cpp | Реализация интерфейса, содержащая отображение объектов и экспорт DLL | Основные функции и внедрение бизнес -логики |
| Flashness.rc | Список ресурсов программы | Вы можете изменить его в исследователе, постарайтесь не изменять его вручную, чтобы избежать ошибок |
| Flashness.def | Файл определения предоставляет информацию, предоставленную линкером об требуемом экспорте DLL, такой как желание экспортировать определенный интерфейс для прямых внешних вызовов. | В основном нет необходимости изменять плагин. Просто экспортируйте dllgetclassobject, dllcanunloadnow, dllgeresterserver, dllunregisterserver, dllinstall |
| stdafx.h/cpp | Предварительные файлы | Не требуется модификация, базовая библиотека уже включена |
| ресурс | Определите, как идентификатор кнопки, идентификатор изображения и т. Д. | Модификация не требуется |
Реализация интерфейса
NPAPI -анализ
Как разработать новую систему плагинов на основе NPAPI и ActiveX, используя демонстрацию, как указано выше?
Code Pull
git clone https://github.com/walklang/FlashNess.git
Создайте новый интерфейс ATL, используя мастер
Поиск компонентов COM для получения подробной информации и создайте новый интерфейс
Расширение интерфейса NPAPI (необязательно)
Flashness имеет моделируемые интерфейсные вызовы, которые совместимы с NPAPI и ActiveX. Поиск ActiveX для добавления функций интерфейса может быстро реализовать совместимую реализацию браузеров IE и FF/Chrome.
Введение в новые примеры интерфейсов
Инструменты Flashness Получить интерфейс и установить методы интерфейса, и другие формы могут использоваться для обозначения реализации; Пользователи могут сами искать формат IDL и методы реализации. Следует отметить, что если это интерфейс GET (например, readdata), то имя функции во время реализации необходимо добавить в get_ (например, get_readdata). Пользователи могут реализовать его с помощью следующих двух ссылок на файлы.
Откройте файл flashness.idl и добавьте новые функции в интерфейс iflashness
interface IFlashNess : IDispatch{
[id(1)] HRESULT WriteData([in] BSTR bstrPath);
[propget, id(2)] HRESULT ReadShort([out, retval] SHORT* pVal);
[propget, id(3)] HRESULT ReadData([out, retval] BSTR* data);
};
Откройте файл flashness.h и добавьте новый интерфейс в конце файла.
STDMETHOD(WriteData)(BSTR bstrPath) {
if (bstrPath == nullptr) return S_FALSE;
ATL::CComBSTR bstr_val = bstrPath;
data_ = bstr_val;
return S_OK;
}
STDMETHOD(get_ReadShort)(SHORT* pVal){
*pVal = 1;
return S_OK;
}
STDMETHOD(get_ReadData)(BSTR* pVal) {
if (!pVal) return S_FALSE;
std::string temp = CT2AEX<>(data_.c_str());
CComBSTR value(temp.c_str());
*pVal = value.Detach();
return S_OK;
}
std::wstring data_;