プロが教える店舗&オフィスのセキュリティ対策術

CファイルとCPPファイルを同一DLLに取り込むことは可能でしょうか?もし可能であれば実現方法も教えて頂きたいのですが。
現状は別DLLを作成しているのですが、両ファイルを取り込んでビルドすると外部関数宣言をしている箇所がエラーになってしまいます。(extern "C"の箇所が・・・)

A 回答 (4件)

extern "C"を使っているのはCPPファイルですか?


またextern "C"が何をするか理解されていますか?

extern "C"の意味を理解なされていないのであれば素直に諦めるか拡張子をCPPで統一してProjectに登録した方が楽でしょう。

C++では関数名に引数の種類や個数の情報を付与し、オーバーロードを実現します。
extern "C"はその後に続く定義関数のlinkage命名方法をCと同じ命名規約で名前付けします。
つまりその中にオーバーロードした関数などがあると(命名規約が変わり一意に関数が特定できないため)旨くリンクできなくなる可能性があります(実際に試した事はないんでどうなるかは不明ですが)。

なのでc拡張子のファイルをcppにするだけでも命名規約はCPPにそろうため旨く動くはずです。

どうしてもextern "C"を使うのであればMSDNの
VisualC++ドキュメント-VisualC++ユーザーズガイド-VisualC++プログラマーズガイド-プログラム機能の追加-詳細-混合言語によるプログラミング-C++を使った混合言語によるプログラミング
を読みましょう。
    • good
    • 0

コンパイラから実態が見えていないだけなのでは?



きちんと外部コール関数は定義されていますか?
⇒ヘッダーや"*.def"等のファイル。
    • good
    • 0

VC++と言う事ですが、


cファイルを既存のC++のワークスペースに取り込みたいんですよね?
⇒"c"ファイルの拡張子を"cpp"に変更して普通に組み込めませんか?
それとも逆をしようとしているのですか?

※エラー箇所がわかっているなら原因はわかると思うので、
 修正の方向ではだめなのですか?

この回答への補足

元々はCで作成したDLLとCPPで作成したDLLと別ファイルだったのですが、
呼び元の問題でDLLを1つにまとめたいとのことでチャレンジしています。
当初は安易に全ソース取り込みDLLを作成すればできると考えていた
のですが、外部宣言のextern "C"と記述するとエラーが発生してしまいます。(Cファイルがあるから?)
"C"をはずせばDLLは作成できるのですが、DLL内を見ると外部関数名に"?"がついてしまいます。
拡張子だけ変えれば済む問題なのでしょうか?

補足日時:2001/12/06 15:54
    • good
    • 0

コンパイラは何を使用しているのですか?

この回答への補足

説明不足ですみません・・VC++6.0です。

補足日時:2001/12/06 15:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!