【发布时间】:2014-08-27 04:13:21
【问题描述】:
我有一个调用 C# dll 的 Delphi 项目,现在问题是从 HydraModuleController assembly.GetType() 语句调用的 dll 程序集类型,该语句返回一个或多个类型的空值。我尝试通过以下步骤从 Visual Studio 调试 Delphi 代码。 调试 -> 附加到进程... 选择正在运行的进程。 单击“附加到”右侧的“选择...”按钮。 选择“调试这些代码类型” 检查 .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;
}
}
【问题讨论】:
-
你能从VS调试delphi吗?可以吗? delphi 应用程序如何加载和使用 c#? DLL?
-
我不确定。我用谷歌搜索了一些东西,说可以在 VS 中调试非托管代码。这就是我努力的原因。你知道在 delphi 中调试非托管代码吗?
标签: c# delphi visual-studio-2012 hydra