我在德尔福上写过gui, 我从.net程序集进行了可见的汇编,我从delphi调用它,它的工作原理。 但我无法进入我的.net程序集。 我在编译dll时执行delphi_project.exe,delphi_project.exe开始工作, 而我在.net dll的断点变得无法访问。我该如何解决?
编辑:vs2010 ult
答案 0 :(得分:1)
由于点网虚拟机的设计,这是不可能的。
虚拟网络代码是在虚拟环境中运行的,而不是在机器上本地运行。
即使Dot网络代码被编译(而它可以被解释),它也不会被直接编译成本机Windows可执行文件:它被编译成CIL,然后由CLR解释或转换为x86操作码,操作码是在虚拟环境中运行。
这使得它在安全方面非常可靠,并允许一些高级技巧,如RTTI或垃圾收集,但它不是一个像其他任何过程一样的过程。
因此,您不能只是将Delphi可执行文件(这是一个真正的Windows可执行文件)传递到DotNet代码中。您可以使用C或C ++代码(如果您拥有所有调试信息,并使用Borland C ++构建器编译它),但您无法使用DotNet代码执行此操作。
你可以尝试在Delphi asm视图中逐步调试(快捷方式是Alt-F2),但是你会花很多时间在mscoree.dll库中,你永远不会知道你的DotNet程序的哪一行你正在执行。我怀疑你会像我一样:沉入asm代码......我们是人类,没有x86!
所以要调试你的应用程序:
最后一招:如果你想让你的DotNet代码在64位操作系统下运行没有任何问题,不要将你的程序集to the right target作为目标,因为当从Delphi应用程序运行时,它将在Wow64中执行,因为Delphi可执行文件仍然是32位。
编辑:PERHAPS A SOLUTION
经过一段时间的睡眠后,我想到了一个想法:在Delphi IDE中,您可以将一个进程附加到调试中。也许可以使用Visual Studio IDE执行相同的操作。
听起来可行:您可以通过IDE的某个菜单将Visual Studio调试器附加到任何正在运行的进程。
Visual Studio调试器具有 附加到进程的能力 在Visual Studio外部运行。您 可以使用此附加功能来完成 以下内容:
- 调试未在Visual Studio中创建的应用程序。
- 同时调试多个进程。你也可以调试 通过启动多个进程 单个内的多个项目 溶液
- 调试在远程计算机上运行的进程。
- 调试在无法轻松启动的单独进程中运行的DLL 例如,来自Visual Studio,a 服务或运行的ISAPI DLL 互联网信息服务。
- 运行时进程崩溃时自动启动调试器 在Visual Studio之外。这是 即时调试。