dポイントプレゼントキャンペーン実施中!

VC++6.0で作成したプログラムをVC++.NET2005に移植しました。
ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。
ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。
どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。

A 回答 (9件)

VC++.NET2005のエディションをお教えください。


Express Editionでは、リソースエディタがない、
ATL, MFCが使えないなどの制限がいくつか存在します。

また、VC2005などでは.NET Frameworkの開発が前提となっており
WIN32APIを使用する場合などについては、Platform SDKを
インストールする必要があります。

この回答への補足

回答ありがとうございます。
VC++.NET2005のエディションは「Professional Edition」です。

現在、開発はクライアントPC(WindowsXP Pro)で行っているのですが
クライアントPCにPlatform SDKをインストールすればよいのでしょうか?
それともサーバーにPlatform SDKをインストールしビルドはサーバーで行わなければならないのでしょうか?

補足日時:2007/06/22 11:46
    • good
    • 0

>『C:\Program Files\Microsoft Visual Studio 8


\VC\atlmfc\include』に変更しビルドしてみましたがダメでした。
どうダメだったのか、教えてください。

Platform SDKはWindows2003Serverの物をXPに入れてビルド可能です。

この回答への補足

回答ありがとうございます。

>>『C:\Program Files\Microsoft Visual Studio 8
>\VC\atlmfc\include』に変更しビルドしてみましたがダメでした。
>どうダメだったのか、教えてください。
これまでと同様に『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。

>Platform SDKはWindows2003Serverの物をXPに入れてビルド可能です。
分かりました。早速試してみます。

補足日時:2007/06/26 13:43
    • good
    • 0

No.4/5です。


私が言った、「VC6のヘッダ」というのはMFCを
使用する場合に検索パス内にあるMFC用のヘッダの事を言っています。
検索パスがVC6のものになっていると、これが常にインクルードされてしまう
可能性があるので、リンクしていないのにご質問のようなエラーが出る可能性があります。(言い方が悪くて申し訳ないです。。。)
上記の場合検索パスその物をVC2005に変更する必要があります。

なお、Platform SDKのほうですが、ビルドする環境に入っていれば
問題ありません。(逆に言えばビルドする可能性のあるマシンには必要です)

この回答への補足

回答ありがとうございます。
>私が言った、「VC6のヘッダ」というのはMFCを使用する場合に検索パス内にあるMFC用のヘッダの事を言っています。検索パスがVC6のものになっていると、
>これが常にインクルードされてしまう可能性があるので、リンクしていないのにご質問のようなエラーが出る可能性があります。
そういうことだったのですね。理解できなくて申し訳ありません。
検索パスとはソリューションのプロパティのどこの部分でしょうか?「リンカ」の「全般」の「追加のライブラリディレクトリ」のところでしょうか?
現在の設定は『C:\Program Files\Microsoft Visual Studio\VC98\ATL\Include』となっています。
これを『C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include』に変更しビルドしてみましたがダメでした。どう設定すればいいのでしょうか?

>なお、Platform SDKのほうですが、ビルドする環境に入っていれば問題ありません。(逆に言えばビルドする可能性のあるマシンには必要です)
Platform SDKをダウンロードする為に検索してみたのですが、Windows2003Server用のものしか見つかりませんでした。
ということはやはりローカルPC(WindowsXP Pro)ではビルド出来ないのですね。

補足日時:2007/06/25 13:47
    • good
    • 0

★回答者 No.1 です。


・拡張子が vcproj のファイルをエディタで開いて回答者 No.4 さんのアドバイスにある
>単純にリンクライブラリのところから"42"という文字列を"80"に変更してください。
 を行いましたか?
 拡張子が vcproj のファイルは『プロジェクト名.vcproj』というファイル名ですよ。
 このファイルの MFC『42』をMFC『80』に編集するわけです。
>この方法が分かりません。
 ↑
 という事は、まだ vcproj のファイルは編集していないのですよね。
 vcproj のファイル内を grep などで検索すれば見つかるはずですが…。
・以上。

この回答への補足

回答ありがとうございます。
『プロジェクト名.vcproj』のファイル内は検索しましたが「mfc42.lib」は見つかりませんでした。
ソリューションのプロパティを見ても『プロジェクト名.vcproj』のファイルをテキストエディタで直接開いても「mfc42.lib」が見つからないので「mfc80.lib」に変更ができずに困っています。
またgrepで検索しても『.lib』と『.obj』ファイルにしか記述が見つかりません。

補足日時:2007/06/25 09:34
    • good
    • 0

この状況が再現できる 最低の手順ってわかりませんか?



VC6側のプロジェクトの作成方法
VC2005側でのプロジェクトの取り込み方、または作成方法

-----

VC6側でMFCアプリ、共有DLL使用

ここで行った手順 ...

VC2005でVC6で作成した dswファイルを指定して開く
変換ウィザードが起動して VC2005noソリューションに変換
    • good
    • 0

>ソリューションのプロパティのどこを見ても「mfc42d.lib」という記述が見つからない。


インクルードパスにVC6 の MFC をインクルードパスに指定して
いませんか?
もしそうなら、VC6のヘッダにリンクの記述があるかもしれません。
VC2005のMFCのインクルードパスに変更してみてください。

この回答への補足

何度も回答ありがとうございます。
ご指摘に従いVC6のヘッダを見てみたのですが記述は見つかりませんでした。
またgrepで検索したのですが『.lib』と『.obj』ファイルにしか記述が見つかりません。
私の見てるところが違っているのでしょうか?

補足日時:2007/06/22 18:07
    • good
    • 0

エディションの問題ではなさそうですね。



VC2005にMFC42が単純に未対応のようですので、
VS2005ではMFC8.0のmfc80d.libにしてください。
単純にリンクライブラリのところから"42"という文字列を"80"に変更してください。これはデバッグ用なので、リリース用も忘れずに修正してください。

プロジェクトの中(ソリューションのツリーの中)に明示的にmfc42d.libを登録している場合はvcのプロジェクトは"プロジェク名.vcproj"で、単なるテキストファイルなので、その中も上記の変更を入れてください。

ライブラリをリンクするプリプロセッサがVC6のヘッダファイルにある
場合はLIBC.lib を特定のライブラリを無視に指定しビルドすれば、
いけると思います。(この方法はあまりお勧めできないので、
上記の2つ目までを新規プロジェクトで作る事をお勧めしますが。。。)

この回答への補足

回答ありがとうございます。
ご指摘のとおりVS2005ではMFC8.0のmfc80d.libを使用するというのは分かったのですが、
"単純にリンクライブラリのところから"42"という文字列を"80"に変更してください。"
この方法が分かりません。
ソリューションのプロパティのどこを見ても「mfc42d.lib」という記述が見つからないのです。もちろんプログラム内で明示的に記述しているところもありません。

補足日時:2007/06/22 13:48
    • good
    • 0

VC2005でVC6から変換したプロジェクトを開いて


メニューの プロジェクト > プロパティ
表示されたダイアログの 左ペイン(Tree)の中から
構成のプロパティ > リンカ > 入力の追加の依存ファイルの項目に
『mfc42.lib』が記述されていませんか?

この回答への補足

回答ありがとうございます。
ご指摘の箇所にも他のプロパティにも『mfc42.lib』は記述してありません。

補足日時:2007/06/22 13:08
    • good
    • 0

★アドバイス


・ソリューションの構造プロパティ→全般に『MFC の使用』という項目があります。
 ここの設定で
 (1)標準 Windows ライブラリを使用する
 (2)スタティック ライブラリで MFC を使用する
 (3)共有 DLL で MFC を使用する
 が選択できます。
・なお、当方は VC++.NET 2003 ですけど。参考にどうぞ。
・以上。

この回答への補足

アドバイスありがとうございます。
VC++.NET2005でも
 (1)標準 Windows ライブラリを使用する
 (2)スタティック ライブラリで MFC を使用する
 (3)共有 DLL で MFC を使用する
が選択できます。
VC++6.0で作成したプログラム、VC++.NET2005へ移植したプログラムとも(3)を設定しています。
VC++6.0では「mfc42.lib」を使用していてVC++.NET2005では「mfc80.lib」を使用しているというのは分かったのですが
移植した場合、「mfc42.lib」の参照定義を「mfc80.lib」へ変更すればいいのか、またどう変更すればいいのか分かりません。

補足日時:2007/06/22 10:52
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています