我正在编写一个插件,它会进入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
我的问题是错误在哪里或缺少什么?
答案 0 :(得分:2)
这是来自conedogers的Chris,很高兴看到你发现我的博客很有用。
格奥尔格是对的。 Firefox不是在寻找Windows语言环境。看起来Mozilla有自己的国际化,因为他们的代码是为多个平台编写的。
这里发生的是BLOCK“040904e4”告诉二进制文件如何处理下面包含的字符串。版本信息不使用C样式结构来包含字符串。块信息用于计算字节偏移量和字符串字符类型,以便您可以提取字符串。
似乎Firefox已经为西方版本构建,所以你需要做同样的事情,正如你所发现的,Firefox将无法加载版本信息来检索mime类型和描述字符串。
答案 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