{{category 開発情報}} {{div_begin style="margin-bottom:-10px"}} !!!【CDK】簡単なコンジットの作成 {{div_end}} {{div_begin "style='position:absolute;right:0px;font-size:70%;margin-right:15px;margin-top:15px;width:250px;'"}} *{{goto Visual C++ 2005 で DLL を作成する環境を整える,Visual C++ 2005 で DLL を作成する環境を整える。}} *{{goto CDK 6.0.1 をインストールする,CDK 6.0.1 をインストールする。}} *{{goto コンジットを作成する,コンジットを作成する。}} **{{goto 作成手順,作成手順}} **{{goto 参考 3.2,参考}} **{{goto メモ 1,メモ 1}} **{{goto メモ 2,メモ 2}} *{{goto コンジットを HotSync マネージャに登録する,コンジットを HotSync マネージャに登録する。}} *{{goto 参考 5,参考}} {{div_end}} {{div_begin "style='position:relative;padding:0px;padding-right:5px;padding-left:10px;margin-right:250px;margin-top:20px;width:auto;border-right-style:dotted;border-right-width:2px;border-right-color:silver;'"}} 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 に添付されている){{br}}(※ HotSync マネージャ バージョン 4.1.0 でも動作するようです。ただし、あくまでも HotSync マネージャ バージョン 6.0.1 を対象にしています。) **Classic Database (Garnet OS で使用するデータベース) このドキュメントには以下の内容が含まれます。 *{{goto Visual C++ 2005 で DLL を作成する環境を整える,Visual C++ 2005 で DLL を作成する環境を整える。}} *{{goto CDK 6.0.1 をインストールする,CDK 6.0.1 をインストールする。}} *{{goto コンジットを作成する,コンジットを作成する。}} *{{goto コンジットを HotSync マネージャに登録する,コンジットを HotSync マネージャに登録する。}} *{{goto 参考 5,参考}} *{{goto comments,コメント欄}} !!{{anchor Visual C++ 2005 で DLL を作成する環境を整える}}1. Visual C++ 2005 で DLL を作成する環境を整える。 {{goto top,^TOP^}} まず、Microsoft Visual C++ 2005 .NET Express Edition と Microsoft Platform SDK をインストールします。 *[Microsoft Visual C++ 2005 .NET Express Edition|http://www.microsoft.com/japan/msdn/vstudio/express/visualc/] *[Microsoft Platform SDK|http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en] 次に、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 を作成するためのコードがある程度できあがっているので、コードの中身を読んでから作業を進めてください。 !!{{anchor CDK 6.0.1 をインストールする}}2. CDK 6.0.1 をインストールする。 {{goto top,^TOP^}} [Garnet OS Development Suite のダウンロード|http://ppl.palmwareinfo.com/index.cgi?page=BBS%2DPODS%2F6]を参考に ACCESS 社に登録を行います。 //[[Garnet OS Development Suite のダウンロード|BBS-PODS/6]] を参考に ACCESS 社に登録を行います。 '''・Garnet OS Development Tools をクリックします。''' {{img BBS-PODS/6:step03.gif,style='width:442px;height:236px;'}} //{{img step03.gif,style='width:442px;height:236px;'}} '''・Conduit Developer Kit (CDK) をクリックします。''' {{img fig1.png,style='width:550px;height:300px;'}} '''・Conduit Development Kit for Windows (CDK 6.0.1) の .exe というリンクをクリックします。''' {{img fig2.png,style='width:550px;height:300px;'}} ダウンロードした実行ファイル(約 32 MB あります)を実行すればインストールは完了です。通常は {{span style='color:blue;font-family:monospace;',C:\Program Files\PalmSource\Palm OS CDK}} がインストール先となります。(以後このフォルダを {{span style='color:blue;font-family:monospace;',}} と記述します。) !!{{anchor コンジットを作成する}}3. コンジットを作成する。 {{goto top,^TOP^}} !{{anchor 作成手順}}作成手順 {{goto top,^TOP^}} +{{goto Visual C++ 2005 で DLL を作成する環境を整える,「1. Visual C++ 2005 で DLL を作成する環境を整える。」}}を参考にして、VC++ で DLL 作成用のプロジェクトを作成します。 +コードの中に必須エントリ ポイントを実装します。[[「コンジット エントリ ポイントの実装」|C/C++ Sync Suite Companion601/3]]を参照してください。必須となるエントリ ポイントは条件によって異なりますが、ここでは以下のエントリ ポイントを実装します。 ++{{goto GetConduitName,GetConduitName()|C/C++ Sync Suite Reference601/6}} ++{{goto GetConduitVersion,GetConduitVersion()|C/C++ Sync Suite Reference601/6}} ++{{goto OpenConduit,OpenConduit()|C/C++ Sync Suite Reference601/6}} +{{span style='color:blue;font-family:monospace;',OpenConduit()}} の中に処理を書きます。([[「クラシック同期マネージャの使用」|C/C++ Sync Suite Companion601/4]])主な手順は以下の通りです。 ++コンジットを同期マネージャに登録します。以下を参照してください。 +++Reference - {{goto SyncRegisterConduit,SyncRegisterConduit()|C/C++ Sync Suite Reference601/5-2}} +++Companion - {{goto Registering Your Conduit with Sync Manager,「コンジットの同期マネージャへの登録」|C/C++ Sync Suite Companion601/4}} ++データベースをオープンします。以下を参照してください。 +++Reference - {{goto SyncOpenDB,SyncOpenDB()|C/C++ Sync Suite Reference601/4-1}} または {{goto SyncCreateDB,SyncCreateDB()|C/C++ Sync Suite Reference601/4-1}} (新規にデータベースを作成する場合) +++Companion - {{goto Opening Your Database,「データベースのオープン」|C/C++ Sync Suite Companion601/4}} ++データベースに対する処理を記述します。以下を参照してください。 +++Reference - 一例: {{goto SyncReadNextModifiedRec,SyncReadNextModifiedRec()|C/C++ Sync Suite Reference601/4-2}}, {{goto SyncReadNextRecInCategory,SyncReadNextRecInCategory()|C/C++ Sync Suite Reference601/4-2}} など +++Companion - {{goto Working with Databases,「データベースに対する処理」|C/C++ Sync Suite Companion601/4}} ++データベースをクローズします。以下を参照してください。 +++Reference - {{goto SyncCloseDB,SyncCloseDB()|C/C++ Sync Suite Reference601/4-1}} または {{goto SyncCloseDBEx,SyncCreateDBEx()|C/C++ Sync Suite Reference601/4-1}} +++Companion - {{goto Closing Your Database,「データベースのクローズ」|C/C++ Sync Suite Companion601/4}} ++コンジットの登録を解除します。 +++Referenece - {{goto SyncUnRegisterConduit,SyncUnRegisterConduit()|C/C++ Sync Suite Reference601/5-2}} !{{anchor 参考 3.2}}参考 {{goto top,^TOP^}} '''参照ファイルの設定:''' インクルードするファイル ({{span style='color:blue;font-family:monospace;',.h}} ファイル) は、 *{{span style='color:blue;font-family:monospace;',\C++\Common\include}} *{{span style='color:blue;font-family:monospace;',\C++\Win\include}} の中にあります。プロジェクトの「プロパティ」>「構成プロパティ」>「C/C++」>「全般」の「追加インクルード ディレクトリ」に追加します。 '''DLL ファイルの使用''' DLL を使用する API (例えば、「Common Sync Manager API」は「Sync20.dll」を使用します。[[C/C++ Sync Suite Reference|C/C++ Sync Suite Reference601]] の各 API を参照してください。)の場合、対応する ".lib" ファイルをプロジェクトのディレクトリにコピーし、コードの中に #pragma comment(lib, "sync20.lib") のように記述します。".lib" ファイルは、 *{{span style='color:blue;font-family:monospace;',\C++\Win\lib}} の中にあり、".dll" ファイルは、 *{{span style='color:blue;font-family:monospace;',\Common\Bin}} の中にあります。 ※ この時点で筆者は「暗黙的リンク」を使用することを想定しているため ".lib" ファイルが必要になります。「明示的リンク」をしようする場合、".lib" ファイルは必要ありません。 !{{anchor メモ 1}}メモ 1 {{goto top,^TOP^}} コンパイル時にヘッダ ファイルでの DWORD などの型定義についてエラーが出ますが、これは {{span style='color:blue;font-family:monospace;',stdafx.h}} ファイルに #include という記述をすれば解決できます。Windows で使用する型は {{span style='color:blue;font-family:monospace;',windef.h}} で定義されているそうです。 !{{anchor メモ 2}}メモ 2 {{goto top,^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型をお勧めします。 !!{{anchor コンジットを HotSync マネージャに登録する}}4. コンジットを HotSync マネージャに登録する。 {{goto top,^TOP^}} *{{span style='color:blue;font-family:monospace;',\Common\Bin}} の中にある「CondCfg.exe」を使用して登録します。また、「ConduitInspector.exe」を使用するとコンジットに実装されているエントリ ポイントをチェックすることができます。 '''CondCfg.exe 画面''' {{img CondCfg0.png,style='width:600px;height:323px;'}} '''CondCfg.exe のコンジット登録画面''' {{img CondCfg1.png,style='width:457px;height:472px;'}} '''ConduitInspector.exe のコンジット チェック画面''' {{img ConduitInspector.png,style='width:600px;height:421px;'}} 作成したコンジットを実行する HotSync 6.0.1 も上記のフォルダにあります。 あとは、HotSync を実行すれば作成したコンジットも実行されます。Palm OS Simulator で HotSync を実行するための設定は、【Palm OS Simulator】 HotSync を使用するための設定 を参照してください。 {{anchor note 1}} ::注 ::: [[C/C++ Sync Suite Companion|C/C++ Sync Suite Companion601]] によると、「CondCfg.exe」を使用しての登録は開発時のみで、ユーザに提供するときはインストーラを作成しなければならないそうです。([[「インストーラの作成」|C/C++ Sync Suite Companion601/9]] を参照。){{br}} ::: インストーラに添付することを許可されているコンジット関係のライブラリ ファイルは CondMgr.dll だけです。これもインストールするパソコンのどこにコンジット用のライブラリ ファイルが置かれているかを調べるためだけにしか使用することができません。(ライブラリ ファイルへのパスを取得した後はこの CondMgr.dll を削除しなくてはなりません。){{br}}そのため、インストーラでコンジット関係のライブラリ ファイルを呼び出すには必然的に「明示的リンク」になります。 !!{{anchor 参考 5}}5. 参考 {{goto top,^TOP^}} クラシック データベース用のコンジットは、サンプル {{span style='color:blue;font-family:monospace;',\C++\Win\Samples\GenericConduit\Classic}} が参考になります。 サンプルとして Palm のメモ帳からメモを取得してファイル({{span style='color:blue;font-family:monospace;',C:\MemoConduit.txt}})に書き出すコンジットを添付します。VC++ でプロジェクト名「MemoConduit」を作成し、添付ファイルの {{span style='color:blue;font-family:monospace;',"MemoConduit.cpp, MemoConduit.h"}} で上書きしてビルドします。CondCfg.exe での登録時に、「Creator ID」に「IRJB」を指定してください。 *{{ref MemoConduit.zip}} (MemoConduit.cpp, MemoConduit.h) コンジット開発時には、HotSync を試験する必要があります。Palm シミュレータで HotSync を実行するための設定は、【Palm OS Simulator】 HotSync を使用するための設定 を参考にしてください。 {{div_end}}