• ベストアンサー

CファイルとCPPファイルのDLL作成

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

質問者が選んだベストアンサー

  • ベストアンサー
  • alfeim
  • ベストアンサー率58% (114/195)
回答No.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++を使った混合言語によるプログラミング を読みましょう。

その他の回答 (3)

回答No.3

コンパイラから実態が見えていないだけなのでは? きちんと外部コール関数は定義されていますか? ⇒ヘッダーや"*.def"等のファイル。

回答No.2

VC++と言う事ですが、 cファイルを既存のC++のワークスペースに取り込みたいんですよね? ⇒"c"ファイルの拡張子を"cpp"に変更して普通に組み込めませんか? それとも逆をしようとしているのですか? ※エラー箇所がわかっているなら原因はわかると思うので、  修正の方向ではだめなのですか?

sting
質問者

補足

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

回答No.1

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

sting
質問者

補足

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

関連するQ&A

専門家に質問してみよう