การประยุกต์ใช้เทคโนโลยี NPAPI ที่ล้าสมัย
นำไปใช้โดยใช้เทคโนโลยีแฟลชจำลอง NPAPI, การห่อหุ้ม NAPI สำหรับ FF/Chrome และ ActiveX สำหรับ IE
| สารบัญ | อธิบาย | คำพูด |
|---|---|---|
| โมซิลล่า | รหัสองค์กร Firefox, Open Source SDK | โปรดอย่าแก้ไข |
| NPAPI | NPAPI SDK | โปรดอย่าแก้ไข |
| Npplugin | การใช้งานปลั๊กอิน NPAPI | การประมวลผลอินเทอร์เฟซอัตโนมัติและการเปลี่ยนเส้นทางข้อมูลได้ถูกนำไปใช้และสามารถใช้งานได้โดยไม่ต้องแก้ไขโดยค่าเริ่มต้น |
| regs | การดำเนินการรีจิสทรีรวมถึง 32 บิต/64 บิตและการประมวลผลความปลอดภัยที่เกี่ยวข้อง | ผู้ใช้สร้าง CLSID ส่วนตัวตามโปรแกรมและแก้ไขค่า ID ที่เกี่ยวข้อง |
| ความว่องไว | รหัสการใช้งานปลั๊กอินกะพริบ | ผู้ใช้สร้างรหัสธุรกิจที่สอดคล้องกัน CLSIDs และข้อมูลอื่น ๆ ตามความต้องการของพวกเขาและตัวอย่างอ้างอิงการใช้งานอินเตอร์เฟส |
| ปล่อย | รวบรวมและสร้างไดเรกทอรีเพื่อปกป้อง npflashness.dll และชุดการลงทะเบียนหน้าทดสอบ ฯลฯ | ผู้ใช้สามารถลงทะเบียนและเปิด test.html สำหรับการทดสอบอย่างง่าย |
การสร้างโครงการ
ใช้วิซาร์ด Visual Studio เพื่อสร้างไลบรารีเทมเพลตที่ใช้งานอยู่ (ใช้ ATL) เป็นจุดเริ่มต้นในการเริ่มเขียนไลบรารีลิงก์แบบไดนามิก (DLL)
คำอธิบายเอกสาร
| ชื่อไฟล์ | อธิบาย | คำพูด |
|---|---|---|
| Flashness.vcxproj | ตัวช่วยสร้าง VS สร้างไฟล์โครงการหลักของโครงการ VC ++ รวมถึงข้อมูลเวอร์ชันของ VC ++ รวมถึงข้อมูลบนแพลตฟอร์มการกำหนดค่าและฟังก์ชั่นโครงการ | |
| Flashness.vcxproj.filters | ไฟล์ตัวกรองโครงการที่สร้างโดยตัวช่วยสร้างประกอบด้วยตัวกรองและข้อมูลไฟล์ที่เกี่ยวข้อง | |
| Flashness.idl | คำจำกัดความของ IDL ของคลาสไลบรารีอินเทอร์เฟซและคลาสส่วนประกอบที่กำหนดโดยโครงการจะถูกประมวลผลโดยคอมไพเลอร์ MIDL เพื่อสร้างคำจำกัดความอินเตอร์เฟส C ++ และการประกาศ GUID (Flashness.h) คำจำกัดความ GUID (Flashness_I.C) ไลบรารีประเภท (Flashness.tlb) | ไฟล์ Project Core, คำจำกัดความอินเตอร์เฟส |
| Flashness.h | มีคำจำกัดความอินเตอร์เฟส C ++ และการประกาศ GUID ของโครงการที่กำหนดไว้ใน Flashness.IDL ซึ่งสร้างใหม่โดย MIDL ในระหว่างการรวบรวม | ไม่จำเป็นต้องแก้ไขมันจะถูกสร้างขึ้นโดยอัตโนมัติหลังจากแก้ไขไฟล์ IDL |
| Flashness.cpp | การใช้งานอินเตอร์เฟสที่มีการแมปวัตถุและการส่งออก DLL | ฟังก์ชั่นหลักและการใช้ตรรกะทางธุรกิจ |
| Flashness.rc | รายการทรัพยากรโปรแกรม | คุณสามารถแก้ไขได้ใน Explorer พยายามอย่าแก้ไขด้วยตนเองเพื่อหลีกเลี่ยงข้อผิดพลาด |
| Flashness.def | ไฟล์นิยามให้ข้อมูลที่ให้โดย Linker เกี่ยวกับการส่งออกที่จำเป็นของ 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 ได้อย่างรวดเร็ว
เบื้องต้นเกี่ยวกับตัวอย่างใหม่ของอินเทอร์เฟซ
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_;