我有调用 C# dll 的 Delphi 项目现在问题是从 HydraModuleController assembly.GetType() 语句调用的 dll 程序集类型,该语句返回一种或多种类型的空值。我尝试通过以下步骤从 Visual Studio 调试 Delphi 代码。Debug -> Attach to process... 选择正在运行的进程。单击“附加到”右侧的“选择...”按钮。选择“调试这些代码类型”检查 .NET 3.5 或更低版本的托管(v2.0、v1.1、v1.0)或 .NET 4.0 或更高版本的托管(v4.0)。单击确定,单击附加。
但是当仍然无法从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;
}
}