0

私はここで既存のfirebreathプラグインを使用して、OSとgpgバイナリを介して呼び出しを行う代わりにgpgmeを使用するように変換するのに忙しいです。

x32システムでVS2010を使用してWindowsでコードをコンパイルすることができましたが、プラグインをchromeにロードした後、npapiコードにまったくアクセスできません。単純なバージョンの呼び出しでさえ失敗します。

プラグインをロードすると、目に見えるエラーは発生しませんが、Chromeにsawbuckログビューアを使用すると、以下のerorrメッセージが表示されます。

.\renderer\webplugin_delegate_proxy.cc  347 PluginMsg_Init returned false
..\plugins\npapi\webplugin_impl.cc  271 Couldn't initialize plug-in

私はfirebreath1.4と1.6の両方でコードを使用しようとしましたが、どちらのバージョンも機能しません。いくつかの簡単なデバッグの後、gpgmeによって提供されたコードを使用すると(呼び出されたかどうかに関係なく)、プラグインが破損するようです。

私は次のことを行うことでこの結論に達しました。

  1. firebreathを使用して新しいプロジェクトを作成しました(バージョン1.4および1.6)
  2. gpgme.hヘッダーをgmailGPGAPI.cppに追加し、プロジェクトに必要な参照パスを追加する以外は何も変更しませんでした。
  3. プロジェクトをビルドしてdllを作成します(これにより、dllが正常に生成されます)。
  4. プロジェクト内の既存のddlを手順2のdllに置き換え、次のコードでテストします

プラグイン=document.createElement('object'); plugin.id='プラグイン';
plugin.type ='application / x-gmailtest';
document.body.appendChild(plugin);
console.log( "私のプラグインが返されました:" + plugin.valid);
console.log( "私のプラグインが返されました:" + plugin.version);

  1. これはvalid=trueを返し、バージョンは設定したものを返します。
  2. 次に、gmailGPGAPI.cppを変更して、versionメソッドでgpgme_check_version(NULL)を呼び出してgpgバージョンを返すようにしました。私がテストできる最も単純な戻り関数であるため、このメソッドを使用しました。
  3. プラグインをビルドし、手順3-4のようにdllをChrome拡張機能にコピーします。プラグインは期待どおりに再び正常にビルドされます。
  4. プラグインをロードし、ステップ4でコードを実行してみます。その時点で、プラグインでアクセスしようとしているプロパティまたはメソッドに対して未定義が返されます。sawbuckに記録されたエラーを除いて、コンソールまたはChromeの他の場所にエラーは出力されません。

対処すべき実用的なエラーが発生しないようであるため、どこを見ればよいのか、何を試してみるのかわかりません。また、テストコードによって、問題を見つけやすくするために1行変更された新しいプロジェクトにまで削減しました。

リポジトリ内のコードはlinux/OSXで正常にビルドされ、Chromeに正しく読み込まれるため、あるレベルでコードが機能することがわかります。

4

1 に答える 1

0

2 つの可能なパス:

  1. 利用できない DLL 依存関係があり、プラグインが読み込まれない可能性があります。chromeで動かない状態でregsvr32を走らせたら動きますか?
  2. プラグインがロードされてからクラッシュする可能性があります。--plugin-startup-dialog で chrome を起動し、プラグインがロードされようとしていることを警告するダイアログが表示されたら、そのプロセスにアタッチして、プロセスがクラッシュするかどうかを確認します。この時点で、ブレークポイントを設定して、どこまで到達するかを把握することもできます。

PluginConfig.cmake のメタデータも再確認してください。一部のフィールドで特殊な文字が発生すると、このような問題が発生することがあります。

于 2012-06-13T21:44:52.173 に答える