تطبيق تقنية NPAPI عفا عليها الزمن.
تم تنفيذها باستخدام تقنية فلاش محاكاة NPAPI ، وتغليف NAPI لـ FF/Chrome و ActiveX لـ IE.
| جدول المحتويات | يوضح | ملاحظة |
|---|---|---|
| موزيلا | رمز منظمة Firefox ، مفتوح المصدر SDK | من فضلك لا تعدل |
| npapi | NPAPI SDK | من فضلك لا تعدل |
| npplugin | تنفيذ المكون الإضافي NPAPI | تم تنفيذ معالجة الواجهة التلقائية وإعادة توجيه البيانات ، ويمكن استخدامها دون تعديل افتراضيًا. |
| ريجس | عمليات التسجيل ، بما في ذلك 32 بت/64 بت ، ومعالجة الأمن ذات الصلة | يقوم المستخدمون بإنشاء CLSID خاص بناءً على البرنامج وتعديل قيمة المعرف المقابل |
| الفلاش | رمز تنفيذ البرنامج المساعد الفلاش | يقوم المستخدمون بإنشاء رموز الأعمال المقابلة ، CLSIDS وغيرها من المعلومات وفقًا لاحتياجاتهم ، وأمثلة مرجعية لتنفيذ الواجهة |
| يطلق | قم بتجميع وإنشاء دليل لحماية npflashness.dll ودُفعة التسجيل ، صفحة الاختبار ، إلخ. | يمكن للمستخدمين التسجيل وفتح test.html للاختبار البسيط |
إنشاء المشروع
استخدم معالج Visual Studio لإنشاء مكتبة قالب نشط (باستخدام ATL) كنقطة انطلاق لبدء كتابة مكتبة ارتباط ديناميكية (DLL).
وصف الوثيقة
| اسم الملف | يوضح | ملاحظة |
|---|---|---|
| flashness.vcxproj | يولد VS Wizard ملف المشروع الرئيسي لمشروع VC ++ ، بما في ذلك معلومات إصدار VC ++ ، بالإضافة إلى معلومات عن النظام الأساسي والتكوين والمشروع. | |
| flashness.vcxproj.filters | يحتوي ملف مرشح المشروع الذي تم إنشاؤه بواسطة المعالج على مرشح ومعلومات الملف المقابلة. | |
| الفلاش | تتم معالجة تعريفات IDL لمكتبة النوع والواجهة والفئات المكونة التي يحددها المشروع بواسطة برنامج التحويل البرمجي MIDL لإنشاء تعريفات واجهة C ++ وإعلانات GUID (flashness.h) ، وتعريفات GUID (Flashness_I.C) ، ومكتبة النوع (flashness.tlb) ، ورموز التبادل (الفلاش _ | الملف الأساسي للمشروع ، تعريف الواجهة |
| الفلاش | يحتوي على تعريف واجهة C ++ وإعلان GUID للمشروع المحدد في flashness.idl ، تم تجديده بواسطة MIDL أثناء التجميع. | لا حاجة لتعديله ، سيتم إنشاءه تلقائيًا بعد تعديل ملف IDL. |
| flashness.cpp | تطبيق الواجهة يحتوي على رسم خرائط للكائنات وتصدير DLL | الوظائف الأساسية وتنفيذ منطق الأعمال |
| flashness.rc | قائمة موارد البرنامج | يمكنك تعديله في المستكشف ، وحاول عدم تعديله يدويًا لتجنب الأخطاء |
| الفلاش | يوفر ملف التعريف المعلومات التي يقدمها الرابط حول التصدير المطلوب لـ DLL ، مثل الرغبة في تصدير واجهة معينة للمكالمات الخارجية المباشرة. | لا توجد حاجة لتعديل المكون الإضافي. فقط تصدير dllgetClassObject ، dllcanunloadnow ، dllregisterServer ، dllunregterserver ، dllinstall |
| stdafx.h/CPP | ملفات مسبقة | لا مطلوب تعديل ، يتم تضمين المكتبة الأساسية بالفعل |
| Resource.H | تعريف مثل معرف الزر ، معرف الصورة ، إلخ. | لا يوجد تعديل مطلوب |
تنفيذ الواجهة
تحليل NPAPI
كيفية تطوير نظام إضافي جديد لـ NPAPI و ActiveX باستخدام العرض التوضيحي على النحو الوارد أعلاه؟
سحب الرمز
git clone https://github.com/walklang/FlashNess.git
قم بإنشاء واجهة ATL جديدة باستخدام المعالج
ابحث عن مكونات COM للحصول على التفاصيل وإنشاء واجهة جديدة
امتداد واجهة NPAPI (اختياري)
لقد قام الفلاش بمحاكاة مكالمات الواجهة المتوافقة مع NPAPI و ActiveX. يمكن أن يدرك البحث عن ActiveX لإضافة وظائف الواجهة بسرعة التنفيذ المتوافق لمتصفحات IE و FF/Chrome.
مقدمة لأمثلة جديدة للواجهات
تحصل أدوات الفلاش على واجهة وتعيين طرق الواجهة ، ويمكن استخدام نماذج أخرى للإشارة إلى التنفيذ ؛ يمكن للمستخدمين البحث عن تنسيق 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_;