- 追加された行はこの色です。
- 削除された行はこの色です。
#norelated
#contents
* Today プラグインサンプルプログラム [#l3bd18a2]
** 手順 [#ca9d4d47]
基本的には[[Windows Mobileサンプルプログラム]]とプロジェクト作成方法は変わりませんが、アプリケーションの種類をDLLにしておきましょう。~
シンボルは後で、defファイルを使ってエクスポートするので、チェックはいらないです。~
#ref(Application.png,left,nowrap,アプリケーションの設定)
これで、DllMainのみのソースが作成されますので、ここに必要なものを追加していきましょう。~
** シェルからコールされる関数のエクスポート [#cf76846c]
Todayプラグインは、シェルからロードされる時に呼び出される関数「InitializeCustomItem」と、設定画面を作る場合は、その設定ダイアログ用のプロシージャ「CustomItemOptionsDlgProc」を、定義して外部から参照できるようにする必要があります。~
まだ設定画面を作るかどうかはわかりませんが、一応、両方定義しておきましょう。~
まずはソースに、以下を追加します。~
まずはソース(DllMainの下にでも)に、以下を追加します。~
HWND APIENTRY InitializeCustomItem( TODAYLISTITEM *ptli, HWND hwndParent )
{
return NULL;
}
BOOL APIENTRY CustomItemOptionsDlgProc( HWND hDlg, UINT message, UINT wParam, LONG lParam )
{
return FALSE;
}
TODAYLISTITEMの定義が、デフォルトでは参照できないので、以下のincludeも追加しておきましょう。~
プリコンパイルヘッダ(stdafx.h)の一番下のTODO以下でいいと思います。~
// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
#include <todaycmn.h>
InitializeCustomItemは、これから、today画面に表示するWindowを作成して、そのWindowハンドルを返すことになります。~
CustomItemOptionsDlgProcは、設定ダイアログを作った場合、そのダイアログのメッセージ処理を書きます。~
ダイアログプロシージャは、メッセージを処理した場合にTRUEを返すので、とりあえず今はFALSEで。~
次に、追加した関数を、DLLの外から見えるようにしてやる必要があります。~
しかも、これらの関数は、外からコールする際の関数の番号(序数)を240番と241番という値に固定してやらなければなりません。~
このために、defファイルを使用したエクスポートの設定をしてやります。~
まずは、ソリューションエクスプローラの追加したい箇所で右クリックして、追加→新しい項目を選びます。~
ソースにでも追加しておきますかね。~
#ref(adddef.png,left,nowrap,新しい項目)
で、コードのモジュール定義ファイルを選んで、適当に名前を入力します。~
#ref(adddef2.png,left,nowrap,新しい項目の追加)
出来たdefファイルには、ライブラリ名だけが記述されていますので、EXPORTS指定をして、先程の2関数を序数指定で追加します。~
LIBRARY "todaytest"
EXPORTS
InitializeCustomItem @240
CustomItemOptionsDlgProc @241
上記手順で作れば、自動的にプロジェクトのプロパティに、モジュール定義ファイルとして設定されていると思いますので、確認してみてください。~
手動でファイルを追加した場合は、モジュール定義ファイルの項目に、追加したファイルを設定してやる必要があります。~
#ref(moduledef.png,left,nowrap,モジュール定義ファイル)
この状態でビルドしてやれば、dllとexp(エクスポートファイル)と、インポートライブラリ(lib)ファイルが生成されるはずです。~
とはいえ、シェルはダイナミックにdllをロードして、序数指定で関数をコールするので、このインポートライブラリを使う人はいませんが。~