Aplicação da tecnologia NPAPI desatualizada.
Implementado usando a tecnologia flash simulada NPAPI, encapsulando o NAPI para FF/Chrome e ActiveX para o IE.
| Índice | ilustrar | Observação |
|---|---|---|
| Mozilla | Código da organização do Firefox, SDK de código aberto | Por favor, não modifique |
| npapi | NPAPI SDK | Por favor, não modifique |
| npplugin | Implementação do plug-in npapi | O processamento automático de interface e o redirecionamento de dados foram implementados e podem ser usados sem modificação por padrão. |
| Regs | Operações de registro, incluindo 32 bits/64 bits e processamento de segurança relacionado | Os usuários geram um clsid privado com base no programa e modificam o valor de identificação correspondente |
| Flashness | Código de implementação do plug -in de flashness | Os usuários geram códigos de negócios correspondentes, clsids e outras informações de acordo com suas necessidades, e os exemplos de referência de implementação da interface |
| liberar | Compilar e gerar diretório para proteger o lote gerado npflashness.dll e registro, página de teste, etc. | Os usuários podem se registrar e abrir test.html para teste simples |
Criação do projeto
Use o assistente do Visual Studio para criar uma biblioteca de modelos ativos (usando ATL) como ponto de partida para começar a escrever uma biblioteca de link dinâmica (DLL).
Descrição do documento
| Nome do arquivo | ilustrar | Observação |
|---|---|---|
| Flashness.vcxproj | O assistente VS gera o arquivo principal do projeto do projeto VC ++, incluindo as informações da versão do VC ++, bem como as informações sobre as funções da plataforma, configuração e projeto. | |
| Flashness.vcxproj.filters | O arquivo de filtro do projeto gerado pelo assistente contém o filtro e as informações correspondentes do arquivo. | |
| Flashness.idl | As definições IDL da biblioteca de tipos, as classes de interface e componentes definidas pelo projeto são processadas pelo compilador MIDL para gerar definições de interface C ++ e declarações de orientação GUID (Flashness.H), definições de GUID (Flashness_I.C), Type Library (Flashness.Tlb) e Códigos de Marshalling (Flashness_P.C) e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e DLLA e dll (flashness.c), flashness (Flashness) e codos de flashness_i.c) e dll e dll e dll e dll e | Arquivo Core do Projeto, Definição de Interface |
| Flashness.h | Contém a definição da interface C ++ e a declaração do GUID do projeto definido em flashness.idl, regenerado pelo MIDL durante a compilação. | Não há necessidade de modificá -lo, ele será gerado automaticamente após a modificação do arquivo IDL. |
| Flashness.cpp | Implementação de interface contendo mapeamento de objetos e exportação de DLL | Funções principais e implementação da lógica de negócios |
| Flashness.rc | Lista de recursos do programa | Você pode modificá -lo no explorador, tente não modificá -lo manualmente para evitar erros |
| Flashness.def | O arquivo de definição fornece informações fornecidas pelo vinculador sobre a exportação necessária da DLL, como querer exportar uma determinada interface para chamadas externas diretas. | Basicamente, não há necessidade de modificar o plug-in. Basta exportar dllgetclassObject, dllcanunloadnow, dllRegisterServer, dllunregisterServer, dllinstall |
| stdafx.h/cpp | Arquivos pré -compilados | Nenhuma modificação necessária, a biblioteca básica já está incluída |
| Resource.h | Defina como ID do botão, ID da imagem, etc. | Nenhuma modificação necessária |
Implementação da interface
Análise NPAPI
Como desenvolver um novo sistema de plug-in baseado em NPAPI e ActiveX usando a demonstração como acima?
Puxão de código
git clone https://github.com/walklang/FlashNess.git
Crie uma nova interface ATL usando o assistente
Pesquise os componentes com os detalhes e crie uma nova interface
Extensão da interface NPAPI (opcional)
O Flashness simulou chamadas de interface compatíveis com npapi e ActiveX. A busca pelo ActiveX para adicionar funções de interface pode rapidamente realizar a implementação compatível dos navegadores IE e FF/Chrome.
Introdução a novos exemplos de interfaces
Os implementos de flashness obtêm interface e definem métodos de interface, e outros formulários podem ser usados para se referir à implementação; Os usuários podem pesquisar o formato IDL e os métodos de implementação por si mesmos. Deve -se notar que, se for uma interface GET (como readData), o nome da função durante a implementação precisa ser adicionado ao get_ (como get_readData). Os usuários podem implementá -lo através das duas referências a seguir.
Abra o arquivo flashness.idl e adicione novas funções à 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);
};
Abra o arquivo flashness.h e adicione uma nova interface ao final do arquivo.
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_;