Windowsでnixysaのサンプルプラグインをビルド
nixysaとは、Google ChromeやFirefoxで独自のプログインをつくるのに必要なNPAPIをラップしたライブラリ。
これを使用することで、複雑なNPAPIプラグインの製作を楽にしてくれる。
nixysaの準備
まず、C++の開発環境であるVisual C++とPython製のビルドツールscons、コードを取得するためにSubversionをインストールする。
svn checkout http://nixysa.googlecode.com/svn/trunk/ nixysa
とかするとnixysaソースコードが取得できる
問題はここから
VisualStudio2010を使い、付属するサンプルプラグインをビルドする際に、エラーが出る。
まず、hello_worldプラグインとcomplexプラグインで共通に出るエラー
C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winnt.h(6361) : error C2146: 構文エラー : ';' が、識別子 'ContextRecord' の前に必要です。 C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winnt.h(6361) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winnt.h(6361) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winnt.h(12983) : error C2065: 'PCONTEXT' : 定義されていない識別子です。 他 似たようなエラーがいっぱい
こいつはWindows.hがたりなからエラーが起きる。
だから、third_party\npapi\include\nptypes.hの41行目に
#ifndef nptypes_h_ #define nptypes_h_ #include <Windows.h> // ←ここに追加
を追加するとcomplexプラグインは見事ビルドに成功し、npcomplex.dllが生成される。
残るは、hello_worldプラグイン
原因はおそらくVisual C++コンパイラの使用だと思う。
nixysa\nixysa\static_glue\npapi\npn_api.cc(108) : error C2589: '(' : スコープ解決演算子 (::) の右側にあるトークンは使えません。 nixysa\nixysa\static_glue\npapi\npn_api.cc(108) : error C2059: 構文エラー : '::'
このエラーを回避するために、npn_api.ccを書き換える。
問題の部分
size_t size = std::min(sizeof(g_browser_functions), static_cast<size_t>(funcs->size));
こいつを
size_t size; { using namespace std; size = min(sizeof(g_browser_functions), static_cast<size_t>(funcs->size)); };
として、スコープ解決演算子 :: を書かない方法を取る。
すると、hello_worldプラグインもビルドされ、helloworld.dllが生成される。
まとめ
ビルドできたは良いが、nixysaの勉強してないから、hello_worldから見ていく