Delphi - OS 加载程序锁定问题突然出现 Excel

Delphi - OS Loader Lock issue suddenly appearing with Excel

我正在为 Excel 开发一个 Delphi 插件。它还使用 AddIn Express COM 库(优秀的 BTW)。代码一直运行良好。我添加了另一个功能区菜单选项,它调用一个新表单。此表单具有 REST 控件(客户端、响应等)。虽然组件相互关联,但它们没有关于 URL 的信息。这是在运行时设置的。我编译我的项目。

这过去 运行 很好,但我刚刚添加了一个表单(具体来说,我添加了一个父表单,带有 REST 组件、一个 RestAdapter、TDatasource 和 ClientDataSet,并从它继承)。在谷歌搜索中,这似乎是一个调试器问题,而且(至少在 Visual Studio 中),这可以通过 Exceptions / Ignore Loader Lock 关闭。我在 Delphi(西雅图)调试器中找不到任何类似的功能。

我有 运行 AddIn Express 没有问题,我的插件用于 运行 没有问题,我有 运行 独立 REST 演示应用程序没有问题。该组合是否可能导致此问题?知道如何禁用调试器检查 Loader Lock 吗?如果有帮助,事件日志中“OS Loader Lock”消息之前的最后一条消息显示模块:CSCAPI.dll 已加载。我想知道是否需要动态创建 REST 组件。我怀疑这些组件是在应用程序(又名 Excel 我的插件)启动时创建的,并且某些东西正在以一种让调试器不高兴的方式初始化......

可能的解释是您的 initialization 单元中的某些代码负责。此代码是从 DllMain 函数调用的。尝试从 DllMain 进行托管执行确实是自找麻烦。

在我的 AddInExpress 模块中,所有 initialization 部分都是空的。任何初始化都在别处执行。我知道这似乎令人沮丧,但你真的不能在你的 DllMain 中做任何远程复杂的事情。

我建议您的下一步是删除代码,直到您找到负责的 initialization 部分。请注意,您项目中的任何单位都可能负责,甚至是您使用的 Embarcadero REST 组件等 Embarcadero 库代码。那是你的出发点。至于解决方案,请考虑一旦您隔离了问题。

我终于解决了发生的事情。我购买并安装了另一个 Excel 插件。正是这导致了我的问题。显然它在它的初始化例程中使用了代码,这导致了我的问题。一旦我将该插件设置为非活动状态,我的代码就可以正常工作。这根本不是 REST 组件的问题。