- PR -

fatal error: CVT1100について

1
投稿者投稿内容
beavis
会議室デビュー日: 2008/08/28
投稿数: 3
投稿日時: 2008-08-28 12:22
お世話になっております。

VS2005C++についての質問です。

現在ソリューションファイル以下にある複数のプロジェクトファイル内の
リソースファイルをひとつにまとめようとしています。
たとえば、A、B、C、D、EというプロジェクトがありAがexeファイルでその他がdll
だとします。(MFCのプロジェクトです。)

Fという新しいdllを作成し、そこにAからEでそれぞれある.rcファイルを
持たせようとします。つまり、A.rc、B.rc、C.rc、、、と複数の.rcファイルを
ひとつのプロジェクトに持たせようとします。

ところが、このとき必ず、CVT1100が発生します。
重複リソースIDがないか調べても見つかりません。

このCVT1100ですが、自分で調べたところ現状解決できている人がいないように思えます。
以下に参照したページを載せておきます。
どうもリンケージが複数の.rcファイルを同一のプロジェクト内にもてないようになってるんじゃないかというのです。

このエラーについて、どなたかご存知な方がいらっしゃれば非常に助かります。
現状のVC++で複数の.rcファイルをひとつのプロジェクトでサポートしているよというかた、やり方をお教え願えればと思います。

http://bytes.com/forum/thread414019.html



http://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/pg/pg11_01_03.htm



http://groups.google.com/group/microsoft.public.win32.programmer.ui/browse_frm/thread/b53be3ae28beef58?hl=en&lr=&ie=UTF-8&oe=UTF-8&rnum=20&prev=/groups%3Fq%3DCVT1100%26hl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26start%3D10%26sa%3DN



http://forums.msdn.microsoft.com/en-US/vcgeneral/thread/654dd67e-a300-4e94-af6f-849380560189/



http://msdn.microsoft.com/ja-jp/library/fy6fte8a(VS.80).aspx


くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-08-28 13:05
空からMFC DLLプロジェクトを作成し
リソースファイルを複数追加してもCVT1100は発生しません。

CVT1100はリソースIDの重複です。
>重複リソースIDがないか調べても見つかりません。
プロジェクト内にあるヘッダだけに定義されているわけではありません。
たとえばVS_VERSION_INFOはwinver.hに1として定義されています。

どこかに必ず重複があると思います。
それはCVT1100のメッセージ内容にヒントがあります。
beavis
会議室デビュー日: 2008/08/28
投稿数: 3
投稿日時: 2008-08-28 13:29
僕も当初はそう思っていたのですが、必ずこのエラーが出ます。

たとえば、ひとつの殻のソリューションを作成します。
次にもともとあるリソースファイルとは別に名前を変えたリソースファイルを
追加します。そして、、

ここでストリングテーブルを追加して入れます。

もともとあるストリングテーブルがデフォルトで101なので105とかにかえて
新しいストリングテーブルを定義させます。

以下はそこで出現したエラーです。

1>CVTRES : fatal error CVT1100: 重複するリソースです。type:STRING, name:7, language:0x0411
1>LINK : fatal error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。

これはIDではなく、ストリングテーブル自体が重複しているからといっているようにも見えます。

そこで、困ってしまっているのですが。。
単純に.rcファイルを追加するだけでなく、そこにストリングテーブルなり、アイコン鳴りを入れると必ず、これがでます。
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-08-28 16:20
1.新規プロジェクト-MFC DLLで作成
2.新規リソースファイル-A.rc追加
3.新規リソースファイル-B.rc追加
4.A.rcにストリングテーブル追加(ID:101,値:A)
5.B.rcにストリングテーブル追加(ID:101,値:B)
以上でビルド実行すると、CVT1100発生。

6.B.rcのストリングテーブル編集(ID:201,値:B)
以上でビルド実行すると、正常終了。

とりあえず回避策としては、各リソース毎に使用する値を離す事ですね。
(A.rcは1001〜、B.rcは2001〜 等)

[参考]
MSDN-テクニカルノート 35:VC++複数リソースファイルの使用

[ メッセージ編集済み 編集者: くまっち 編集日時 2008-08-28 16:38 ]
butthead
大ベテラン
会議室デビュー日: 2004/01/14
投稿数: 162
投稿日時: 2008-08-29 12:37
返信ありがとうございます。

確かにStringテーブルのIDの値を非常に離すと
できることがわかりました。

しかしこれは、実質的な問題解決には至りません。
なぜなら、101と102でのリソースIDの違いを認識してエラーが出ないなら
よいものの、エラーが出るからです。

おそらくMSのバグと思われます。
以下にサイトを見つけました。

http://support.microsoft.com/?scid=kb%3Ben-us%3B320216&x=19&y=8

1

スキルアップ/キャリアアップ(JOB@IT)