C++ windows上的Firebreath插件无法加载到chrome中

C++ windows上的Firebreath插件无法加载到chrome中,c++,windows,google-chrome,firebreath,gpgme,C++,Windows,Google Chrome,Firebreath,Gpgme,我正忙于将现有的firebreath插件转换为使用gpgme,而不是通过操作系统和gpg二进制文件进行调用 我已经设法在x32系统上使用VS2010在windows中编译代码,但是在将插件加载到chrome中之后,我根本无法访问npapi代码。即使是简单的版本调用也会失败 当加载插件时,我没有看到任何可见的错误,但当使用sawbuck log viewer for chrome时,我会看到下面的erorr消息 .\renderer\webplugin_delegate_proxy.cc 347

我正忙于将现有的firebreath插件转换为使用gpgme,而不是通过操作系统和gpg二进制文件进行调用

我已经设法在x32系统上使用VS2010在windows中编译代码,但是在将插件加载到chrome中之后,我根本无法访问npapi代码。即使是简单的版本调用也会失败

当加载插件时,我没有看到任何可见的错误,但当使用sawbuck log viewer for chrome时,我会看到下面的erorr消息

.\renderer\webplugin_delegate_proxy.cc  347 PluginMsg_Init returned false
..\plugins\npapi\webplugin_impl.cc  271 Couldn't initialize plug-in
我尝试将我的代码与firebreath 1.4和1.6一起使用,但两个版本都不起作用。经过一些简单的调试,似乎使用gpgme提供的任何代码(无论是否调用)都会导致插件中断

我是通过以下几点得出这个结论的

  • 使用firebreath(版本1.4和1.6)创建了一个新项目
  • 将gpgme.h头添加到gmailGPGAPI.cpp,除了向项目添加所需的引用路径之外,没有做任何其他更改
  • 构建项目以创建dll(这将生成dll)
  • 在步骤2中,用dll替换我项目中现有的ddl,并用下面的代码测试它
  • plugin=document.createElement('object');plugin.id='plugin'
    plugin.type='application/x-gmailtest'
    document.body.appendChild(插件)
    log(“我的插件返回:“+plugin.valid”)
    log(“我的插件返回:+plugin.version”)

  • 这将返回valid=true,版本将返回我设置的值
  • 然后我修改了gmailGPGAPI.cpp,现在通过在version方法中调用gpgme_check_version(NULL)返回gpg版本。我使用这种方法是因为它可能是我可以测试的最简单的返回函数
  • 构建插件并将dll复制到chrome扩展,如步骤3-4所示。插件按照预期再次构建良好
  • 加载插件并尝试执行步骤4中的代码,此时它只返回我尝试访问插件的任何属性或方法的未定义。除了记录到sawbuck的错误之外,没有错误被打印到控制台或chrome中的任何其他地方
  • 我不知道该去哪里看,也不知道该尝试什么,因为我似乎无法找到一个可操作的错误来对付。我还减少了测试代码,使其成为一个新项目,只需一行代码就可以更容易地发现问题

    我应该注意到repo中的代码在linux/OSX中构建得很好,并正确加载到chrome中,因此我知道在某种程度上我的代码确实可以工作

    两种可能的路径:

  • 您可能有一个不可用的DLL依赖项,它阻止插件加载;如果在chrome上不工作的状态下运行regsvr32,它工作吗
  • 您的插件可能正在加载,然后崩溃。使用--plugin startup对话框启动chrome,然后当它弹出一个对话框警告您即将加载插件时,连接到该进程并查看该进程是否崩溃。在这一点上,您还可以设置断点来尝试计算它到达的距离

  • 再次检查pluginFig.cmake中的元数据;有时某些字段中的异常字符可能会导致类似问题。

    在将对象标记注入DOM之前,请不要在对象标记上设置mimetype。RC1140,我不确定您是否意识到这一点,但我的插件webpg npapi()它被设计成GnuPG的一个嵌入式浏览器界面——您的一些代码是基于我的另一个插件——gpgauth npapi——但对于特定任务来说,它的范围更窄。我建议在您的扩展中使用webpg npapi来提供到GnuPG的统一接口。该插件是GPL,在Windows、Linux和OSX上运行。在github.com上找到的我自己的扩展webpg chrome的源代码可以作为访问webpg-npapi.Hi Kyle提供的方法的参考。我将再次查看它,但无法在windows上轻松构建插件。现在我已经明白了,我将看看是否可以使用你的插件作为替代品。我过去曾使用过你的代码作为参考,但问题是atm让chrome加载插件,而不是插件中的代码。