時代遅れのNPAPIテクノロジーの適用。
NPAPIシミュレーションフラッシュテクノロジーを使用して実装され、FF/ChromeのNAPIとIEのActiveXをカプセル化します。
| 目次 | 説明します | 述べる |
|---|---|---|
| モジラ | Firefox組織コード、オープンソースSDK | 変更しないでください |
| npapi | npapi sdk | 変更しないでください |
| npplugin | NPAPIプラグインの実装 | 自動インターフェイス処理とデータリダイレクトが実装されており、デフォルトで変更せずに使用できます。 |
| regs | 32ビット/64ビット、および関連するセキュリティ処理を含むレジストリ操作 | ユーザーはプログラムに基づいてプライベートCLSIDを生成し、対応するID値を変更します |
| 閃光 | Flashnessプラグインの実装コード | ユーザーは、対応するビジネスコード、CLSID、およびその他の情報をニーズに応じて生成し、インターフェイスの実装参照例 |
| リリース | 生成されたnpflashness.dllと登録バッチ、テストページなどを保護するために、ディレクトリをコンパイルして生成します。 | ユーザーは、簡単なテストのためにtest.htmlを登録および開くことができます |
プロジェクトの作成
Visual Studio Wizardを使用して、Active Template Library(ATLを使用)を出発点として作成して、ダイナミックリンクライブラリ(DLL)の書き込みを開始します。
ドキュメントの説明
| ファイル名 | 説明します | 述べる |
|---|---|---|
| flashness.vcxproj | VSウィザードは、VC ++のバージョン情報、プラットフォーム、構成、プロジェクト機能に関する情報を含む、VC ++プロジェクトのメインプロジェクトファイルを生成します。 | |
| flashness.vcxproj.filters | ウィザードによって生成されたプロジェクトフィルターファイルには、フィルターと対応するファイル情報が含まれています。 | |
| flashness.idl | プロジェクトで定義されたタイプライブラリ、インターフェイス、およびコンポーネントクラスのIDL定義は、MIDLコンパイラによって処理され、C ++インターフェイス定義とGUID宣言(Flashness.H)、GUID定義(Flashness_I.C)、タイプライブラリ(Flashness.TLB)、およびMarshalling Codes(Flashness_p.cおよびdlldata.c))を生成します。 | プロジェクトコアファイル、インターフェイス定義 |
| 輝き。h | CO ++インターフェイスの定義と、Flashness.IDLで定義されたプロジェクトのGUID宣言が含まれています。 | 変更する必要はありません。IDLファイルを変更した後に自動的に生成されます。 |
| flashness.cpp | オブジェクトマッピングとDLLエクスポートを含むインターフェイス実装 | コア関数とビジネスロジックの実装 |
| Flashness.RC | プログラムリソースリスト | エクスプローラーで変更できます。エラーを避けるために手動で変更しないようにしてください |
| Flashness.DEF | 定義ファイルは、直接外部呼び出しのために特定のインターフェイスをエクスポートしたいなど、DLLの必要なエクスポートに関するリンカーが提供する情報を提供します。 | 基本的に、プラグインを変更する必要はありません。 dllgetClassObject、dllcanunloadNow、dllregisterServer、dllunregisterServer、dllinstallをエクスポートするだけです |
| stdafx.h/cpp | 事前コンパイルされたファイル | 変更は必要ありません。基本的なライブラリはすでに含まれています |
| Resource.H | ボタンID、画像IDなどを定義します。 | 変更は必要ありません |
インターフェイスの実装
NPAPI分析
上記のようにデモを使用して、新しいNPAPIおよびActiveXベースのプラグインシステムを開発する方法は?
コードプル
git clone https://github.com/walklang/FlashNess.git
ウィザードを使用して新しいATLインターフェイスを作成します
詳細についてはcomコンポーネントを検索し、新しいインターフェイスを作成します
NPAPIインターフェイスエクステンション(オプション)
Flashnessは、NPAPIおよびActiveXと互換性のあるインターフェイスコールをシミュレートしています。 ActiveXを検索してインターフェイス関数を追加すると、IEおよびFF/Chromeブラウザーの互換性のある実装が迅速に実現できます。
インターフェイスの新しい例の紹介
閃光の実装インターフェイスとセットインターフェイスメソッドを取得し、他のフォームを使用して実装を参照できます。ユーザーは、IDL形式と実装方法を自分で検索できます。 GETインターフェイス(ReadDataなど)の場合、実装中の関数名をget_(get_readdataなど)に追加する必要があることに注意してください。ユーザーは、次の2つのファイル参照を使用して実装できます。
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_;