SyntaxHighlighter

2011年11月27日日曜日

NPAPI プラグインの作り方 for Windows その3

NPAPI プラグインの作り方 for Windows その3

続きです。

今回は、サンプルをビルドできるようにします。

ファイルの準備

前回の説明の中で書いたように、Gecko SDK 1.9.2と、バージョン 1.9.2 向けのnpruntime のサンプルをダウンロードします。

Gecko SDK は、展開して得られるincludeディレクトリ以下のみを使います。

面倒な人向けに、GitHubにまとめておいたので、そちらのoriginal_filesディレクトリ以下をお使いください。

以降では、これらをC:\work\test\includeおよびC:\work\test\npruntime以下に展開したとして話を進めます。

Visual Studio プロジェクトの作成

続いて、Visual Studio のプロジェクトを作成します。

Compiling The npruntime Sample Plugin in Visual Studioのページを参考に進めます。

プロジェクトの新規作成

以下のような設定で、新しいプロジェクトを作成します。

  1. メニューから「ファイル」-「新しいプロジェクト」を選びます。
  2. 種類は「Win32」の「Win32プロジェクト」を選びます。
  3. 「npsample」などの適当な名前をつけて、プロジェクトを作成します。
  4. ウィザード中の「アプリケーションの設定」で「DLL」を選び、「空のプロジェクト」にチェックを入れます。

ファイルの追加

サンプルファイルをプロジェクトに追加します。

ダウンロードしてあるC:\work\test\npruntime以下のファイルを、作成したプロジェクトのディレクトリにコピーしておくとよいでしょう。

  1. ソリューションエクスプローラーの「ソースファイル」を右クリックし、「追加」-「既存の項目」をクリックします。表示されたダイアログで、np_entry.cpp, npn_gate.cpp, npp_gate.cpp, plugin.cppを追加します。
  2. 同様に「ヘッダファイル」を右クリックし、plugin.h, resource.hを追加します。
  3. さらに「リソースファイル」を右クリックし、nprt.rcを追加します。

これで、図のような状態になっているはずです。

プロジェクトの設定

続いて、プロジェクトの設定をします。

  1. メニュー「プロジェクト」から「XXX のプロパティ」(XXX はプロジェクト名) をクリックし、プロパティを表示します。
  2. 左上の「構成」で Release を選択します。
  3. 「構成プロパティ」の「全般」の「ターゲット名」を、作成するプラグインの名前に設定します。これは、プロジェクト名と異なる名前を付ける場合には必須です。NPAPI プラグインの名前は、np*.dllという形式であるのが正しいようなので、プロジェクト名がそうなっていない場合は、ここで名前を設定します。
  4. 「構成プロパティ」の「全般」の「文字セット」を「マルチバイト文字セットを使用する」に設定します。
  5. 「構成プロパティ」の「C/C++」の「追加のインクルードディレクトリ」に、ダウンロードしておいた Gecko SDK のインクルードディレクトリである「C:\work\test\include」を追加します。
  6. 「構成プロパティの」の「C/C++」の「プリプロセッサ」の「プリプロセッサ定義」に、以下をすべて改行で区切って追加します。

    WIN32, _WINDOWS, XP_WIN32, MOZILLA_STRICT_API, XPCOM_GLUE, XP_WIN, _X86_

  7. 「構成プロパティの」の「リンカー」の「入力」の「モジュール定義ファイル」をnprt.defに設定します。nprt.defのフルパスを設定してください。

ファイルの修正

ビルド対象を「Debug」から「Release」に変更し、ビルドしてみると、いくつか警告やエラーが出ます。ここでは、その対応をします。

  1. まず、コンパイルエラーの一つ目であるplugin.cppprintfをすべて削除します。

    手作業で消してもよいですが、エディタなどで「printf」を「//printf」に置換すると楽だと思います。

  2. 続いて、strdupは ISO 標準の_strdupにするべきだ、という警告が出ているので、これもstrdup_strdupに置換することで対応しておきます。
  3. また、strcpyはセキュアではない、という警告については、対応が面倒なので、「プリプロセッサ定義」に_CRT_SECURE_NO_WARNINGSを定義リストに加えることで消してしまうことにします。
  4. nprt.defの一行目のLIBRARYの右に書かれた単語NPRTは、このプラグインの名前です。この名前が「構成プロパティ」で設定したものと異なる場合、警告が出るので、こちらも「構成プロパティ」で設定したものと同じ名前に設定します。
  5. 最後に、nprt.rc#include "afxres.h"#include "windows.h"に変更します。

これで、ひとまずビルドはでき、DLL ファイルが生成されるようになったと思います。

ここまでで、ひとまずプラグインとなる DLL のビルドができました。

しかし、このままではソースコードのバグにより、うまく動作しません

次回は、正しく動作するように修正していきます。

2 件のコメント: