Palm Programmer's Laboratory
【CDK】 簡単なコンジットの作成
[開発情報]
by Irija Bari
※ 筆者はコンジット開発を始めたばかりであり、Visual C++ の使用経験もほとんどありません。文中におかしな記述、誤った記述がある可能性は十分にあります。誤りなどがありましたらご指摘ください。
CDK 6.0.1 を使って同期コンジット(Conduit)を作成する方法を説明します。サンプルとして Palm からメモ帳のメモを取得して、ファイルに書き込むプログラムを添付します。このページでの話題の前提条件は以下の通りです。
- 開発環境
- Microsoft Visual C++ 2005 .NET Express Edition
- Microsoft Platform SDK
- Palm OS Conduit Developer Kit version 6.0.1
- 同期の対象
- HotSync マネージャ バージョン 6.0.1 (CDK 6.0.1 に添付されている)
(※ HotSync マネージャ バージョン 4.1.0 でも動作するようです。ただし、あくまでも HotSync マネージャ バージョン 6.0.1 を対象にしています。) - Classic Database (Garnet OS で使用するデータベース)
- HotSync マネージャ バージョン 6.0.1 (CDK 6.0.1 に添付されている)
このドキュメントには以下の内容が含まれます。
- Visual C++ 2005 で DLL を作成する環境を整える。
- CDK 6.0.1 をインストールする。
- コンジットを作成する。
- コンジットを HotSync マネージャに登録する。
- 参考
- コメント欄
1. Visual C++ 2005 で DLL を作成する環境を整える。 ^TOP^
まず、Microsoft Visual C++ 2005 .NET Express Edition と Microsoft Platform SDK をインストールします。
次に、VC++ で DLL を作成する環境を整えます。以下の Web ページを参考にしてください。
- http://www.microsoft.com/japan/msdn/vstudio/express/2005/visualc/usingpsdk/
- http://blogs.wankuma.com/tocchann/archive/2006/05/18/25272.aspx
VC++ で実際に DLL を作成する場合は以下のようにプロジェクトを作成します。
- Visual C++ 2005 の「新規プロジェクト」で「Win32 コンソール アプリケーション」または「Win32 プロジェクト」を選択する。
- Win32 アプリケーション ウィザードの「アプリケーションの種類」は「DLL」、「追加のオプション」で「シンボルのエクスポート」を選択する。
この時点で DLL を作成するためのコードがある程度できあがっているので、コードの中身を読んでから作業を進めてください。
2. CDK 6.0.1 をインストールする。 ^TOP^
Garnet OS Development Suite のダウンロードを参考に ACCESS 社に登録を行います。
・Garnet OS Development Tools をクリックします。
・Conduit Developer Kit (CDK) をクリックします。
・Conduit Development Kit for Windows (CDK 6.0.1) の .exe というリンクをクリックします。
ダウンロードした実行ファイル(約 32 MB あります)を実行すればインストールは完了です。通常は C:\Program Files\PalmSource\Palm OS CDK がインストール先となります。(以後このフォルダを <CDK> と記述します。)
3. コンジットを作成する。 ^TOP^
作成手順 ^TOP^
- 「1. Visual C++ 2005 で DLL を作成する環境を整える。」を参考にして、VC++ で DLL 作成用のプロジェクトを作成します。
- コードの中に必須エントリ ポイントを実装します。「コンジット エントリ ポイントの実装」を参照してください。必須となるエントリ ポイントは条件によって異なりますが、ここでは以下のエントリ ポイントを実装します。
- OpenConduit() の中に処理を書きます。(「クラシック同期マネージャの使用」)主な手順は以下の通りです。
- コンジットを同期マネージャに登録します。以下を参照してください。
- Reference - SyncRegisterConduit()
- Companion - 「コンジットの同期マネージャへの登録」
- データベースをオープンします。以下を参照してください。
- Reference - SyncOpenDB() または SyncCreateDB() (新規にデータベースを作成する場合)
- Companion - 「データベースのオープン」
- データベースに対する処理を記述します。以下を参照してください。
- Reference - 一例: SyncReadNextModifiedRec(), SyncReadNextRecInCategory() など
- Companion - 「データベースに対する処理」
- データベースをクローズします。以下を参照してください。
- Reference - SyncCloseDB() または SyncCreateDBEx()
- Companion - 「データベースのクローズ」
- コンジットの登録を解除します。
- Referenece - SyncUnRegisterConduit()
- コンジットを同期マネージャに登録します。以下を参照してください。
参考 ^TOP^
参照ファイルの設定:
インクルードするファイル (.h ファイル) は、
- <CDK>\C++\Common\include
- <CDK>\C++\Win\include
の中にあります。プロジェクトの「プロパティ」>「構成プロパティ」>「C/C++」>「全般」の「追加インクルード ディレクトリ」に追加します。
DLL ファイルの使用
DLL を使用する API (例えば、「Common Sync Manager API」は「Sync20.dll」を使用します。C/C++ Sync Suite Reference の各 API を参照してください。)の場合、対応する ".lib" ファイルをプロジェクトのディレクトリにコピーし、コードの中に
#pragma comment(lib, "sync20.lib")
のように記述します。".lib" ファイルは、
- <CDK>\C++\Win\lib
の中にあり、".dll" ファイルは、
- <CDK>\Common\Bin
の中にあります。
※ この時点で筆者は「暗黙的リンク」を使用することを想定しているため ".lib" ファイルが必要になります。「明示的リンク」をしようする場合、".lib" ファイルは必要ありません。
メモ 1 ^TOP^
コンパイル時にヘッダ ファイルでの DWORD などの型定義についてエラーが出ますが、これは stdafx.h ファイルに
#include <windows.h>
という記述をすれば解決できます。Windows で使用する型は windef.h で定義されているそうです。
メモ 2 ^TOP^
CDK のライブラリで TCHAR 型を使っている場合は、VC++ 2005 .NET のプロジェクトの上で右クリック→プロパティ→構成プロパティ→全般の「文字セット」項目を「マルチ バイト文字セットを使用する」にセットすればコンパイルできます。
TCHAR 型の説明は以下(参照元: Paken.NET 筑波大学附属駒場中・高等学校 パーソナルコンピュータ研究部 http://paken.s1.hayasoft.com/sb/log/eid13.html)を参照してください。
C#という新しい言語のchar型はUNICODEですが、C/C++言語では、char型はASCII、 古い文字コードです。 C/C++言語でUnicodeの文字を表すにはwchar_t型を使い、VC++ならWCHAR型と typedefされています。 というわけで、UNICODE対応プログラムを作るにはWCHAR型を使えばOKです。 ・・・OKなのですが、実はもっと良い型があります。 TCHAR型です。 こいつは何かというと、ASCIIとUNICODE両方に切り替えることが出来る万能型です。 コンパイラの設定で、UNICODEを使用する設定にすれば、UNICODEを使用し、そうで なければWindows9x系でも動作するASCIIを使用することになります。 非常に簡単に両方に対応しているプログラムが生成できるので、プログラムを作成 する際にはTCHAR型をお勧めします。
4. コンジットを HotSync マネージャに登録する。 ^TOP^
- <CDK>\Common\Bin
の中にある「CondCfg.exe」を使用して登録します。また、「ConduitInspector.exe」を使用するとコンジットに実装されているエントリ ポイントをチェックすることができます。
CondCfg.exe 画面
CondCfg.exe のコンジット登録画面
ConduitInspector.exe のコンジット チェック画面
作成したコンジットを実行する HotSync 6.0.1 も上記のフォルダにあります。
あとは、HotSync を実行すれば作成したコンジットも実行されます。Palm OS Simulator で HotSync を実行するための設定は、【Palm OS Simulator】 HotSync を使用するための設定 を参照してください。
- 注
- C/C++ Sync Suite Companion によると、「CondCfg.exe」を使用しての登録は開発時のみで、ユーザに提供するときはインストーラを作成しなければならないそうです。(「インストーラの作成」 を参照。)
インストーラに添付することを許可されているコンジット関係のライブラリ ファイルは CondMgr.dll だけです。これもインストールするパソコンのどこにコンジット用のライブラリ ファイルが置かれているかを調べるためだけにしか使用することができません。(ライブラリ ファイルへのパスを取得した後はこの CondMgr.dll を削除しなくてはなりません。)
そのため、インストーラでコンジット関係のライブラリ ファイルを呼び出すには必然的に「明示的リンク」になります。
5. 参考 ^TOP^
クラシック データベース用のコンジットは、サンプル <CDK>\C++\Win\Samples\GenericConduit\Classic が参考になります。
サンプルとして Palm のメモ帳からメモを取得してファイル(C:\MemoConduit.txt)に書き出すコンジットを添付します。VC++ でプロジェクト名「MemoConduit」を作成し、添付ファイルの MemoConduit.cpp, MemoConduit.h で上書きしてビルドします。CondCfg.exe での登録時に、「Creator ID」に「IRJB」を指定してください。
- MemoConduit.zip(564) (MemoConduit.cpp, MemoConduit.h)
コンジット開発時には、HotSync を試験する必要があります。Palm シミュレータで HotSync を実行するための設定は、【Palm OS Simulator】 HotSync を使用するための設定 を参考にしてください。