Todayプラグインは、ネイティブDLL(C/C++)でのみ作成が可能という認識でしたが、.CFで作成する方法があるという事を教えて頂いたので、早速試してみました。
Creating a Pocket PC Today Screen Plug-in with the .NET Compact Framework?
を参考に進めていきます。
?
ダウンロード&インストール
Download details: .NET Compact Framework Sample: Today Screen
をダウンロードして、インストールします。
デフォルトのインストール先が
C:\Program Files\.NET Compact Framework Samples\
になっていますので、そのままインストールを実行します。
以後、
C:\Program Files\.NET Compact Framework Samples\Today Screen\Code\Support
を、(CodeDir)と省略させて頂きます。
?
変換作業
このサンプルソースは、
もともとVS2003&eVC用向けに作成されているので、
VS2008を使用している場合、面倒な変換作業が発生します。
依存関係があるので下記の順番通り以外では、動作確認を行っておりません。
?
UnManagedプロジェクトのビルド
TodayScreenDataMgrのビルド
(CodeDir)\Support\TodayScreenSupport_UnManaged\TodayScreenDataMgr
TodayScreenDataMgr.vcp
を開き、変換ウィザードで変換を行います。
変換完了後、TodayScreenDataMgrのプロパティを開き、構成マネージャを開きます。
[アクティブソリューションプラットフォーム]を「Windows Mobile 6 Professional SDK (ARMV4I)」に変更します。
[構成プロパティ]→[リンカ]の出力ファイルを
$(PlatformName)\$(ConfigurationName)/TodayScreenDataMgr.dll
から
ArmRel\TodayScreenDataMgr.dll
へ置換します。
[構成プロパティ]→[リンカ]→[詳細]のインポートライブラリを
$(PlatformName)\$(ConfigurationName)/TodayScreenDataMgr.lib
から
ArmRel\TodayScreenDataMgr.lib
へ置換します。
[構成プロパティ]→[ビルドイベント]→[ビルド前のイベント]のコマンドラインに
if not exist ArmRel\CON mkdir ArmRel
if not exist X86Rel\CON mkdir X86Rel
を追加します。
[構成プロパティ]→[ビルドイベント]→[ビルド後のイベント]のコマンドラインに
copy ArmRel\TodayScreenDataMgr.dll X86Rel\TodayScreenDataMgr.dll
copy ArmRel\TodayScreenDataMgr.lib X86Rel\TodayScreenDataMgr.lib
を追加します。
Releaseビルド完了後、VS2008を終了します。
TodayScreenPlugIn_NETCFHostのビルド
(CodeDir)\TodayScreenSupport_UnManaged\TodayScreenPlugIn_NETCFHost
TodayScreenPlugIn_NETCFHost.vcp
を開き、変換ウィザードで変換を行います。
変換完了後、TodayScreenDataMgrのプロパティを開き、構成マネージャを開きます。
[アクティブソリューションプラットフォーム]を「Windows Mobile 6 Professional SDK (ARMV4I)」に変更します。
[構成プロパティ]→[リンカ]の出力ファイルを
$(PlatformName)\$(ConfigurationName)/TodayScreenPlugIn_NETCFHost.dll
から
ArmRel\TodayScreenPlugIn_NETCFHost.dll
へ置換します。
[構成プロパティ]→[リンカ]→[詳細]のインポートライブラリを
$(PlatformName)\$(ConfigurationName)/TodayScreenPlugIn_NETCFHost.lib
から
ArmRel\TodayScreenPlugIn_NETCFHost.lib
へ置換します。
[構成プロパティ]→[ビルドイベント]→[ビルド前のイベント]のコマンドラインに
if not exist ArmRel\CON mkdir ArmRel
if not exist X86Rel\CON mkdir X86Rel
を追加します。
[構成プロパティ]→[ビルドイベント]→[ビルド後のイベント]のコマンドラインに
copy ArmRel\TodayScreenPlugIn_NETCFHost.dll X86Rel\TodayScreenPlugIn_NETCFHost.dll
copy ArmRel\TodayScreenPlugIn_NETCFHost.lib X86Rel\TodayScreenPlugIn_NETCFHost.lib
を追加します。
Releaseビルド完了後、VS2008を終了します。
?
Managedプロジェクトのビルド
(InstallDir)\Today Screen\Code\Support\TodayScreenSupport_Managed
TodayScreenSupport_Managed.sln
を開き、変換ウィザードで変換を行います。
TodayScreenSupportCabの設定
(InstallDir)\Today Screen\Code\Support\TodayScreenSupport_Managed\TodayScreenSupportCab
TodayScreenSupportCab.vcproj
をエディタ等で開き、
$(VSInstallDir)CompactFrameworkSDK\v1.0.5000\bin\cabwiz.exe
を
C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe
へ、置換します。(VS2005をお使いの方は適切なファイルパスに変更してください)
ソリューションのビルド
ソリューションのビルドを行ってください
?
Wizardのインストール
(InstallDir)\TodayScreenSupport_Managed\TodayScreenSupport_Installerr\Release
TodayScreenSupport.msi
(InstallDir)\TodayScreenSupport_Managed\TodayScreenWizard_Installer\Release
TodayScreenWizard.msi
をクリックして、Custom Today Screen Wizardをインストールします。
?
VSの起動
[ファイル]→[新規作成]→[プロジェクト]で、新規Custom Today Screenプラグインが追加
されていません!!!
(いまここ)
?
[参照資料]
Creating a Pocket PC Today Screen Plug-in with the .NET Compact Framework
(追記)
このやり方でもUnManaged側のアプリを作る事は可能です。なのでManaged側のコードをUnManagedアプリに合わせて書くだけで適切に動くと思われます。ソース見たら判りますけど、UnManagedアプリはManagedアプリを起動させにいってるだけです。