구식 NPAPI 기술의 적용.
NPAPI 시뮬레이션 플래시 기술을 사용하여 구현, FF/Chrome 용 NAPI 및 IE 용 ActiveX를 캡슐화했습니다.
| 목차 | 설명 | 주목 |
|---|---|---|
| 모질라 | Firefox 조직 코드, 오픈 소스 SDK | 수정하지 마십시오 |
| NPAPI | NPAPI SDK | 수정하지 마십시오 |
| npplugin | NPAPI 플러그인 구현 | 자동 인터페이스 처리 및 데이터 리디렉션이 구현되었으며 기본적으로 수정하지 않고 사용할 수 있습니다. |
| regs | 32 비트/64 비트 및 관련 보안 처리를 포함한 레지스트리 작업 | 사용자는 프로그램을 기반으로 개인 CLSID를 생성하고 해당 ID 값을 수정합니다. |
| 플래시 | Flashness 플러그인 구현 코드 | 사용자는 요구에 따라 해당 비즈니스 코드, CLSID 및 기타 정보를 생성하고 인터페이스 구현 참조 예제를 생성합니다. |
| 풀어 주다 | 생성 된 npflashness.dll 및 등록 배치, 테스트 페이지 등을 보호하기 위해 디렉토리를 컴파일하고 생성하십시오. | 사용자는 간단한 테스트를 위해 Test.html을 등록하고 열 수 있습니다 |
프로젝트 생성
Visual Studio Wizard를 사용하여 ATL을 사용하여 활성 템플릿 라이브러리 (DLL)를 작성하기위한 시작점으로 만듭니다.
문서 설명
| 파일 이름 | 설명 | 주목 |
|---|---|---|
| Flashness.vcxproj | VS Wizard는 VC ++의 버전 정보와 플랫폼, 구성 및 프로젝트 기능에 대한 정보를 포함하여 VC ++ 프로젝트의 기본 프로젝트 파일을 생성합니다. | |
| Flashness.vcxproj.filters | 마법사에서 생성 된 프로젝트 필터 파일에는 필터 및 해당 파일 정보가 포함되어 있습니다. | |
| Flashness.idl | 프로젝트에 의해 정의 된 유형 라이브러리, 인터페이스 및 구성 요소 클래스의 IDL 정의는 C ++ 인터페이스 정의 및 안내 선언 (Flashness.h), 안내 정의 (Flashness_i.c), 유형 라이브러리 (Flashness.TLB) 및 마샬링 코드 (Flashness_P.C 및 DLLDATA.C)를 생성하기 위해 MIDL 컴파일러에 의해 처리됩니다. | 프로젝트 코어 파일, 인터페이스 정의 |
| Flashness.h | Flashness.idl에 정의 된 프로젝트의 C ++ 인터페이스 정의 및 안내서 선언이 포함되어 있으며 컴파일 중에 MIDL에 의해 재생됩니다. | 수정할 필요가 없으며 IDL 파일을 수정 한 후 자동으로 생성됩니다. |
| Flashness.cpp | 객체 매핑 및 DLL 내보내기가 포함 된 인터페이스 구현 | 핵심 기능 및 비즈니스 로직 구현 |
| Flashness.rc | 프로그램 리소스 목록 | 탐색기에서 수정할 수 있고 오류를 피하기 위해 수동으로 수정하지 마십시오. |
| Flashness.def | 정의 파일은 직접 외부 통화에 대한 특정 인터페이스를 내보내는 것과 같은 DLL의 필요한 내보내기에 대한 링커가 제공 한 정보를 제공합니다. | 기본적으로 플러그인을 수정할 필요가 없습니다. DLLGETCASSOBJECT, DLLCANUNLOWNOW, DLLERGISTERSERVER, DLLUNREGISTERSERVER, DLLINSTALL을 내보내십시오 |
| stdafx.h/cpp | 사전 컴파일 된 파일 | 수정이 필요하지 않으면 기본 라이브러리가 이미 포함되어 있습니다 |
| 자원 .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 Ampess는 인터페이스 및 설정 인터페이스 메소드를 가져오고 다른 양식을 사용하여 구현을 참조 할 수 있습니다. 사용자는 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_;