2

XML 操作に XslCompiledTransform クラスを使用する C# DLL があります。C# DLL の C++/CLI ラッパーを盗みました。

Delphi 5 を使用して C++/CLI ラッパーを実装すると、システム演算エラーが発生します。Delphi 5 の宣言は次のとおりです。

procedure XsltMethod(XmlPath, XsltPath: PWideChar); cdecl; external 'ahma.dll';

C# public メソッドの本体は新しい XslCompiledTransform オブジェクトを作成し、新しく作成されたオブジェクトがそのloadメソッドを実行するとすぐに例外がポップアップします。例えば:

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(XsltFile);

前述のように、.NET DLL からスローされる例外はシステム算術例外です。これは、Delphi 実行可能ファイルから呼び出された場合にのみ発生します。

I guess I should mention calling the object's load method again works fine. So catching the exception and running the method for a second "pass" acts like a popup blocker. But for exceptions, of course.

4

2 に答える 2

2

ランダムな考え:

  • VisualStudioからアセンブリをデバッグすることから始めるべきだと思います。Delphiコードにメッセージボックスまたはその他の待機ステートメントを挿入してから、VisualStudioからプロセスにアタッチします。C#をトレースすると、何が問題になっているのかについていくつかのヒントが得られる場合があります。動作させることができない場合は、少なくとも着信パラメータのログを追加してください。
  • デルファイでは、円記号をエスケープする必要はありません。
  • E0434F4Dが無実の最初のチャンスの例外ではないことを確認しますか?デバッグしない場合(または、Delphi 5で可能かどうかは完全にはわかりませんが、JITデバッガーの例外停止から続行する場合)、動作に問題がありますか?
  • 過去20年間、「ネイティブWin32アセンブリ」を「DLL」と呼んでいたように呼んでもらえますか?:-)
于 2009-09-16T18:50:33.287 に答える
2

hereに記載されているように、浮動小数点制御レジスタの違いに苦しんでいる可能性があります。こちらのQCレポートもご覧ください。Set8087CW($133F); を呼び出してみてください。Delphi プログラムで。その後、Delphi コードでの浮動小数点の問題に注意してください。

于 2009-09-17T07:07:58.190 に答える