4

我有

ADDRESS 处的运行时错误 216

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

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

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

在“dll 成功安装消息”之后,我遇到了运行时错误。

我想以某种方式使用 Run/Parameters/host 来调试注册过程。

任何人都可以发布正确的程序吗?在像这个这样的其他一些问题中,提到了一个错误,但现在似乎已修复,我有一个比这个更旧的 delphi 版本。

更新: 欢迎对 RunTime 错误发表任何评论。

4

2 回答 2

5
  1. 加载 DLL 项目。
  2. 修改运行参数 ( Run | Parameters ) 以将主机应用程序指定为 regsvr32。请注意,您可能需要使用 C:\Windows\sysnative 路径来阻止 32 位文件系统重定向器。
  3. 包括 DLL 的路径作为命令行参数。
  4. 也许启用调试 DCU,以防在 Delphi COM 自注册代码中出现错误。

在此处输入图像描述

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

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

于 2012-08-28T12:03:59.933 回答
1

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

2) 我认为使用 RegSvr32.exe 或 TRegSvr.exe 进行调试没有意义。RegSvr32 所做的只是从 DLL 调用预定义的函数。您是否调试您的 DLL 或 RegSvr32 本身?

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

2.2)如果以前,那么现在应该有区别如何调用这些函数,你只需要调试这些函数。只需在使用 TFileRun 和 regsvr32 注册 DLL 时从 File not found 中获取任何代码并将其用作主机。

于 2012-08-28T12:53:28.850 回答