1

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

npplugin.def文件中一切都是正确的:

LIBRARY
EXPORTS
    NP_GetEntryPoints @1
    NP_Initialize @2
    NP_Shutdown @3

但是既没有NP_GetEntryPoints也没有NP_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

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

4

2 回答 2

2

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

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

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

似乎 Firefox 是为 en-western 构建的,因此您需要执行相同操作,否则,正如您发现的那样,Firefox 将无法加载版本信息来检索 mime-type 和描述字符串。

MSDN 文章

于 2012-12-20T16:04:10.047 回答
0

我真的不知道是什么不同的修改使它起作用。问题实际上出在资源文件中,或者可能在定义中。我已将子块更改040904b0040904e4、文件和产品版本4,5,0,0(因此使它们成为 4 位数,我仍然不知道这是否重要),在每个末尾添加了 '\0' VALUE,更改了字符串版本的格式to '%d, %d, %d, %d',添加了一些额外VALUE的 s 和一些额外的定义 ( 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
于 2012-12-13T13:31:46.337 回答