Penerapan teknologi NPAPI yang sudah ketinggalan zaman.
Diimplementasikan menggunakan teknologi flash simulasi NPAPI, merangkum NAPI untuk FF/Chrome dan ActiveX untuk IE.
| Daftar isi | menjelaskan | Komentar |
|---|---|---|
| Mozilla | Kode Organisasi Firefox, Open Source SDK | Tolong jangan memodifikasi |
| npapi | NPAPI SDK | Tolong jangan memodifikasi |
| npplugin | Implementasi plug-in NPAPI | Pemrosesan antarmuka otomatis dan pengalihan data telah diimplementasikan, dan dapat digunakan tanpa modifikasi secara default. |
| Regs | Operasi registri, termasuk 32-bit/64-bit, dan pemrosesan keamanan terkait | Pengguna menghasilkan CLSID pribadi berdasarkan program dan memodifikasi nilai ID yang sesuai |
| keaslian | Kode Implementasi Plugin Flashness | Pengguna menghasilkan kode bisnis yang sesuai, CLSID dan informasi lainnya sesuai dengan kebutuhan mereka, dan contoh referensi implementasi antarmuka |
| melepaskan | Kompilasi dan hasilkan direktori untuk melindungi npflashness.dll dan batch pendaftaran, halaman uji, dll. | Pengguna dapat mendaftar dan membuka tes.html untuk tes sederhana |
Penciptaan Proyek
Gunakan Visual Studio Wizard untuk membuat pustaka template aktif (menggunakan ATL) sebagai titik awal untuk mulai menulis pustaka tautan dinamis (DLL).
Deskripsi dokumen
| Nama file | menjelaskan | Komentar |
|---|---|---|
| Flashness.vcxproj | Wizard VS menghasilkan file proyek utama dari proyek VC ++, termasuk informasi versi VC ++, serta informasi tentang platform, konfigurasi, dan fungsi proyek. | |
| Flashness.vcxproj.filters | File filter proyek yang dihasilkan oleh wizard berisi filter dan informasi file yang sesuai. | |
| Flashness.idl | Definisi IDL dari jenis pustaka, antarmuka, dan kelas komponen yang ditentukan oleh proyek diproses oleh kompiler midl untuk menghasilkan definisi antarmuka C ++ dan deklarasi Guid (flashness.h), definisi Guid (flashness_i.c), ketik pustaka (flashness.tlb), dan kode marshalling (flashness_p.c dan dlllden. | File inti proyek, definisi antarmuka |
| Flashness.h | Berisi definisi antarmuka C ++ dan deklarasi GUID dari proyek yang didefinisikan dalam Flashness.idl, diregenerasi oleh MIDL selama kompilasi. | Tidak perlu memodifikasinya, itu akan secara otomatis dihasilkan setelah memodifikasi file IDL. |
| Flashness.cpp | Implementasi antarmuka yang berisi pemetaan objek dan ekspor DLL | Fungsi Inti dan Implementasi Logika Bisnis |
| Flashness.rc | Daftar Sumber Daya Program | Anda dapat memodifikasinya di penjelajah, cobalah untuk tidak memodifikasinya secara manual untuk menghindari kesalahan |
| Flashness.def | File definisi memberikan informasi yang disediakan oleh linker tentang ekspor yang diperlukan DLL, seperti ingin mengekspor antarmuka tertentu untuk panggilan eksternal langsung. | Pada dasarnya tidak perlu memodifikasi plug-in. Cukup Ekspor DllgetClassObject, DllCanunloadNow, DllregisterServer, DllunRegisterServer, Dllinstall |
| stdafx.h/cpp | File yang sudah dikompilasi | Tidak diperlukan modifikasi, perpustakaan dasar sudah termasuk |
| Sumber Daya.H | Tentukan seperti ID tombol, ID gambar, dll. | Tidak diperlukan modifikasi |
Implementasi Antarmuka
Analisis NPAPI
Bagaimana cara mengembangkan sistem plug-in NPAPI dan ActiveX berbasis ActiveX menggunakan demo seperti di atas?
Tarik Kode
git clone https://github.com/walklang/FlashNess.git
Buat antarmuka ATL baru menggunakan wizard
Cari komponen COM untuk detail dan buat antarmuka baru
Ekstensi Antarmuka NPAPI (Opsional)
Flashness telah simulasi panggilan antarmuka yang kompatibel dengan NPAPI dan ActiveX. Mencari ActiveX untuk menambahkan fungsi antarmuka dapat dengan cepat menyadari implementasi browser IE dan FF/Chrome yang kompatibel.
Pengantar contoh antarmuka baru
Implements flashness mendapatkan antarmuka dan mengatur metode antarmuka, dan bentuk lain dapat digunakan untuk merujuk pada implementasi; Pengguna dapat mencari format IDL dan metode implementasi sendiri. Perlu dicatat bahwa jika itu adalah antarmuka GET (seperti readdata), maka nama fungsi selama implementasi perlu ditambahkan ke get_ (seperti get_readdata). Pengguna dapat mengimplementasikannya melalui dua referensi file berikut.
Buka file flashness.idl dan tambahkan fungsi baru ke antarmuka 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);
};
Buka file flashness.h dan tambahkan antarmuka baru ke akhir file.
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_;