Palm Programmer's Laboratory

トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

C/C++ Sync Suite Companion601/7

← 6 章に戻る ↑トップへ 8 章に進む →

7 コンジットのデバッグ

この章はあなたがあなたのコンジットをデバッグするのを助ける情報を提供します。この章は以下の内容を含みます。

コンジットへの追加ログ サポートの追加 ^TOP^

あなたは HotSync マネージャを HotSync ログ ファイルの詳細レベルを高くするいくつかの異なるフラグと共に起動することができます。これらのフラグは Conduit Development Utilities Guide の中の 第 4 章 「HotSync マネージャのためのコマンド-ライン オプションの使用」? の中でリストにされています。

あなたは、コード 7.1 のように Windows API 関数 GetCommandLine() を呼び出し、引数リストを解析することによって、容易に HotSync デバッグ フラグのためのコンジットにサポートを追加することができます。PalmSource 社は、あなたが少なくとも冗長(-v)オプションをサポートすることを推奨します。なぜなら、これはあなたが問題とトラブルシュート テクニカル サポート呼び出しを追跡するのを助けることができるからです。


コード 7.1 HotSync.exe コマンド ライン引数の抽出

#define LOG_NORMAL  0x0000
#define LOG_L1      0x0001
#define LOG_L2      0x0002
#define LOG_VERBOSE 0x0004

DWORD dwLogLevel;

struct logOpt_t
{
   char *szCmd;
   DWORD dwCmdValue;
} logOptions[] = {
   _T("V"), LOG_VERBOSE,
   _T("L1"), LOG_L1,
   _T("L2"), LOG_L2
};

void ProcessCmdLineParameters()
{
   CString csCmdLine(GetCommandLine());
   csCmdLine.MakeUpper();
   
   CString csDelim = _T("-");

   dwLogLevel = LOG_NORMAL;
  int nSize = sizeof(logOptions)/sizeof(logOpt_t);

   for (int n=0; n<nSize; n++)
   {
      if (csCmdLine.Find(csDelim + logOptions[n].szCmd) != -1)
         dwLogLevel |= logOptions[n].dwCmdValue;
   }
}

一般的なトラブルシューティング ヘルプ ^TOP^

この節では、開発者がコンジットを実行したときに遭遇するいくつかの共通の問題の解決について説明します。他の有用な情報は、Conduit Development Utilities Guide の中の 付録 A 「デバッグ Tips」? を参照してください。

TIPS
あなたは、HotSync マネージャがあなたのコンジットを読み込もうとするときにあなたのコンジットについてのより多くの情報を取得するために、CDK と共に出荷されるコンジット検査ユーティリティを使用することができます。Conduit Development Utilities Guide の中の 第 6 章 「コンジット検査ユーティリティ」? を参照してください。

あなたのコンジットがカスタム ダイアログ ボックスの中に表示されないとき ^TOP^

あなたのコンジットが HotSync マネージャの Custom ダイアログ ボックスの中に表示されない場合、HotSync マネージャはあなたのコンジットを読み込んでいないことを意味します。表 7.1 はいくつかの可能性のある理由と解決方法を示しています。


表 7.1 読み込まれないコンジットの解決方法

理由 解決方法
コンジットは拡張 DLL としてビルドされた NOTE: あなたはコンジットを標準 DLL としてビルドしなければなりません。拡張 DLL としてビルドしてはいけません。
パスまたはコンジット名が正しくない あなたはフル パスとファイル名を指定するか、ファイル名だけの場合はファイルを HotSync マネージャの実行可能ディレクトリか Windows PATH の中に置かなくてはなりません。
あなたはあなたのコンジット DLL をHotSync ディレクトリにコピーして、DLL 名を提供することによってあなたのコンジットをインストールすることができます。Conduit Development Utilities Guide の中の 第 3 章 「コンジット コンフィグレーション ユーティリティ」? を参照してください。
また、あなたはあなたのコンジット DLL をあなた自身のディレクトリの中に置いたまま、あなたがコンジットをインストールするときに DLL のフル パス名を提供することができます(Conduit コンフィグレーション エントリの中で)。{[br}}いずれのケースでも、コンジットのパスとファイル名がコンジット コンフィグレーション ユーティリティの中で正しく記述されているかチェックしてください。
依存関係を解決できない あなたのコンジットがリンクをはる DLL はいずれも HotSync マネージャが使用するサーチ パスの中で使用可能でなければなりません。これは HotSync ディレクトリ、Windows System ティレクトリ、Windows PATH 環境変数の中でリストされているディレクトリを含みます。
コンジットを読み込むために使用される Win32 呼び出しは LoadLibrary() です。これは、必ずしも現在のコンジットの場所を含まないライブラリ/依存ライブラリを読み込むときの具体的なサーチ順序を保持します(フル パスが指定されている場合)。Microsoft ドキュメントLoadLibrary() を参照してください。
依存する関数を見つけられない 古いバージョンの必須 DLL が存在する場合、古バージョンは新しいバージョンがサポートするエクスポートされる関数のすべてをサポートしない可能性があります。例えば、syc20.dll です。あなたが新しい関数のいずれかを使用する場合、それらのインポートされる関数のアドレスを解決できないためあなたのコンジットは読み込まれません。
NOTE
あなたは依存問題を解決するために Dependency Walker (Depends.exe)を使用することができます: www.dependencywalker.com

あなたのコンジットが実行されないとき ^TOP^

表 7.2 はコンジットは HotSync マネージャのカスタム ダイアログ ボックスに表示されるけれども実行されない場合のいくつかの可能性のある理由と解決方法を示しています。


表 7.2 実行されないコンジットの解決方法

理由 解決方法
作成者 ID が一致しない HotSync マネージャは、ハンドヘルド上に一致する作成者 ID を持つアプリケーションがある場合にのみ、あなたのコンジットがこの要件から手を引かない限り、コンジットを実行します。GetConduitInfo() を参照してください。
バージョン番号が無効 あなたのコンジットのバージョン番号は以下の 2 つの呈すによって指定される範囲になければなりません:
 MIN_CONDUIT_VERSION 0x00000101
 MAX_CONDUIT_VERSION 0x00000200
あなたが GetConduitVersion() エントリ ポイントから返す値は MIN_CONDUIT_VERSION 0x00000101 から MAX_CONDUIT_VERSION 0x00000200 までの範囲でなければなりません。コード 3.2GetConduitVersion() 関数の例を示しています。
エントリ ポイント あなたがあなたのコンジットの中で MFC を使用している場合、あなたはあなたのすべてのエントリ ポイントの開始時に AFX_MANAGE_STATE(AfxGetStaticModuleState()) マクロをインクルードしなければなりません。あなたは、DLL からエクスポートされる各関数の開始点でこのマクロを使用することによって、明示的に現在のモジュール状態を DLL のためのものとしてセットしなければなりません。
不完全なクラス リスト あなたのコンジットが他の DLL の中で実装されているクラスを使用する場合、あなたはその DLL をあなたの CDynLinkLibrary チェインに追加しなければなりません。例えば、あなたが pdcmnxx DLL の中にある CHotSyncActionDialog を使用している場合、あなたはあなたのコンジットの InitInstance 関数の中で InitPdcmdn5DLL を呼び出さなくてはなりません。
同様に、あなたがあなたのコンジットの中で MFC OLE、MFC データベース(または DAO)、MFC ソケット サポートを使用している場合、あなたはあなたが使用する各 DLL のためにあらかじめ定義されている初期化関数を呼び出さなくてはなりません。AfxDbInitModule() 関数については、MFC ドキュメントを参照してください。

← 6 章に戻る ↑トップへ 8 章に進む →