• 締切済み

「MFCを使用しない」から「MFCのスタティックライブラリを使用」

VC++初心者ですが、 Win32Applicationで「MFCを使用しない」で作成したプログラムが正常動作しました。 そこで 「MFCを使用しない」から「MFCのスタティックライブラリを使用」にしてビルドしたところ、リンク中に どんどんエラーがでます。 関数関係のエラーなのですが。 (1) どうすればエラーを無くせるのでしょうか (2) 「MFCのスタティックライブラリを使用」にするとどの様なメリットがあるのか(説明している参考URLなど)。 教えて下さい

noname#34252
noname#34252

みんなが選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>(1) どうすればエラーを無くせるのでしょうか プロジェクトを作り直すのが手っ取り早いです。ソースを修正したり、プロジェクトのリンク対処のライブラリを変更したりすれば何とかできることはできますがおすすめしません。 作り直したプロジェクトに、自分が追加ソースをコピペしていけばちゃんと動くと思います。(ウィザードが自動で追加した分も含む) >(2) 「MFCのスタティックライブラリを使用」にするとどの様なメリットがあるのか(説明している参考URLなど)。 簡単に書くと、 メリット ・使用しない 実行ファイルサイズが小さくなる。 ・使用する 実行するときにMFCのランタイムDLLが不要になる。 デメリット ・使用しない MFCのDLLに依存するので、DLLのバージョンの違いで動作に不具合が出る可能性がある。 ・使用する 実行ファイルのサイズが馬鹿でかくなる。

noname#34252
質問者

お礼

ありがとうございます。 結局、実力不足で段階を飛び越えた事をやっていた気がします。 今後とも宜しくお願い致します 

関連するQ&A

  • OpenCV2.0or2.1でスタティックリンクライブラリをビルドした

    OpenCV2.0or2.1でスタティックリンクライブラリをビルドしたい 表題の件ですが、MFCをスタティックリンクさせてビルドしているアプリケーションだと、OpenCVをインストールしたときに出来上がるライブラリではエラーの出るものがあります。そのエラーはMFCをDLLでビルドすると出ません。なのでOpenCVをスタティックライブラリでビルドすることで解決しそうなのですが、OpenCVの場合これがかなりややこしいです。 アプリケーションのソリューションにOpenCVの各ライブラリのプロジェクトを挿入する方法も試みたのですが、依存関係が複雑で解決しきれませんでした。 ということでOpenCVのスタティックリンクライブラリのビルド方法を知りたいのですが、Webにある情報ではうまくいかないものが多いので、いろいろな見識をうかがわせていただければ幸いです。 ■環境 VisualStudio2008Professional+OpenCV2.0or2.1+CMake

  • ライブラリ??

    VCをつかってコーディングしています。 C言語仕様のネットワークプログラミングです。 socketをつくりデータのやり取りをするのですが gethostbyname()という関数が動作しません。 ちゃんとコンパイルもビルドもとおります。 ライブラリもwsock32.libやws2_32.libをリンクしています。 なにが原因なのかわかりません。 WINDOWSがまずいのでしょうか? 宜しくお願いします。

  • MFCに関する質問です。

    みなさん、はじめまして! VC2008でMFCアプリケーションプログラミングを始めて習うものですが、最初にソリューションファイルを作って何も書かない場合でビルドして、デバッグすると白いページが出てきますが、 OpenCVで画像処理の二値化のプログラムを書いて実行したら、ビルドしてエラーは発生しませんが、デバッグしてみると、「OLEの初期化に失敗しました。OLEのライブラリのバージョンが正しいことを確認してください」とのメッセージが出てきて、OKボタンを押すと、何も処理してくれません。 ネット上でいろいろ調べましたが、まだ解決できていません。 MFCについて、まだぜんぜんわからないので、上記のことをどう対処したらいいのかをご指導いただきたいです。 どうぞよろしくお願いします。

  • コンソールプログラムで使用するライブラリについて

    今まで疑問に感じつつないがしろにしていた部分なんですが、 例えばWin32APIを使用してプログラミングする時にコンパイラはリンクの際にwindowsのシステムフォルダ内にあるdllファイルを参照してリンクするんですよね(あってます?)?ではコンソールプログラム(dos上のプログラム)をリンクする際にはどうなるのでしょうか(例えばCの標準関数のライブラリはどこにあるのでしょうか?)? 私の予想では標準関数に関してはコンパイラが予め用意している静的ライブラリを使ってリンクしているんじゃないかと思うのですが実際どうなんでしょうか? 大した質問でもないのに長々とした文章になってしまいましたがよろしくお願いします。

  • MFCの静的リンクと再頒布条件

    こんにちは。いつもお世話になっております。 Visual Studio .NET 2003の VC++で アプリケーションプログラム(.exe)を作成しました。 ダイアログベースのアプリで、 「スタティックライブラリでMFCを使用する」の設定で ビルドしました。 質問したいのは、 MFCを静的リンクした場合の MFCの再頒布についてです。 1)冒頭のようなアプリを世の中に頒布することは、  マイクロソフトのソフトウェア使用許諾契約に対して  問題は無いのでしょうか?  (静的リンクしてるのでMFCの再頒布を伴っていると思ってます) 2)問題有り/無しは、.NET2003の eula.txtのどの条項で  判断できますでしょうか? --- eula.txtを読むと、MFCの動的リンクを利用し、 必要な DLLを再頒布をする際の条件等は明確に示されていますが、 静的リンクした場合の条件、再頒布可否の判断方法が示されていない ように読めます。 (単に理解不足かもしれませんが) 以上、よろしくお願いします。

  • VC++でのリンクエラー [error LNK2005]

    VC++でMFCを使用してダイアログベースのEXEを 作成しています。 以下のクラスのメンバ関数などを使用して、色の操作をしています。 CDC::SetBkColor() CDC::SetTextColor() ビルド時、以下のリンクエラーとなりました。 ---------------------------------------------- nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) はすでに LIBCMT.lib(delete.obj) で 定義されています Release/MenueTest.exe : fatal error LNK1169: 1 つ 以上の複数回定義されているシンボルが見つかりました link.exe の実行エラー ---------------------------------------------- MFC と C(?)のライブラリで delete()関数が競合しているようですが、これを回避する方法をご存知の方、ご教授願います。 <環境> OS:Windows2000 VC++6.0 <備考> リンクエラーになるのは以下の組み合わせです。 「MFCをスタティックリンクする+リリース版」 MFCをスタティックリンクしてもデバッグ版のビルドだとエラーになりません。 また、MFCをスタティックリンクしない場合もエラーにはなりません。 ただし、リンクエラーにならなかった場合、どちらのオブジェクトの delete()関数が呼ばれるか不明で、それが正しいのかも心配です。

  • 静的リンクライブラリについて

    WindowsのライブラリにDLLやLIBといった形式があり、それぞれ「動的リンクライブラリ」「静的リンクライブラリ」となっていますが、 静的リンクライブラリとしてビルドされたライブラリを、動的に実行プログラムにリンクさせることは(Cやアセンブラなどの)実装次第で可能なのでしょうか? ビルド時にリンカがやってくれてることを実行時に行えればOK・・・という素直な話ではないのでしょうか。DLLも実行時にGetProcAddress()などを使ってアドレス解決をするわけですし、LIBでも同じことをするのは不可能ではないのでは?と思ったのです。 ※動的/静的リンクの概念や具体的な使用方法などはネット上で調べることができましたが、中身にまで踏み込んだ解説をしているページには巡り合えませんでした。そういう具体的な解説のあるページの紹介だけでもとても助かります。また、「根本的に思い違いをしてるんでは?」というご指摘も非常に助かります。 ※私自身↑に対する需要はないのでコスト・メリットとかは度外視です。興味本位というやつです。 ※別段、Windowsやライブラリの形式にこだわりがあるわけではないですが、これが一番メジャーだろう、ということでWindowsのDLL/LIBを対象に質問させて頂きました。 よろしくお願いします。

  • ShellExecute関数について(初心者です)

    VC++初心者です。 関数を調べていて「おお!、これはいい」と思ったのが、ShellExecute関数です。 それで自作プログラムで使用したのですが・・・・うまくリンクできません。 プロジェクトの設定は「MFCを使用しない」で、自作しております。 教えて頂きたい事は、 (1)「MFCを使用しない」で、うまくリンクしてShellExecute関数を使用するためのプログラミング方法です。 (2)うまくできない場合に(あるいは将来のため)に備えて「MFCのスタティック・ライブラリを使用」で、リンクする方法も教えて下さい。 もう一つ教えて頂きたいのですが、ウインドウハンドラというものは、クリエイトしたウインド(1つ)と同じ物を渡せば良いのでしょうか。 宜しくお願い致します。

  • VC++6.0 でのライブラリ参照方法

    調べてはいるのですが、いまいち理解できないので以下の事を教えて下さい。 VC++6.0 のWin32 Console Applicationで、今回あるパッケージのdllを参照して使いたいと考えていますが、うまくいきません。 プロジェクト追加から、~.dllを追加して関数を使ってみたのですが、「error LNK2001: 外部シンボル "_関数名" は未解決ですとエラーがでます。 Console Applicationからはリンクできないのでしょうか? 何度も簡単な事で質問してしまい申し訳ありません。

  • CからMFCのDLLは呼出し可能?

    C言語プログラムからMFCで作ったDLL(MFC AppWizard)を呼び出すことは可能でしょうか? Cで作ったDLL(Win32 Dinamic-Link Library)と同じように呼び出せるのでしょうか? ご教示お願いいたします。