首页 > 解决方案 > DLL 中的 EOutOfResources

问题描述

我将几个 DLL 和一个应用程序从 Embarcadero C++ Builder XE 迁移到 C++ Builder 10.1 Berlin。

现在,当我的 DLL(包含表单)被应用程序加载时,我得到

EOutofResources "Das angegebene übergeordnete Element ist kein übergeordnetes Element von '%s'"

在 TApplication::CreateHandle

经过几个小时的搜索,我发现没有人有同样的错误,甚至没有英文翻译。我会将其翻译为“指定的父元素不是'%s' 的父元素”。

我的堆栈跟踪:

堆栈跟踪

当我在我的 DLL 代码中设置断点时,没有触发任何断点,所以我不确定为什么甚至调用 TApplication 构造函数(我的代码中有一个,但似乎没有被调用)。

我怀疑依赖项有一些问题,所以我使用了依赖项walker,它找到了两个 64 位 dll。不确定这是否是误报:

依赖步行器输出

我能做些什么来进一步解决或诊断这个问题?

标签: c++builderc++builder-10.1-berlin

解决方案


我尝试启动一个新的 VCL 类型项目,看看项目设置是否存在差异,你瞧:

<PropertyGroup>
    <ProjectGuid>{E8815773-6421-4FB8-A109-F4F505A67A2E}</ProjectGuid>
    <ProjectVersion>18.2</ProjectVersion>
    <FrameworkType>VCL</FrameworkType>
    <AppType>Application</AppType>
    <MainSource>Project1.cpp</MainSource>
    <Base>True</Base>
    <Config Condition="'$(Config)'==''">Debug</Config>
    <Platform Condition="'$(Platform)'==''">Win32</Platform>
    <TargetedPlatforms>1</TargetedPlatforms>
</PropertyGroup>

新创建的项目有一个元素FrameworkType设置为VCL。我迁移的项目将此设置为None. 将其更改为 后VCL,错误消失了。


推荐阅读