PCH(プリコンパイル済みヘッダー)について – プログラミング – Home

PCH(プリコンパイル済みヘッダー)に...
 
通知
すべてクリア

[解決済] PCH(プリコンパイル済みヘッダー)について


こんこん
 こんこん
(@こんこん)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

いつも勉強させて頂いております。

質問なのですが、
VS2005、MFCにてDLLを作成したのですが、
警告warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含
んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してくださ
い。
と表示されます。どのようにしたら警告を消せるのでしょうか?
コンパイルは通って*.lib、*.dllは作成されています。

また、このDLLを今度はマネージプロジェクト(VC++ .NET)で
リンクすると、
fatal error C1189: #error : PCH に対してこのファイルをインクルードする前
に 'stdafx.h' をインクルードしてください
と言うエラーが出ます。

解決できなくて困っています。ご助言よろしくお願いします。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

どちらもwarning/error messageに従えばいい。


返信引用
こんこん
 こんこん
(@こんこん)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

επιστημηさん、ありがとうございます。

>どちらもwarning/error messageに従えばいい。
との事なのですが、どのように行えば良いのか
分からないのです。

Unicode形式での保存とはどのように行えば良いのか
わかりません。
プロジェクトのプロパティやツールのオプション等を
調べたのですがよく分かりません。

また、エラーC1189ですが、stdafx.hはインクルードしているのですが、
何故かこのエラーが取れません。MFCで作ったDLLのリンクを
外すとこのエラーは出ません。何処にstdafx.hをインクルード
すれば良いのですか?ちなみに、MFC側のDLLには既に*.cppファイルに
元からインクルードされていますし、.NET側の*.cppファイルにも
最初からstdafx.hが既にインクルードされています。


返信引用
えーと
 えーと
(@えーと)
ゲスト
結合: 19年前
投稿: 54
 

「このファイルをインクルードする前
に 'stdafx.h' をインクルードしてください」
このエラーが出てるファイルのインクルードより前に持ってけばいいんじゃ
ないの?


返信引用
こんこん
 こんこん
(@こんこん)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

えーとさん、レスありがとうございます。

>このエラーが出てるファイルのインクルードより前に持ってけばいいんじゃ
ないの?

これは既に試しました。いろんな場所(*.h、*.cppファイル)に手動で
追記したのですが現象は変わりませんでした。
このエラーが起きる箇所はMFC側DLLのヘッダーにある

#ifndef __AFXWIN_H__
#error PCH に対してこのファイルをインクルードする前に 'stdafx.h' をイ
ンクルードしてください
#endif

という元からウィザードが勝手に作った一文で引っかかっているのですが、
ここをコメントアウトするとエラーは無くなります。
この「__AFXWIN_H__」というのが良く分からないのですが、
.NET側ではMFCを使っていないので引っかかるのでしょうか?

よろしくお願いします。


返信引用
K'S
 K'S
(@K'S)
ゲスト
結合: 19年前
投稿: 2
 

stdafx.h は各ソースの必ず'一番最初に'includeされていますか?

###余談です
Windowsアプリと他のターゲット用のアプリで、ソースを共有してて、

#ifdef _WINDOWS
#include stdafx.h
#else
#ほにゃらら
#endif

ってしたかったのに、同じようなエラーが出て出来ませんでした。
不便--;


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

もとのソースはなんですか、VC6.0じゃないですか。
もし、VC6.0だとするとその類のエラーが出るかもしれません。


返信引用
こんこん
 こんこん
(@こんこん)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

K'Sさん、ITOさんありがとうございます。

>stdafx.h は各ソースの必ず'一番最初に'includeされていますか?
はい。全ての*.h、*.cppにstdafx.hを入れてみたのですが
現象は変わりませんでした。何故引っかかるのでしょう?

>もとのソースはなんですか、VC6.0じゃないですか。
>もし、VC6.0だとするとその類のエラーが出るかもしれません。
その通りです。元のソースはVC++6.0で、そのコードをVC2005のMFCで
再コンパイルしてVC2005の.NETでリンクしてます。
はじめからVC2005のMFCで作らないといけないのですか?

以上、よろしくお願いします。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>はじめからVC2005のMFCで作らないといけないのですか?
スケルトンをVC2005で作成してVC6.0で追加した部分をコピーして方法も
あると思います。
VC6.0とVC2003は両方インストールできたので、VC2005も同じように
出来ると思いますが.......
手元にVC2005がないので試していません。
VC6.0のソースはVC6.0でコンパイルするのが一番の近道です。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

多分、マネージドだからではないですか?
アンマネージドでは大丈夫だと思います。
少なくとも私の環境ではうまく行っています。
VC6.0は元々マネージドを考慮に入れていない
(当時はマネージドなんてありませんしてたし)
からだと思いますけれど。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

あうあう。誤字

誤)
(当時はマネージドなんてありませんしてたし)

正)
(当時はマネージドなんてありませんでしたし)


返信引用
こんこん
 こんこん
(@こんこん)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

ITOさん、PATIOさん、レスありがとうございます。
いろいろと自分なりに試行錯誤してまして返事が遅れました。

根本的な原因は未だ掴めてはいないのですが、
VC2005のMFCでのDLLをVC2005の.NETへリンクするのをやめ、
直接*.hと*.cppを.NETのプロジェクトにほおりこんでみました。
すると予想してたとおり、訳の分からないエラーが盛りだくさん
出てきました。当然と言えば当然なのですがマネージコードに
アンマネージ(MFC)コードを単純に入れてもダメというのは分かっていましたが、
ネット上でいろいろググっていると、アンマネージコードとの混在は
/clr:pureオプションではダメっぽい事を書いてあるサイトがあり、
試しに/clrオプションに変えてみてコンパイルしたところ、あれだけ
たくさん出たエラーが見事にエラー0でコンパイルが通りました。
これにはちょっとびっくりしましたが、実行すると実行時エラーで
落ちるオチかなと思いつつ実行すると問題なく動いています。

/clr:pureを/clrに変えると何か問題とかありますか?
今のところこれで問題なく意図した動きをしてくれているので
問題ないのであればこのままこれで開発したいと考えています。

ご教授よろしくお願いします。


返信引用
むしろ
 むしろ
(@むしろ)
ゲスト
結合: 19年前
投稿: 1
 

>/clr:pureを/clrに変えると何か問題とかありますか?
アンマネージドコードで/clr:pure指定するほうが問題だろう


返信引用
こんこん
 こんこん
(@こんこん)
ゲスト
結合: 19年前
投稿: 6
Topic starter  

むしろさん
>アンマネージドコードで/clr:pure指定するほうが問題だろう
いえ、もともとマネージコードです。マネージコードに
MFCで作った*.hと*.cppをマネージプロジェクトに追加し、
そのマネージプロジェクトの/clr:pureを/clrにしたのです。

とりあえず動いているのでこれで解決とします。
皆さんどうもありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました