2

我已将 C++ 项目 6 升级到 C++ builder 10。

当我用 LoadLibrary 加载 DLL 时,抛出异常。

HINSTANCE hInst;
hInst = LoadLibrary( "MyLibrary.dll" );

项目 XXXX.exe 引发异常类 EOutOfResources,消息为“变量或安全数组已锁定”。

我没有理解“变体或安全数组被锁定”的表达。

我试过在新的空应用程序中加载 DLL。DLL 正在加载。没有任何问题。

但无法在现有项目中加载 DLL。

我如何确定问题的根源?

4

2 回答 2

2

看看这是否有帮助:

将旧版 C++ Builder 应用程序迁移到西雅图 C++ Builder 10

特别是这两句话:

使用旧版本的 C++ Builder 构建的任何库都需要重新编译才能被 C++ Builder 10 Seattle 项目使用。

不要让 C++ Builder 10 Seattle 转换您的旧 Builder 项目。将您的文件复制到一个新文件夹中,创建一个新项目并将源文件添加到其中

于 2015-11-18T15:46:42.447 回答
2

问题原因;

我用记事本++比较了两个 .cbproj 文件

我用 C++ Builder 10 创建了 DLL

<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>

区别在于框架类型。

我已经将 None 替换为 VCL。

DLL 已加载。

于 2015-11-23T09:06:17.583 回答