1

私は Delphi プロジェクトで C# dll を呼び出しています。問題は、HydraModuleController assembly.GetType() ステートメントから呼び出される dll アセンブリ タイプであり、1 つ以上のタイプに対して null 値を返します。次の手順で、Visual Studio から Delphi コードをデバッグしようとしました。デバッグ -> プロセスにアタッチ... 実行中のプロセスを選択します。「添付先」の右側にある「選択...」ボタンをクリックします。「これらのコード タイプをデバッグする」を選択します。[OK] をクリックし、[添付] をクリックします。

それでもVSからデバッグできない場合。どうすればいいですか?これは、C# dll から AssemblyResolver を呼び出す Delphi コードです。

try
 fAssembly.CreateInstance_2('WPFProj.AssemblyResolver', true);
   except

これは、dll アセンブリ タイプと呼ばれる Delphi コードです。

procedure THYManagedModuleController.CreateManagedControllerInstance;
var
  lTypes:PSafeArray;
  lType:_Type;
  lStart,lEnd,i:integer;
  lVariant: OleVariant;
begin
  lTypes := fAssembly.GetTypes();
  SafeArrayLock(lTypes);
......
end

WPF プロジェクトの AssemblyResolver.cs を次に示します。

 public class AssemblyResolver
{
    static AssemblyResolver()
    {
        AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

    }

    static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        Assembly asm = Assembly.GetExecutingAssembly();
        AssemblyName an = new AssemblyName(args.Name);
        Stream stream =
    asm.GetManifestResourceStream(String.Format("WPFProj.Includes.{0}.dll",
    an.Name));
        if (stream == null)
            return null;
        byte[] block = new byte[stream.Length];
        stream.Read(block, 0, block.Length);
        Assembly resolved = Assembly.Load(block);
        return resolved;
    }
}
4

2 に答える 2

2

Visual Studio から Delphi コードをデバッグすることはできません。Visual Studio のデバッグは、Microsoft 独自の PDB 形式を使用したデバッグ情報に依存しています。Delphi コンパイラは、独自の DCU 形式でデバッグ情報を生成します。

Delphi コードをデバッグするには、Delphi IDE、RAD Studio が必要です。C# コードをデバッグするには、Microsoft IDE、Visual Studio が必要です。

于 2014-08-27T06:29:34.330 に答える
0

今、私はその問題を解決することができました。実際、Delphi exe で .net dll を使用しているため、Hydra for delphi 内のアンマネージ コードの Visual Studio からの例外をキャッチできます。Visual Studio 内でいくつかの変更を行いました。プロジェクトに移動 -> projectproperties -> デバッグ モードを選択 -> 外部プログラムの開始を選択 -> Delphi exe ファイル パスを参照します。次に、[デバッグ] -> [例外] -> [共通言語ランタイム例外の確認] に移動します。それで全部です。次に、.net プロジェクトを実行すると、Delphi プロジェクトも実行され、Delphi 内のアンマネージ コードの例外がキャッチされます。

于 2014-08-27T11:36:32.747 に答える