64位Firebreath NPAPI插件未在Windows中注册

64位Firebreath NPAPI插件未在Windows中注册,windows,plugins,64-bit,npapi,firebreath,Windows,Plugins,64 Bit,Npapi,Firebreath,我已经使用prep2015x64.cmd生成了一个测试插件 prep2015x64.cmd内容如下 echo off & setlocal enableextensions enabledelayedexpansion set _FB_GEN="Visual Studio 14 Win64" call "%~d0%~p0\common.cmd" %* if %errorlevel% == 2 exit /b 1 call "%~d0%~p0\winprep.cmd" 插件已经完全生成,

我已经使用prep2015x64.cmd生成了一个测试插件

prep2015x64.cmd
内容如下

echo off & setlocal enableextensions enabledelayedexpansion
set _FB_GEN="Visual Studio 14 Win64"
call "%~d0%~p0\common.cmd" %*
if %errorlevel% == 2 exit /b 1
call "%~d0%~p0\winprep.cmd"
插件已经完全生成,为了确保它是64位的,我用dumpbin/Headers交叉检查了它,它给出的DLL是64位的

FILE HEADER VALUES
            8664 machine (x64)
               9 number of sections
        56DFCDF9 time date stamp Wed Mar  9 12:47:13 2016
               0 file pointer to symbol table
               0 number of symbols
              F0 size of optional header
            2022 characteristics
                   Executable
                   Application can handle large (>2GB) addresses
                   DLL
然后,我尝试在C:\Windows\SysWOW64中使用提升的命令提示符注册它。 我使用以下命令进行注册

C:\Windows\SysWOW64> C:\Windows\SysWOW64\regsvr32.exe C:\workspace\firebreath\build\bin\TestPlugin\Release\TestPlugin.dll 
这给了我一个错误:

   The Module "C:\workspace\firebreath\build\bin\TestPlugin\Release\TestPlugin.dll"
 may not be compatible with version of Windows that you are running. 
Check if the module is compatible with an X86(32-bit) or X64(64-bit) version of regsvr32.exe
我使用的是Windows7,64位操作系统,所以我真的很困惑到底哪里出了问题。是插件的产生还是其他什么。 是否有其他方法可以注册插件


提前感谢。

最可能的问题是您使用的是32位版本的regsvr32;syswow64代表“Windows 64上的系统窗口”,换句话说,它是Windows 64位上的32位窗口。您实际上(非常讽刺地)想要使用
c:\windows\system32\regsvr32.exe
文件


为了安全起见,只需使用路径中的一个,而不是指定一个特定的路径,您将始终得到正确的路径(除非计算机的配置混乱)。如果是32位DLL,64位版本将自动链接到32位版本,但如果是64位DLL,32位版本将无法工作。

以下是我为使其工作所做的。我用的是VisualStudio2008

  • 使用fbgen.py生成插件
  • 运行prep2008x64.cmd。在此步骤中生成生成生成文件和vcproj
  • 在任何编辑器中打开Plugin.vcproj文件,并将/machine:X86替换为/machine:X64
  • 打开vcproj,然后使用“C:\Program Files(x86)\Microsoft Visual Studio 9.0\VC\atlmfc\lib\amd64”添加“其他库依赖项”。这是ATL库所必需的
  • 我不确定它是链接到32位库还是64位库。因此,我在链接器输入中显式添加了“其他依赖项”,如下所示

    “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\Kernel32.Lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\User32.Lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\Gdi32.Lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\WinSpool.Lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\Shell32.Lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\Ole32.Lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\OleAut32.Lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\Uuid.Lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\ComDlg32.Lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\AdvAPI32.Lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\Psapi.Lib” “…\ActiveXCore\Debug\ActiveXCore.lib” “…\PluginCore\Debug\PluginCore.lib” “pluginuto\Debug\PPL\u pluginuto.lib” “…\NpapiCore\Debug\NpapiCore.lib” “…\ScriptingCore\Debug\ScriptingCore.lib” “…\boost\libs\thread\Debug\boost\u thread.lib” “…\boost\libs\system\Debug\boost\u system.lib” “C:\Program Files\Microsoft SDK\Windows\v6.0A\Lib\x64\WinInet.Lib”

  • 将链接器高级中的“目标计算机”从“未设置”更改为“MachineX64(/Machine:X64)”

  • 构建插件
  • 使用普通cmd提示符(不是提升的cmd提示符)和普通regsvr32.exe(不像C:\Windows\SysWOW64那样特定)注册插件 C:\Users\Username>regsvr32.exe npPlugin.dll
  • 尝试使用Firefox 64位版本44.0.2,但无效。我认为这是插件的问题。但是没有,我后来从下载了ChromiumPortable_43.0.2357.18.paf.exe(64位)。低于44的Chromium版本仅支持npapi插件
  • 在中安装Chromium Portable和已启用的npapi插件chrome://flags 后来又推出了FBControl.htm。终于成功了
    谢谢你的回复。我已经尝试过在普通cmd提示符下直接使用regsvr32.exe,但仍然出现相同的错误。我是否需要在firebreath中检查或配置任何东西以使其正常工作,因为构建32位的插件完全可以正常工作。只有64位插件有问题。我没有遇到任何问题,但我还没有用vs2015构建,所以我不知道。如果它说模块可能不兼容,那么这听起来像是编译器的问题,所以我认为它与firebreath代码没有直接关系。如果有什么可能是cmake设置不正确的,再次感谢您的回复。。。我现在尝试了一些新的东西。我用prep2008x64.cmd构建了64位firebreath插件,然后用Visual Studio 2008构建了firebreath插件。现在我可以在cmd提示符下用普通的regsvr32注册插件了。但当我在Mozilla Firefox(64位)上启动FBControl.htm时,我得到了“需要一个插件来显示此内容”。我不知道,现在可能是什么问题……因为这显然需要排除故障,我强烈建议在firebreath dev google小组而不是在这里提问——这不是一个简单的问题。谢谢Taxilian的帮助。。我已经发布了我所遵循的步骤,以使其工作。。。