single.php

MFCでアンマネージコードをマネージコードで使う場合

C++/MFCで作成したコード(アンマネージコード)を.NET Framework(マネージコード)で利用する場合には、プロジェクトの設定変更が必要になるという話。

アンマネージとマネージコード

直訳すると「管理外コード」と「管理されたコード」で、管理とはMicrosoftが提供してきた「.NET Framework」上で動作するか否です。つまり「マネージ」コードとは「.NET Framework」のアセンブリを基本として動作するコードのことをです。

それに対して「アンマネージ」なコードは、「.NET Framework」に依存しないプログラムコード、例えばMFCなどのWin32APIなど昔からあるライブラリに依存しているコードを指します。

プロジェクトの変更

アンマネージコード(C++/MFC)で作成したプロジェクトでマネージコード(.NET Framework)を利用する場合には次のように設定します。

  1. 作成されているプロジェクトを開く。
  2. [プロジェクト|***のプロパティ]メニューを選択する。
  3. 表示された[*** プロパティページ]内の[構成プロパティ|全般]を選択する。
  4. [プロジェクトの既定値]内の[共通言語ランタイム サポート]を[共通言語ランタイム サポート(/clr)]に変更する。
  5. [OK]ボタンを選択して[*** プロパティページ]を閉じる。

上記の設定でMFCなどのアンマネージプロジェクトでマネージコードが利用できるようになります。

コード例

#using <mscorlib.dll>;
#using <System.dll>;
using namespace System;
using namespace System::Text::RegularExpressions;

String^ src = "テストhttp://www.hogehoge.co.jp/index.htmlテスト終了";
System::Text::RegularExpressions::Regex::Replace(src, "([^=""]|^)(http\:[\w\.\~\-\/\?\&amp;\=\@\;\#\:\%]+)", "$1$2", RegexOptions::ECMAScript);

エラーが出力される場合

上記のコードを追加して次のようなエラーが出る場合がある。
cl : コマンド ライン error D8016 : コマンド ライン オプション ‘/MTd’ と ‘/clr’ は同時に指定できません

このエラーの場合には次のようにプロジェクトのプロパティを変更する。
(MFCがスタティックリンクで利用されている場合のみ)

  1. [プロジェクト|***のプロパティ]メニューを選択する。
  2. 表示された[*** プロパティページ]内の[構成プロパティ|全般]を選択する。
  3. [プロジェクトの既定値]内の[MFC の使用]を[共有 DLL で MFC を使う]に変更する。
  4. [適用]ボタンを選択する。
  5. [*** プロパティページ]内の[構成プロパティ|C/C++|コード生成]を選択する。
  6. [プロジェクトの既定値]内の[ランタイム ライブラリ]を[マルチスレッド デバッグ DLL(/MDd)]に変更する。
  7. [OK]ボタンを選択して[*** プロパティページ]を閉じる。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です