如何调试使用regsvr32.exe进行的64位dll注册过程?

时间:2012-08-28 11:05:49

标签: delphi debugging dll delphi-xe2 regsvr32

我有

  

ADDRESS的运行时错误216

注册使用Delphi XE2构建的64位dll时(我有更新3)。

从命令提示符我做(注意:system32文件夹包含64位exe!)

c:\windows\system32\regsvr32.exe My64bitdll.dll

并在“dll成功安装消息”之后 我有运行时错误。

我想调试注册过程,不知何故使用Run / Parameters / host。

有人可以发布正确的程序吗?在其他一些问题中,如this one提到了一个bug,但是seems fixed now,我有一个比这个更早的delphi版本。

更新 此外,欢迎任何关于RunTime错误的评论。

2 个答案:

答案 0 :(得分:5)

  1. 加载DLL项目。
  2. 修改运行参数(运行 | 参数)以将主机应用指定为regsvr32。请注意,您可能需要使用C:\ Windows \ sysnative路径来破坏32位文件系统重定向器。
  3. 包含DLL的路径作为命令行参数。
  4. 如果在Delphi COM自注册代码中引发错误,也许启用Debug DCU。
  5. enter image description here

    然后像任何其他DLL一样调试DLL。

    运行时错误216是访问冲突。

答案 1 :(得分:1)

1)此运行时错误可能只是程序退出。例如,您是否会调试DllMain的内部,您可以轻松地通过退出点并尝试跟踪结束的DLL,这将通过RE。进程退出看起来不像从子例程返回 - 而是作为对特殊系统API函数的调用。但是调试器不理解它并继续跟踪现在​​死的项目。

2)我认为使用RegSvr32.exe或TRegSvr.exe进行debuging并不重要。所有RegSvr32都从DLL调用预定义函数。你调试你的DLL或RegSvr32本身?

2.1)如果后者 - 我听说有RegSvr32的来源,可能还有调试符号,但是要使用一些Microsoft调试器。

2.2)如果是前者,那么现在应该有区别如何调用这些函数,你只需要调试这些函数。只需从File not found when registering DLL with TFileRun and regsvr32获取任何代码并将其用作主机。