« 連休後半ですか | トップページ | トルネコの大冒険3 »

2005年5月 4日 (水)

C(++)からMASMの関数呼出し

 CとC++ってMASMで作った外部関数を呼び出す方法が違っているんですね。以前、Cで作った(というか拡張子を .c にした)ソースを、どっちにしても同じだと思い .cpp にしてコンパイルしたところ、コンパイル時はエラーが出なかったのに、リンク時に「(MASMで作った)外部シンボルが見つからない」と怒られました。

 色々と悩むこと数時間、「Win32 MASM プログラミング入門」「VC++でMASMを使えるようにする」で紹介されていた「Microsoft Support Q106399」のサンプルコードで次のように書いてあるのを見つけ、ようやく解決しました。

#ifdef __cplusplus
extern "C" {
#endif


void MasmSub (char *, short *, long *);

#ifdef __cplusplus
}
#endif

 つまり、Cでは単に「void MasmSub(char *, short *. long *);」とすればいいのに対し、C++では「extern "C" { void MasmSub(char *, short *, long *); }」としなければいけないってことですね。う~ん、今まではソースをCで書いて、拡張子 .cpp にしてC++としてコンパイルしても問題ないと思っていたけど微妙に違うことがあるんだ・・・。ややこしーぷらぷら・・・^^;

|

« 連休後半ですか | トップページ | トルネコの大冒険3 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/99795/3973881

この記事へのトラックバック一覧です: C(++)からMASMの関数呼出し:

« 連休後半ですか | トップページ | トルネコの大冒険3 »