NPAPI插件不会在Firefox中加载

时间:2012-12-13 12:28:32

标签: firefox npapi browser-plugin

我正在编写一个插件,它会进入Windows上[INVALID]文件的pluginreg.dat部分。我认为我的npplugin.rc文件存在问题。

npplugin.def文件中,一切正确:

LIBRARY
EXPORTS
    NP_GetEntryPoints @1
    NP_Initialize @2
    NP_Shutdown @3

但是NP_GetEntryPointsNP_Initialize都没有被调用。

要安装插件,我将其放入%APPDATA%/Mozilla/plugins目录。

以下是npplugin.rc代码:

// 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

我的问题是错误在哪里或缺少什么?

2 个答案:

答案 0 :(得分:2)

这是来自conedogers的Chris,很高兴看到你发现我的博客很有用。

格奥尔格是对的。 Firefox不是在寻找Windows语言环境。看起来Mozilla有自己的国际化,因为他们的代码是为多个平台编写的。

这里发生的是BLOCK“040904e4”告诉二进制文件如何处理下面包含的字符串。版本信息不使用C样式结构来包含字符串。块信息用于计算字节偏移量和字符串字符类型,以便您可以提取字符串。

似乎Firefox已经为西方版本构建,所以你需要做同样的事情,正如你所发现的,Firefox将无法加载版本信息来检索mime类型和描述字符串。

MSDN article

答案 1 :(得分:0)

我真的不知道什么明显的修改使它工作。问题实际上在资源文件中,或者可能在定义中。我已将子块040904b0更改为040904e4,将文件和产品版本更改为4,5,0,0(因此将它们设为4位,我仍然不知道它是否重要),添加'\ 0'在每个VALUE的末尾,将字符串版本的格式更改为'%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(在上面的文章中引用)。

以下是我npplugin.rc的最终版本:

// 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