- ベストアンサー
VisualStudioでC関数の呼び出し
VisualStudio2008のなんらかのプロジェクトから C関数の呼び出しを行いたいのですが、 現在、VC++とMFCでWindowsForm等を作成して そこからextern"C"でC言語の関数をcallしているのですが MFC自体、無くなりつつあり、VS2008EXPRESSではサポートされていません。できれば無料版のEXPRESSで実現したいのですが どういう方法があるでしょうか? ダイアログとボタン程度のWindowsFormは使用したいのですが。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
アンマネージコードの呼び出しは、こちらを参考にしてみてください。 http://msdn.microsoft.com/ja-jp/library/ms235282.aspx
その他の回答 (2)
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 ソリューションの名前を「MyProject」と仮定して。 (1)「ソリューションエクスプローラー」の「ソリューション'MyProject'(1プロジェクト)」の下にある「MyProject」を右クリック (2)表示されたメニューの「プロパティ」項目をクリック (3)「ABCプロパティページ」の「共通言語ランタイムサポート」項目に「共通言語ランタイムサポート(/clr)」を選択 (4)OKボタンを押す (5)StdAfx.hの一番下辺りで、C言語で記述されたヘッダのインクルードやライブラリのリンクを行い、ソリューションのリビルド。 此れで、ネイティブなC/C++とC++CLIが共存出来ます。
補足
C++とCLIの共存は可能ですが、CとCLIはご指定の方法ではダメなのではないでしょうか? コマンド ライン エラー D8045 C ファイル 'file' は /clr オプションを使用してコンパイルできません。 が出てしまいますが、やり方間違っていますか?
- zwi
- ベストアンサー率56% (730/1282)
質問の内容が支離滅裂です。 >MFCでWindowsForm等を作成して MFCで画面デザインするのはリソースエディタで行いますが、WindowsFormを使うのは.NET系のC++/CLRを使う場合の画面デザインの方法です。どちらの話でしょうか? >そこからextern"C"でC言語の関数をcallしているのですが C++/CLR系は詳しくないですが、別に呼び出すのは問題ないはずです。 >MFC自体、無くなりつつあり、VS2008EXPRESSではサポートされていません。できれば無料版のEXPRESSで実現したいのですがどういう方法があるでしょうか? 誤解を解きたいんですが、元々無料の体験版であるExpressEdtionにMFCは搭載されていません。有料版だけが利用できます。
お礼
VisualC++2008ExpressEdition と フリーのリソースエディタXN Resource Editor を使用して Win32APIで作成する手がありますね。。。
補足
初心者なもので申し訳ございません。 実現したいのはGUIでボタンを押すとC関数がCallされる程度のものです。 C++/CLRのプロジェクトからextern"C"でC関数をcallしようとしてもビルド時にエラーになります。/CLRはC言語をサポートしていない? MFCはExpressEdtionには搭載されていないので、MFCを使わずに済ませたいという質問なのですが。 .NET系でGUIを作成してC関数がCallできればいいんですけれどもね。
お礼
しばらく待って、解釈に間違った点が無いようでしたら 質問は閉め切ります。
補足
ありがとうございます。大体解決しました。 間違っている部分がありましたらご指摘願います。 御解答のリンク先、 PInvoke を使用する方法はC言語のDLLの例しかのっておらずわかりませんでした。↓ここの書き方、C関数の場合どうなるんでしょうか? [DllImport("msvcrt", CharSet=CharSet::Ansi)] (私、DLLを概念としてよく理解しておりません。) が、 Invocation Servicesを使用する方法は動作しました。 作成したGUIのForm.hの先頭に下記を追加し using namespace System::Runtime::InteropServices; Cファイルはプロパティで「共通ランタイムサポートを使用しない」を選択。CLIは使用しない。 プリコンパイル済みヘッダーを使用しないを選択 一応これで動作しました。 extern"C"も不要なんですね。 これで.NETでGUIを作成し、C言語ファイルの関数をcallし、MFCを使用しない(EXPRESSで可)となったということでしょうか?