【问题标题】:How to debug unmanaged Delphi codes from Visual Studio如何从 Visual Studio 调试非托管 Delphi 代码
【发布时间】: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


【解决方案1】:

您无法从 Visual Studio 调试 Delphi 代码。 Visual Studio 调试依赖于使用 Microsoft 专有 PDB 格式的调试信息。 Delphi 编译器以自己专有的 DCU 格式生成调试信息。

要调试 Delphi 代码,您需要 Delphi IDE、RAD Studio。要调试 C# 代码,您需要 Microsoft IDE、Visual Studio。

【讨论】:

    【解决方案2】:

    现在我可以解决这个问题了。实际上,当我们在 Delphi exe 中使用 .net dll 时,我们可以从 Visual Studio 中捕获 Hydra for delphi 中非托管代码的异常。我在 Visual Studio 中做了一些更改。转到项目 -> 项目属性 -> 选择调试模式 -> 选择启动外部程序 -> 浏览 Delphi exe 文件路径。然后转到调试 -> 异常 -> 检查公共语言运行时异常。 就这样。 然后,当您运行 .net 项目时,它也会运行 Delphi 项目并捕获 Delphi 中非托管代码的异常。

    【讨论】:

    • 这似乎是另一个问题的答案。您问如何从 VS 调试 delphi 代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    相关资源
    最近更新 更多