2

Delphi Prism 2010 で、解決できない奇妙なコンパイラ エラーが発生しました。エラーは、特殊な画像形式を操作するサードパーティ アセンブリで定義されたオブジェクトのメソッドを呼び出すことです。アセンブリ自体は、.Net 2.0 ランタイムに対してコンパイルされました。

パラメーターの正しいリストを提供しているにもかかわらず、パラメーター リストが正しくないことを示すエラーと一連の警告メッセージが常に表示されます。VS 2008 IDE もパラメーター補完の実行を拒否しますが、メソッド プロトタイプを正しく表示し、Ctrl-Space を使用してメソッドを追加できるようにします。以下は、問題を説明するためのコンパイラ エラーの簡略版です。

エラー 1 (PE19) これらのパラメーターを持つオーバーロードされたメソッド "GetTempMapOfIRSensor" はありません

警告 2 (PH2) 最も一致する "Image.GetTempMapOfIRSensor(var rectOnSensor: System.Drawing.Rectangle; out average: System.Double; out minTempArrayIndex: System.Int32; out maxTempArrayIndex: System.Int32; desiredTempUnits: Image.TEMP_UNIT): array of System.Double" がパラメーター 1 で一致しません。パラメーターは "System.Drawing.Rectangle" であり、"System.Drawing.Rectangle" である必要があります。

警告 3 (PH2) 最も一致する "Image.GetTempMapOfIRSensor(var rectOnSensor: System.Drawing.Rectangle; out average: System.Double; out minTempArrayIndex: System.Int32; out maxTempArrayIndex: System.Int32; desiredTempUnits: Fluke.Thermography.TEMP_UNIT) : System.Double の配列がパラメーター 2 で一致しません。パラメーターは「System.Double」であり、「System.Double」である必要があります。

....残りの各パラメーターに対する同様の警告のリスト

奇妙な部分は、コンパイラがすべてのパラメーターの型の不一致について不平を言うことですが、エラーメッセージはパラメーターの型名が同じであることを示しています (たとえば、パラメーターは "System.Double" は "System.Double" である必要があります)。

この問題のトラブルシューティングと解決方法に関する提案は大歓迎です。問題のクラスは、この 1 つのメソッドを除いて、他のすべての点でうまく機能しているようです。同じ署名でローカル クラスにメソッドを作成し、エラーなしで呼び出すこともできます。

アップデート:

リフレクションと同じパラメーター リストを使用してメソッドを呼び出すと、正しく機能します。これは、ある種のコンパイラのバグ/制限であると思われます。

4

1 に答える 1

1

このライブラリに非var/out&varまたはoutパラメータのオーバーロードがあり、署名の残りの部分が同じである場合は、暗黙的なout / varパラメータのオプションをオフにして、必要な場所にout&varを追加します。それは修正されるはずです、さもなければ、それがバグであるならば、QCエントリは一般的に非常に速く修正されます。

于 2010-02-17T20:16:41.990 に答える