2011-12-21 9 views
2

私はこのフォーラムに初めて投稿しました。誰かが私を助けてくれることを願っています。私はウェブ上で検索していますが、私の質問に関連する回答は見つかりませんでした。非常に大きなファイルを含むdllを作成する

私は

これらのすべてのファイル(およびそれらの約600以上)は、特別なを使用してファイルを.Cに変換されている他のファイルで使用しなければならないの定義の何千もの非常に大きなファイル(約25000行)を持っていますツール。私はこの変換が有益に行われたことはほぼ確信しています。

これらすべてのファイルでa.exeを作成しても、問題はなく、すべて正常に動作します。残念ながら、私は非常に大きなファイルにアクセスしようとするとクラッシュする.dllが必要です。

私は、その.objファイルが65MBより大きいかどうかをチェックしているので、私はインターネットで見た限りコンパイラコマンド/ bigobjを追加しましたが、問題は解決しませんでした。

また、私は、私は、Visual 2008

を使用しています両方の(私の開発は不可能である)ファイル

に参加するとき、大きなファイルへのアクセスは、すべてがOK動作するため、ときに問題が起こることを確認している可能性がそれはC(/ TC)またはC++(/ TP)コードとしてコンパイルすることに関連していますか?プログラムがクラッシュする可能性のある.exeと.dllの違いは何ですか?

どのようなアイデアをお願いしますか?事前

実際
+0

あなたの質問はあまり明確ではありません。どのようなクラッシュ(コンパイラ、リンカー、あなたのアプリ)?どのようにクラッシュしますか(たとえば、エラーメッセージがありますか?)これらのすべてが答えを与えるのに役立つでしょう – Stewart

+0

ああとても残念です。 DLLを使用しているときにクラッシュします(.exeファイルはこの.dllを使用します)。私は典型的なウィンドウエラーがあります。エラーをデバッグしようとすると、定義の参照が欠落しているように見えます(ポインターは想定されていないときはnullに設定されています)。このポインターは非常に大きなファイルから情報を取得する必要があります。私は自分自身を明確にしたかどうか分かりませんが、説明するのは少し難しいです。申し訳ありません。 – dawita

+0

大きなファイルとは関係ないかもしれません。アクセスする必要があるすべての関数名で.defファイルを正しく試してみてください。 –

答えて

2

おかげで、コードなしでずっと

(誰でも:)コードの25K行で600個のファイルごとを読み取る忍耐を持っているかどうかわからないカントー)...と言うことができるではありません

アドバイスとして、exeとdllをデバッグモードで再構築し、MSVCからexeを実行し、クラッシュしたことが分かっているところにブレークポイントを設定します。次に、ウォッチウィンドウからアドレスを取得した後、変数にデータブレークポイントを設定します。アプリを仮定すると、正しく動作するはずですが、ポインタは設定されますが途中で失われます。つまり、2回トリガーされるはずです。 また、アサーションチェックを試みてください。

もう1つのシナリオは、変数がvolatileであるためです。 別のシナリオ値が一時的な値から返されて、失わ... そして最後にではなく、少なくとも、値が原因で間違った\悪い条件の設定されることはありません...

あなたの問題は、クラッシュの場合と値が設定されていない理由を見つけることをお勧めしますが、欠落値ではなく、単にヌルチェックを行い、呼び出しを返します。あなたの選択。

関連する問題