Вариант или безопасный массив заблокирован при загрузке DLL в C++ Builder 10
Я обновил проект C++ 6 до C++ Builder 10.
Когда я загружаю DLL с LoadLibrary, выбрасываю это исключение.
HINSTANCE hInst;
hInst = LoadLibrary( "MyLibrary.dll" );
Project XXXX.exe поднял класс исключения EOutOfResources с сообщением "Вариант или безопасный массив заблокирован".
Я не брался за выражение "Вариант или безопасный массив заблокирован".
Я пытался загрузить DLL в новом пустом приложении. Загружается. Нет никаких проблем.
Но не могу загрузить DLL в существующий проект.
Как определить источник проблемы?
2 ответа
Причина проблемы;
Я сравнил два файла.cbproj с блокнотом ++
Я создал DLL с C++ Builder 10
<PropertyGroup>
<ProjectGuid>{E3FB4C71-C382-46EC-A17D-5C25890309CD}</ProjectGuid>
<ProjectVersion>18.0</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Library</AppType>
</PropertyGroup>
Я обновил DLL C++ Builder 6 до 10
<PropertyGroup>
<ProjectGuid>{923C6CCC-2F12-4C36-B9B1-C765AE96A7A2}</ProjectGuid>
<ProjectType>CppDynamicLibrary</ProjectType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<FrameworkType>None</FrameworkType>
<ProjectVersion>18.0</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Library</AppType>
</PropertyGroup>
Разница в FrameworkType.
Я заменил None To VCL.
DLL загружена.
Посмотрите, поможет ли это:
Миграция старых приложений C++ Builder в C++ Builder 10, Сиэтл
Специально эти два предложения:
Любые библиотеки, созданные с использованием более старой версии C++ Builder, необходимо будет перекомпилировать для использования в проекте C++ Builder 10 Seattle.
а также
Не позволяйте C++ Builder 10 Seattle преобразовывать ваш старый проект Builder. Скопируйте ваши файлы в новую папку, создайте новый проект и добавьте в него ваши исходные файлы.