2012-12-13 5 views
1

에로드되지 않습니다 나는 플러그인을 쓰고 있어요 그리고 Windows에서 pluginreg.dat 파일에 [INVALID] 섹션으로 가져옵니다. 내 npplugin.rc 파일에 문제가 있다고 생각합니다. npplugin.def 파일 모두에서NPAPI 플러그인이 파이어 폭스

가 정확한지 :

LIBRARY 
EXPORTS 
    NP_GetEntryPoints @1 
    NP_Initialize @2 
    NP_Shutdown @3 

그러나 어느 NP_GetEntryPointsNP_Initialize가 호출됩니다.

내가 %APPDATA%/Mozilla/plugins 디렉토리에 넣어 플러그인을 설치하십시오.

// Microsoft Visual C++ generated resource script. 
// 
#include "resource.h" 

#define APSTUDIO_READONLY_SYMBOLS 
///////////////////////////////////////////////////////////////////////////// 
// 
// Generated from the TEXTINCLUDE 2 resource. 
// 
#include "afxres.h" 

///////////////////////////////////////////////////////////////////////////// 
#undef APSTUDIO_READONLY_SYMBOLS 

#if 0 
///////////////////////////////////////////////////////////////////////////// 
// Russian (Russia) resources 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) 
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT 

#ifdef APSTUDIO_INVOKED 
///////////////////////////////////////////////////////////////////////////// 
// 
// TEXTINCLUDE 
// 

1 TEXTINCLUDE 
BEGIN 
    "resource.h\0" 
END 

2 TEXTINCLUDE 
BEGIN 
    "#include ""afxres.h""\r\n" 
    "\0" 
END 

3 TEXTINCLUDE 
BEGIN 
    "\r\n" 
    "\0" 
END 

#endif // APSTUDIO_INVOKED 

#endif // Russian (Russia) resources 
///////////////////////////////////////////////////////////////////////////// 
#endif 

///////////////////////////////////////////////////////////////////////////// 
// English (United States) resources 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 

///////////////////////////////////////////////////////////////////////////// 
// 
// Version 
// 

VS_VERSION_INFO VERSIONINFO 
FILEVERSION 4,5 
PRODUCTVERSION 4,5 
FILEFLAGSMASK 0x3fL 
#ifdef _DEBUG 
FILEFLAGS 0x1L 
#else 
FILEFLAGS 0x0L 
#endif 
FILEOS 0x40004L 
FILETYPE 0x2L 
FILESUBTYPE 0x0L 
BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040904b0" 
     BEGIN 
      VALUE "CompanyName", "MyCompany Ltd." 
      VALUE "FileExtents", "myext" 
      VALUE "FileOpenName", "My File" 
      VALUE "FileDescription", "NPPlugin for me" 
      VALUE "FileVersion", "4.5" 
      VALUE "InternalName", "npMyPlugin" 
      VALUE "Language", "English (United States)" 
      VALUE "LegalCopyright", "Copyright (C) MyCompany Ltd. 2012" 
      VALUE "MIMEType", "application/x-myplugin" 
      VALUE "OriginalFilename", "npMyPlugin.dll" 
      VALUE "ProductName", "My NPPlugin" 
      VALUE "ProductVersion", "4.5" 
     END 
    END 
    BLOCK "VarFileInfo" 
    BEGIN 
     VALUE "Translation", 0x409, 1200 
    END 
END 

#endif // English (United States) resources 
///////////////////////////////////////////////////////////////////////////// 



#ifndef APSTUDIO_INVOKED 
///////////////////////////////////////////////////////////////////////////// 
// 
// Generated from the TEXTINCLUDE 3 resource. 
// 


///////////////////////////////////////////////////////////////////////////// 
#endif // not APSTUDIO_INVOKED 

내 질문 오류 또는 어떤 누락되어 있습니다 : 여기

npplugin.rc 코드?

답변

0

정말 모르는 별개의 어떤 수정 작동했다. 문제는 실제로 리소스 파일 또는 정의에있을 수 있습니다. 나는 (내가 여전히 중요하지 않거나 모르는 따라서 그들이 4 자리 수 만들기) 4,5,0,0040904e4, 파일 및 제품 버전에 서브 블록 040904b0을 변경 한 각 VALUE의 끝에 \ 0의 '추가, 변경된 문자열 형식의 형식을 '%d, %d, %d, %d'으로 변경하고 추가로 VALUE을 추가하고 몇 가지 추가 정의 (XP_WIN;XP_WIN32;MOZILLA_STRICT_API;XPCOM_GLUE)를 추가했습니다. http://conedogers.com/2012/11/08/npapi-plugin-sample-for-firefox/

이 소스 코드 샘플 :

모든 것은 "아이디어"나는

에서이 문서를 "빌려"한 https://github.com/chrisDwarner/npruntimeSampleCode은 (위의 문서에서 참조).

// Microsoft Visual C++ generated resource script. 
// 
#include "resource.h" 

#define APSTUDIO_READONLY_SYMBOLS 
///////////////////////////////////////////////////////////////////////////// 
// 
// Generated from the TEXTINCLUDE 2 resource. 
// 
#include "afxres.h" 

///////////////////////////////////////////////////////////////////////////// 
#undef APSTUDIO_READONLY_SYMBOLS 

#if 0 
///////////////////////////////////////////////////////////////////////////// 
// Russian (Russia) resources 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) 
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT 

#ifdef APSTUDIO_INVOKED 
///////////////////////////////////////////////////////////////////////////// 
// 
// TEXTINCLUDE 
// 

1 TEXTINCLUDE 
BEGIN 
    "resource.h\0" 
END 

2 TEXTINCLUDE 
BEGIN 
    "#include ""afxres.h""\r\n" 
    "\0" 
END 

3 TEXTINCLUDE 
BEGIN 
    "\r\n" 
    "\0" 
END 

#endif // APSTUDIO_INVOKED 

#endif // Russian (Russia) resources 
///////////////////////////////////////////////////////////////////////////// 
#endif 

///////////////////////////////////////////////////////////////////////////// 
// English (United States) resources 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 

///////////////////////////////////////////////////////////////////////////// 
// 
// Version 
// 

VS_VERSION_INFO VERSIONINFO 
FILEVERSION 4,5,0,0 
PRODUCTVERSION 4,5,0,0 
FILEFLAGSMASK 0x3fL 
#ifdef _DEBUG 
FILEFLAGS 0x1L 
#else 
FILEFLAGS 0x0L 
#endif 
FILEOS 0x40004L 
FILETYPE 0x2L 
FILESUBTYPE 0x0L 
BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
#if 0 
     BLOCK "040904b0" 
#else 
     BLOCK "040904e4" 
#endif 
     BEGIN 
      VALUE "CompanyName", "MyCompany Ltd.\0" 
      VALUE "FileExtents", "myfile\0" 
      VALUE "FileOpenName", "My File\0" 
      VALUE "FileDescription", "NPPlugin for me\0" 
      VALUE "FileVersion", "4, 5, 0, 0\0" 
      VALUE "InternalName", "npMyPlugin\0" 
      VALUE "Language", "English (United States)\0" 
      VALUE "LegalCopyright", "Copyright (C) MyCompany Ltd. 2012\0" 
      VALUE "LegalTreademarks", " \0" 
      VALUE "MIMEType", "application/x-myplugin\0" 
      VALUE "OriginalFilename", "npMyPlugin.dll" 
      VALUE "PrivateBuild", "\0" 
      VALUE "ProductName", "My NPPlugin" 
      VALUE "ProductVersion", "4, 5, 0, 0\0" 
      VALUE "SpecialBuild", "\0" 
     END 
    END 
    BLOCK "VarFileInfo" 
    BEGIN 
     VALUE "Translation", 0x409, 1200 
    END 
END 

#endif // English (United States) resources 
///////////////////////////////////////////////////////////////////////////// 



#ifndef APSTUDIO_INVOKED 
///////////////////////////////////////////////////////////////////////////// 
// 
// Generated from the TEXTINCLUDE 3 resource. 
// 


///////////////////////////////////////////////////////////////////////////// 
#endif // not APSTUDIO_INVOKED 
+1

리소스 파일은 약간 이상합니다. '040904e4'는 현지화입니다 (language ='409' = 영어, codepage ='4e4' = western). 문서 [여기] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms647464 (v = vs.85) .aspx)가 있습니다. Firefox는 실제 사용자 로케일을 여기에서 찾지 않습니다. –

2

이 크리스, conedogers에서 내 블로그가 유용하다고 볼 다행입니다 :

다음은 npplugin.rc 내 최종 버전입니다.

게오르그가 맞습니다. Firefox가 Windows 로켈을 찾지 않습니다. 모질라는 자신의 코드가 여러 플랫폼 용으로 작성 되었기 때문에 자신 만의 국제화가 필요합니다.

은 여기에서 일어나고있는 것은 BLOCK "040904e4는"아래에 포함 된 문자열을 처리하는 방법을 진 알 수있다. 버전 정보는 C 스타일의 구조체를 사용하여 문자열을 포함하지 않습니다. 블록 정보는 바이트 오프셋 및 문자열 문자 유형을 계산하는 데 사용되므로 문자열을 추출 할 수 있습니다.

파이어 폭스가 en-western 용으로 제작 된 것으로 보입니다. 그렇게하지 않으면 알 수 있듯이 Firefox는 버전 정보를로드하여 MIME 유형 및 설명 문자열을 검색 할 수 없습니다.

MSDN article

+1

'040904e4'로 하드 코딩 된 dlls 리소스에서 플러그인 정보를 읽는 특정 코드 부분입니다.그것이 쓰여졌을 때 나는 거기에 없었지만, 그것이 역사적으로 어떻게 발전했으며 실제로 파이어 폭스 로케일로부터 완전히 독립적 인 것 같다. –