Firefox未检测到NPAPI插件

时间:2012-11-19 12:53:08

标签: visual-studio-2010 firefox windows-7-x64 npapi

我正在尝试使用Firefox(Windows 7 x64 Professional下的16.0.2)检测到一个空白的NPAPI插件。这是我的代码。

nplithium.def

LIBRARY    nplithium

EXPORTS
    NP_GetEntryPoints     @1
    NP_Initialize         @2
    NP_Shutdown           @3

nplithium.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

/////////////////////////////////////////////////////////////////////////////
// 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 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 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", "Antek SRL"
            VALUE "FileDescription", "Example Lithium"
            VALUE "FileVersion", "1.0.0.2"
            VALUE "InternalName", "nplithium"
            VALUE "LegalCopyright", "Copyright (C) Marco Buzzanca 2012"
            VALUE "MIMEType", "application/x-lithium"
            VALUE "OriginalFilename", "nplithium.dll"
            VALUE "ProductName", "lithium"
            VALUE "ProductVersion", "1.0.0.1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

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



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//

dll_entry.cpp

#include "npapi.h"
#include "npfunctions.h"

extern "C" 
{
    NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* functions) 
    {
        if(functions == NULL)
            return NPERR_INVALID_FUNCTABLE_ERROR;

        if(functions->size < sizeof(NPPluginFuncs))
            return NPERR_INVALID_FUNCTABLE_ERROR;

        functions->version       = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR;
        functions->newp          = NULL;
        functions->destroy       = NULL;
        functions->setwindow     = NULL;
        functions->newstream     = NULL;
        functions->destroystream = NULL;
        functions->asfile        = NULL;
        functions->writeready    = NULL;
        functions->write         = NULL;
        functions->print         = NULL;
        functions->event         = NULL;
        functions->urlnotify     = NULL;
        functions->getvalue      = NULL;
        functions->setvalue      = NULL;
        functions->javaClass     = NULL;

        return NPERR_NO_ERROR;
    }

    NPError OSCALL NP_Initialize(NPNetscapeFuncs* functions)
    {
        return NPERR_NO_ERROR;
    }

    NPError OSCALL NP_Shutdown() 
    {
        return NPERR_NO_ERROR;
    }
}

不幸的是,我在网上找到的所有示例插件和教程都已过时或不完整。 MDN也没有帮助,因为它几乎没有提供关于浏览器期望这些函数做什么的信息(NP_GetEntryPoints完全没有文档)。

有什么我想念的吗?我不是想让插件做任何事情,我只是想让firefox检测它。

1 个答案:

答案 0 :(得分:2)

我设法让Firefox检测到我的插件。

plug-in developement overview中所述:

  

为此插件DLL的嵌入资源的版本标记   应包含以下字符串/值对集合:

     
      
  • MIMEType:用于MIME类型
  •   
  • FileExtents:用于文件扩展名
  •   
  • FileOpenName:用于文件打开模板
  •   
  • ProductName:用于插件名称
  •   
  • FileDescription:用于说明
  •   
  • 语言:适用于使用的语言
  •   

我在.rc文件中遗漏了一些这些对。