1

私は過去2日間これに頭をぶつけてきましたが、何の進歩も見られないようです...

ある瞬間から次の瞬間まで、DelphiXE2は私のプロジェクトの1つを適切にコンパイルしなくなります。つまり、実際にはエラーなしでコンパイルされますが、実行時に、基本的にメインの「フォーム」(この場合は実際にはデータモジュール)のリソースが見つからないというエラーが発生します。私はすでに、ソース管理から古いバージョンのプロジェクトに戻っていますが、これは間違いなく正常に機能していることがわかっていますが、役に立ちませんでした。それから判断すると、プロジェクトソースではなく、Delphi/IDE自体の内部にあるはずです。しかし、私は単純なテストプロジェクトや他の実際のプロジェクトでも問題を再現することができませんでした...それはこれでのみ発生します。

もう1つの奇妙なことは、XN Resource Explorerで生成されたバイナリを見ると、すべてが正常に見えることです。エラーメッセージに記載されているフォームリソースは実際にはそこにあり、そのままです...

ある時点で、これはIDEにインストールしたエキスパートの1つ(UweのプラットフォームとOIエキスパート、VersionInsightPlus、AndreasのIDEFixPackとDDevExtensions、GExpertsなど)のバグが原因である可能性があると考えていましたが、これらすべての問題を無効にした後でも持続した。

残念ながら、バイナリを実際に実行せず、x64ターゲットのコンパイラの警告とエラーを修正し、更新されたサードパーティツールのビルドイベントを調整することなく、しばらく作業していたため、これがいつ発生し始めたかを正確に追跡することはできません(ローカリゼーションおよびライセンス保護)およびそのようなもの...

他の誰かがこのようなことが起こるのを見たことがありますか?これを特定する方法について他にアイデアはありますか?


プロジェクトに関する詳細:

  • これは、Add-In-Expressフレームワーク(つまり、COM-DLL)を使用して構築されたOutlook用のアドインです。
  • 「メインフォーム」はTDataModule-子孫です-独自の祖先クラスも階層に挿入しました。つまり、「アドインモジュール」は直接継承していませんTadxCOMAddInModule-カスタム祖先フォームのリソースも存在し、そのままであるように見えます。リソースビューアで確認するときにバイナリを出力します。
  • Win32およびWin64プラットフォーム用のランタイムパッケージなしで構築されています。

他の潜在的に関連する詳細について言及しなかったと思われる場合はお知らせください。

更新: 問題のソースを別のマシンに転送しました。興味深いことに、そこでコンパイルしたDLLは問題を示しませんでした-そのマシンでは...元のマシンに転送して呼び出しようとすると、エラーが戻ってきました(これを強調するために:これは正確でした同じDLLが一方のマシンで生成EResNotFoundされますが、もう一方のマシンでは生成されません。もちろん、これを発見したら、逆のテストも実行しました。元のマシンでコンパイルされたDLLは、他のマシンでもエラーなしで動作します...結局、これはDelphiの問題ではないようです...しかし、それではどうでしょうか。

2台のマシンの違い:

  • マシン1(問題が発生したもの):Delphi XE2Update4を搭載したWindows7Ultimate English 64bit
  • マシン2:Delphi XE2Update3を搭載したWindows7Professional German 32bit

Delphiがインストールされていないことを除いて、最初のマシンとほぼ同じ3番目のマシンでは、両方のマシンで生成されたDLLが問題なく動作します。

4

2 に答える 2

1

ここであなたの質問を見て少し驚いています。:)

DelphiXE2の最近のアップデート4で多くの深刻な問題に直面しました。「リソースが見つかりません」というエラーが発生したり、報告されたりしたことはありませんが、この更新が原因の1つである可能性があります。インストールしましたか?

もう1つ頭に浮かぶのは、Officeコントロール(コマンドバーとリボン)に使用する画像です。おそらくそれらは何らかの理由で壊れており、ランタイムコードはそれらをロードできず、このエラーを報告します。

とにかく、あなたが理解しているように、これらは私の推測です。あなたがあなたのオフィスアドインで私たちの援助を必要とするならば、アドインエクスプレスサポートサービスに連絡してください、私たちは助けようとします。

于 2012-05-11T14:36:36.433 に答える
0

更新:私は少し速すぎて結論を出していたようです。どうやら、Sisulizerソリューションはメインリソースブロックへのフォールバックも実行することになっています。この問題を製品フォーラムに持ち込みました。問題が解決したら、ここに報告します。


了解しました。謎はついに解決しました。

生成されたリソースDLLのサイズを縮小するために、 Sisulizerで「すべてのリソースをコピーする」オプションをオフにしていたのですが、それを忘れていました...

Sisulizerが「ピギーバック」するローカリゼーションへの標準のDelphiリソースDLLアプローチの意味を完全には理解していませんでした。特に、オールオアナッシングの取引でした。以前の翻訳ソリューションは、リソースを読み取るフォールバックメカニズムを実装していました。代わりに、ホストバイナリの外部リソースDLLに見つかりません。これはSisulizerの場合には当てはまらないようです-少なくとも箱から出してはいけません...したがって、ローカライズされたリソースDLLに含まれていないリソースは、アプリケーションに関する限り存在しません。
また、メインバイナリと同じベース名と、現在のシステムのデフォルトロケール(.ENまたはなど.DE)に一致する拡張子を持つファイルが存在するだけで、VCLが自動的にファイルをロードすることにも気づきませんでした...

エラーが発生しなかったマシンには、古い、より大きな(=完全な)リソースDLLがまだ存在するか、リソースDLLがまったく存在しませんでした。

于 2012-05-24T14:25:00.247 に答える