2015年3月9日月曜日

VC++2005 で C言語ソースをコンパイルする方法


VC++2005 で C言語ソースをコンパイルする方法

C言語のプログラムをデバックしたいけど実機やデバッカーが無かったりしてデバックできないことあります。
VC++6.0であれば以下の①を行うとコンパイルが通るのですが VC++2005だとコンパイルが通りませんでした。
しかし、②を行えばコンパイルできるようになりました。

①プリコンパイル済みヘッダーの作成/使用 -> プリコンパイル済みヘッダーを使用しない

②C言語のソースは、拡張子を[.h]にし、 namespace と extern "C" を追加する。


例)プロジェクト名 "Mypro" とし、Form に button1 と textbox1 を配置し、
  button1 をクリックすると C言語のソースである sample.h でセットした文字列を textbox に表示するというプログラムです。

--------------------------
[ sample.h ]
--------------------------
namespace Mypro {               // namespace を追加( Mypro はプロジェクト名 )

  extern "C" {                  // extern "C" を追加

    char abab[] = "aaaa";

    char* sub(){
      return (char*)&abab;
    }
  }
}
--------------------------
[ Form1.h の抜粋 ]
--------------------------
  private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {

    char* buf = sub();

    this->textBox1->Text = System::Runtime::InteropServices::Marshal::PtrToStringAnsi((IntPtr)buf);

  }