我已经使用prep2015x64.cmd.生成了一个测试插件
prep2015x64.cmd
内容在下方给出
echo off & setlocal enableextensions enabledelayedexpansion
set _FB_GEN="Visual Studio 14 Win64"
call "%~d0%~p0common.cmd" %*
if %errorlevel% == 2 exit /b 1
call "%~d0%~p0winprep.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:WindowsSysWOW64> C:WindowsSysWOW64regsvr32.exe C:workspacefirebreathbuildbinTestPluginReleaseTestPlugin.dll
它给了我一个错误:
The Module "C:workspacefirebreathbuildbinTestPluginReleaseTestPlugin.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代表"Windows64上的系统Windows",换句话说,它是Windows64位上的32位窗口。实际上(具有讽刺意味的是(您想要使用c:windowssystem32regsvr32.exe
文件。
为了安全起见,只需使用路径中的一个,而不是指定一个特定的,你就会得到正确的(除非计算机的配置一团糟(。如果是32位DLL,64位版本将自动链接到32位版本,但如果是64位DLL,32位版本将不起作用。
以下是我所做的工作。我使用了Visual Studio 2008。
- 使用fbgen.py生成插件
- 运行prep2008x64.cmd.构建文件,vcproj将在该步骤中生成
- 在任何编辑器中打开Plugin.vcproj文件,并将/machine:X86替换为/machine:X64
- 打开vcproj,然后使用"C:\Program Files(x86(\Microsoft Visual Studio 9.0\VC\almfc\lib\aamd64"添加"其他库依赖项"。这是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"PluginAuto\Debug\PPL_PluginAuto.lib"….\NpapiCore\Debug\NpapiCore.lib"….\ScriptingCore\Debug\ScriptingCore.lib"….\boost\libs\thread\Debug\boost_thread.lib"….\boost\libs\system\Debug\boostrongystem.lib"C:\Program Files\Microsoft SDK \Windows\v6.0A\Lib\x64\WinInet.Lib">
-
将Linker Advanced中的"目标机器"从"未设置"更改为"MachineX64(/Machine:X64(">
- 构建插件
- 使用普通cmd提示符(非提升的cmd提示符(和普通regsvr32.exe(非特定于C:\Windows\SysWOW64(注册插件C: \Users\Username>regsvr32.exe npPlugin.dll
- 尝试使用Firefox 64位版本44.0.2,但没有成功。我认为这是插件的问题。但没有,我后来从https://sourceforge.net/projects/crportable/files/。Chromium 44以下版本仅支持npapi插件
- 在中安装Chromium Portable和已启用的npapi插件chrome://flags后来推出了FBControl.htm。终于成功了