私は 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;
}
}