いつも勉強させて頂いております。
質問なのですが、
VS2005、MFCにてDLLを作成したのですが、
警告warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含
んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してくださ
い。
と表示されます。どのようにしたら警告を消せるのでしょうか?
コンパイルは通って*.lib、*.dllは作成されています。
また、このDLLを今度はマネージプロジェクト(VC++ .NET)で
リンクすると、
fatal error C1189: #error : PCH に対してこのファイルをインクルードする前
に 'stdafx.h' をインクルードしてください
と言うエラーが出ます。
解決できなくて困っています。ご助言よろしくお願いします。
どちらもwarning/error messageに従えばいい。
επιστημηさん、ありがとうございます。
>どちらもwarning/error messageに従えばいい。
との事なのですが、どのように行えば良いのか
分からないのです。
Unicode形式での保存とはどのように行えば良いのか
わかりません。
プロジェクトのプロパティやツールのオプション等を
調べたのですがよく分かりません。
また、エラーC1189ですが、stdafx.hはインクルードしているのですが、
何故かこのエラーが取れません。MFCで作ったDLLのリンクを
外すとこのエラーは出ません。何処にstdafx.hをインクルード
すれば良いのですか?ちなみに、MFC側のDLLには既に*.cppファイルに
元からインクルードされていますし、.NET側の*.cppファイルにも
最初からstdafx.hが既にインクルードされています。
「このファイルをインクルードする前
に 'stdafx.h' をインクルードしてください」
このエラーが出てるファイルのインクルードより前に持ってけばいいんじゃ
ないの?
えーとさん、レスありがとうございます。
>このエラーが出てるファイルのインクルードより前に持ってけばいいんじゃ
ないの?
これは既に試しました。いろんな場所(*.h、*.cppファイル)に手動で
追記したのですが現象は変わりませんでした。
このエラーが起きる箇所はMFC側DLLのヘッダーにある
#ifndef __AFXWIN_H__
#error PCH に対してこのファイルをインクルードする前に 'stdafx.h' をイ
ンクルードしてください
#endif
という元からウィザードが勝手に作った一文で引っかかっているのですが、
ここをコメントアウトするとエラーは無くなります。
この「__AFXWIN_H__」というのが良く分からないのですが、
.NET側ではMFCを使っていないので引っかかるのでしょうか?
よろしくお願いします。
stdafx.h は各ソースの必ず'一番最初に'includeされていますか?
###余談です
Windowsアプリと他のターゲット用のアプリで、ソースを共有してて、
#ifdef _WINDOWS
#include stdafx.h
#else
#ほにゃらら
#endif
ってしたかったのに、同じようなエラーが出て出来ませんでした。
不便--;
もとのソースはなんですか、VC6.0じゃないですか。
もし、VC6.0だとするとその類のエラーが出るかもしれません。
K'Sさん、ITOさんありがとうございます。
>stdafx.h は各ソースの必ず'一番最初に'includeされていますか?
はい。全ての*.h、*.cppにstdafx.hを入れてみたのですが
現象は変わりませんでした。何故引っかかるのでしょう?
>もとのソースはなんですか、VC6.0じゃないですか。
>もし、VC6.0だとするとその類のエラーが出るかもしれません。
その通りです。元のソースはVC++6.0で、そのコードをVC2005のMFCで
再コンパイルしてVC2005の.NETでリンクしてます。
はじめからVC2005のMFCで作らないといけないのですか?
以上、よろしくお願いします。
>はじめからVC2005のMFCで作らないといけないのですか?
スケルトンをVC2005で作成してVC6.0で追加した部分をコピーして方法も
あると思います。
VC6.0とVC2003は両方インストールできたので、VC2005も同じように
出来ると思いますが.......
手元にVC2005がないので試していません。
VC6.0のソースはVC6.0でコンパイルするのが一番の近道です。
多分、マネージドだからではないですか?
アンマネージドでは大丈夫だと思います。
少なくとも私の環境ではうまく行っています。
VC6.0は元々マネージドを考慮に入れていない
(当時はマネージドなんてありませんしてたし)
からだと思いますけれど。
あうあう。誤字
誤)
(当時はマネージドなんてありませんしてたし)
正)
(当時はマネージドなんてありませんでしたし)
ITOさん、PATIOさん、レスありがとうございます。
いろいろと自分なりに試行錯誤してまして返事が遅れました。
根本的な原因は未だ掴めてはいないのですが、
VC2005のMFCでのDLLをVC2005の.NETへリンクするのをやめ、
直接*.hと*.cppを.NETのプロジェクトにほおりこんでみました。
すると予想してたとおり、訳の分からないエラーが盛りだくさん
出てきました。当然と言えば当然なのですがマネージコードに
アンマネージ(MFC)コードを単純に入れてもダメというのは分かっていましたが、
ネット上でいろいろググっていると、アンマネージコードとの混在は
/clr:pureオプションではダメっぽい事を書いてあるサイトがあり、
試しに/clrオプションに変えてみてコンパイルしたところ、あれだけ
たくさん出たエラーが見事にエラー0でコンパイルが通りました。
これにはちょっとびっくりしましたが、実行すると実行時エラーで
落ちるオチかなと思いつつ実行すると問題なく動いています。
/clr:pureを/clrに変えると何か問題とかありますか?
今のところこれで問題なく意図した動きをしてくれているので
問題ないのであればこのままこれで開発したいと考えています。
ご教授よろしくお願いします。
>/clr:pureを/clrに変えると何か問題とかありますか?
アンマネージドコードで/clr:pure指定するほうが問題だろう
むしろさん
>アンマネージドコードで/clr:pure指定するほうが問題だろう
いえ、もともとマネージコードです。マネージコードに
MFCで作った*.hと*.cppをマネージプロジェクトに追加し、
そのマネージプロジェクトの/clr:pureを/clrにしたのです。
とりあえず動いているのでこれで解決とします。
皆さんどうもありがとうございました。