次の方法で共有


Visual C++ デバイス プロジェクトのビルドとデバッグ

更新 : 2007 年 11 月

デバイス プロジェクトのビルドおよびデバッグは、デスクトップ プロジェクトのビルドおよびデバッグと少し異なります。

ビルドおよびデバッグの手法を次に示します。

  • 既定では、デバイス プロジェクトのスレッド処理モデルはフリーです。ただし、Windows CE では、CE OS イメージの作成時に DCOM オプションを選択しない場合、COM マーシャリングおよび関連する定義が十分にサポートされません。そのため、特定の CE プラットフォームでは、DCOM のサポートおよびシングルスレッドとマルチスレッドの定義に関する警告がコンパイラで生成される場合があります。この警告は、独自のコードでスレッドおよび同期を処理するように通知します。たとえば、ATL デバイス プロジェクトをコンパイルする場合、コンパイラは、_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA の定義に関する警告メッセージを表示することがあります。また、これは、COM オブジェクトの作成、Web サービスの使用、Windows Mobile プラットフォーム上の ATL COM オブジェクトなどのシナリオにも当てはまります。シングルスレッド オブジェクトの場合は、メイン ヘッダー ファイルで、このフラグを #define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA のように定義できます。コードでマルチスレッドを処理する場合は、この警告を問題なく無視できます。Windows CE での COM、DCOM、スレッド モデルの詳細については、Windows CE 5.0 のドキュメントの「COM スレッドとプロセス」およびコンポーネント サービス (「COM および DCOM」) を参照してください。

  • 既定では、静的なリンクを使用することでネイティブ デバイス アプリケーションが作成されます。動的なリンクに切り替えると、[追加ファイル] プロジェクト プロパティに次のランタイム DLL を追加できます。

    • MFC アプリケーションのリリース ビルド構成

      [追加ファイル] プロジェクト プロパティに msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;MFC80U.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0; というランタイム DLL を追加します。

    • MFC アプリケーションのデバッグ ビルド構成

      [追加ファイル] プロジェクト プロパティに msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;MFC80Ud.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0; というランタイム DLL を追加します。

    • ATL アプリケーションのリリース ビルド構成

      [追加ファイル] プロジェクト プロパティに msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0; というランタイム DLL を追加します。

    • ATL アプリケーションのデバッグ ビルド構成

      [追加ファイル] プロジェクト プロパティに msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0; というランタイム DLL を追加します。

      Windows CE DLL の読み込みの詳細については、Windows CE DLL の読み込み「LoadLibrary」を参照してください。

      c5fc53wa.alert_note(ja-jp,VS.90).gifメモ :

      異なるディレクトリから同じ名前の複数の DLL (たとえば、\Windows\aDLL.dll と \Program Files\aDLL.dll) を同時に読み込むと、予測できない結果が生じる場合があります。一度に 1 つの DLL のコピーを読み込むか、最初に読み込まれた DLL が呼び出されるようにすることをお勧めします。

その他の考慮事項を次に示します。

  • MFC 8.0 # に移植する場合は、_WIN32_WCE_PSPC を定義します。既定では、このフラグは MFC8.0 では定義されていません。

  • [アーキテクチャ用コンパイル] ボックスの一覧で Pocket PC 2003 または Smartphone 2003 を対象とする場合、[ARM4T] オプションはサポートされません。この一覧を探すには、[<プロジェクト名> プロパティ ページ] ダイアログ ボックスで、[構成プロパティ] をクリックし、[C/C++] をクリックします。その後、[詳細] をクリックし、[アーキテクチャ用コンパイル] を選択します。

  • GAPI 関数は、C++ で使用できますが、C では使用できません。コードに gx.h を含めることができるのは、C++ を使用している場合だけです。コード内で GAPI を使用している場合は、/TC コンパイラ オプションでコンパイルしないでください。

  • MFC 8.0 for Devices では、CommandBar の作成および挿入を制御します。CDialog::m_pWndEmptyCB メンバはサポートされなくなりました。このメンバは、ダイアログ ボックス用に作成された空の CCommandBar クラス (Pocket PC では、MenuBar とも呼ばれています) を指すために使用されていました。そのため、そのメンバを参照し、独自の MenuBar を挿入できました。

  • Checked::_strlwr_s_strlwr_s_l_mbslwr_s, _mbslwr_s_l_wcslwr_s_wcslwr_s_lChecked::tcslwr_s、および Checked::gcvt_s は、Windows CE を使用するプラットフォーム用に用意されています。

  • _WIN32_WCE_PSPC フラグは定義されなくなったため、代替手段として _WIN32_WCE_PSPC WIN32_PLATFORM_PSPC フラグを使用できます。

  • STL アプリケーションを移植する場合は、#include <deque.h> ではなく <deque> を含めます。

  • IDE は複数のプラットフォームをサポートします。ダイアログ ボックス リソースのデバイス プロジェクトで MFC または ATL の ActiveX オブジェクトをホストする場合は、同等のデスクトップ ActiveX プロジェクトで同等のコントロールを作成して登録する必要があります。コントロールは、リソース エディタでデバイスのダイアログ ボックス テンプレートに追加し、正しく実行できます。ActiveX コントロールのデスクトップ バージョンとデバイス バージョンには、背景色など、同じ GUID およびデザイン時プロパティを指定する必要があります。

参照

処理手順

方法 : Visual C++ プロジェクトでデバイスを用意する

概念

Visual C++ デバイス プロジェクトのデバッグと配置の設定

Visual C++ デバイス プロジェクトのデバッグと配置の設定

参照

[デバッグ] ([<プロジェクト名> プロパティ ページ] ダイアログ ボックス - [構成プロパティ]) (デバイス)

その他の技術情報

デバイス プロジェクトのデバッグ

Visual C++ デバイス プロジェクトの作成と移植

Visual C++ デバイス プロジェクトの開発