Application de la technologie NPAPI obsolète.
Implémenté à l'aide de la technologie Flash simulée NPAPI, encapsulant le NAPI pour FF / Chrome et ActiveX pour IE.
| Table des matières | illustrer | Remarque |
|---|---|---|
| mozilla | Code d'organisation Firefox, SDK open source | Veuillez ne pas modifier |
| NPAPI | SDK NPAPI | Veuillez ne pas modifier |
| npplugin | Implémentation du plug-in NPAPI | Le traitement automatique de l'interface et la redirection des données ont été implémentés et peuvent être utilisés sans modification par défaut. |
| règles | Opérations de registre, y compris 32 bits / 64 bits, et le traitement de sécurité connexe | Les utilisateurs génèrent un CLSID privé en fonction du programme et modifient la valeur d'ID correspondante |
| flashness | Code d'implémentation du plugin flashness | Les utilisateurs génèrent des codes commerciaux, CLSIDS et autres informations correspondantes en fonction de leurs besoins, et les exemples de référence de mise en œuvre de l'interface |
| libérer | Compiler et générer un répertoire pour protéger le lot npflashness.dll généré et l'enregistrement, la page de test, etc. | Les utilisateurs peuvent enregistrer et ouvrir un test.html pour un test simple |
Création de projets
Utilisez l'assistant Visual Studio pour créer une bibliothèque de modèles active (utilisant ATL) comme point de départ pour commencer à écrire une bibliothèque de liens dynamiques (DLL).
Description du document
| nom de fichier | illustrer | Remarque |
|---|---|---|
| Flashness.vcxproj | L'assistant VS génère le fichier de projet principal du projet VC ++, y compris les informations de version de VC ++, ainsi que des informations sur la plate-forme, la configuration et les fonctions du projet. | |
| Flashness.vcxproj.filters | Le fichier de filtre de projet généré par l'assistant contient le filtre et les informations de fichier correspondantes. | |
| Flashness.idl | Les définitions IDL de la bibliothèque de types, de l'interface et des classes de composants définies par le projet sont traitées par le compilateur Midl pour générer des définitions d'interface C ++ et des déclarations de GUID (Flashness.h), des définitions de GUID (Flashness_I.C), Type Library (Flashness.Tlb) et Marshalling Codes (Flashness_P.C et Dlldata.C) et Marshalling | Fichier de base du projet, définition de l'interface |
| Flashness.h | Contient la définition de l'interface C ++ et la déclaration de GUID du projet défini dans Flashness.idl, régénérée par Midl pendant la compilation. | Pas besoin de le modifier, il sera automatiquement généré après modification du fichier IDL. |
| Flashness.cpp | Implémentation de l'interface contenant le mappage d'objets et l'exportation de DLL | Fonctions de base et implémentation de la logique métier |
| Flashness.rc | Liste des ressources du programme | Vous pouvez le modifier dans l'explorateur, essayez de ne pas le modifier manuellement pour éviter les erreurs |
| Flashness.def | Le fichier de définition fournit des informations fournies par le linker sur l'exportation requise de la DLL, comme la volonté d'exporter une certaine interface pour les appels externes directs. | Il n'est essentiellement pas nécessaire de modifier le plug-in. Exporter simplement dllGetClassObject, dllcanunloadnow, dllregisterserver, dllungisterserver, dllinstall |
| stdafx.h / cpp | Fichiers précompilés | Aucune modification requise, la bibliothèque de base est déjà incluse |
| ressource.h | Définissez comme ID de bouton, ID d'image, etc. | Aucune modification requise |
Implémentation d'interface
Analyse NPAPI
Comment développer un nouveau système de plug-in NPAPI et ACTIVEX à l'aide de la démo comme ci-dessus?
Tire de code
git clone https://github.com/walklang/FlashNess.git
Créez une nouvelle interface ATL à l'aide de l'assistant
Recherchez des composants COM pour plus de détails et créez une nouvelle interface
Extension d'interface NPAPI (facultative)
Flashness a simulé des appels d'interface compatibles avec NPAPI et ActiveX. La recherche d'activité ActiveX pour ajouter des fonctions d'interface peut rapidement réaliser l'implémentation compatible des navigateurs IE et FF / Chrome.
Introduction à de nouveaux exemples d'interfaces
Flashness implémente obtenir des méthodes d'interface et définir des méthodes d'interface, et d'autres formulaires peuvent être utilisés pour se référer à l'implémentation; Les utilisateurs peuvent rechercher par eux-mêmes des méthodes de format IDL et d'implémentation. Il convient de noter que s'il s'agit d'une interface Get (telle que ReadData), le nom de la fonction pendant l'implémentation doit être ajouté à Get_ (comme get_readdata). Les utilisateurs peuvent l'implémenter via les deux références de fichiers suivantes.
Ouvrez le fichier flashness.idl et ajoutez de nouvelles fonctions à l'interface 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);
};
Ouvrez le fichier flashness.h et ajoutez une nouvelle interface à la fin du fichier.
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_;