EOutOfResources в DLL - PullRequest
       82

EOutOfResources в DLL

2 голосов
/ 28 октября 2019

Я перенес несколько библиотек 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 »».

Моя трассировка стека:

Stack trace

Когда я устанавливаю точки останова в коде моей DLL, ни одна из них не срабатывает, поэтому я не уверен, почему даже есть вызов конструктора TApplication (в моем коде есть ЕДИНИЦА, но, кажется, она не вызывается).

Я подозреваю некоторую проблему с зависимостями, поэтому я использовал средство обхода зависимостей, и он нашел два 64-битных dll. Не уверен, что это ложноположительный результат:

dependency walker output

Что я могу сделать, чтобы исправить или диагностировать это дальше?

1 Ответ

1 голос
/ 29 октября 2019

Я попытался запустить новый проект типа 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 ошибка исчезла.

...