使用在 VS 2019 环境中开发的 DLL 在尝试启动 VS 2008 环境中内置的 exe 时触发崩溃

问题描述

我有一个在 VS 2019 环境中开发的 DLL。

它有以下接口。

bool Initialize();
{
     // Do nothing
}

DLL 中的接口声明

extern "C" CDACVS19LIBRARY_API bool Initialize();

我在 VS2008 环境中创建的其中一个控制台 exe 中使用了上述接口,如下所示。

初始化();

当我调用这个接口时,它抛出以下错误

Run-time Check Failure #2 - Stack around the variable 'oss_' was corrupted.

上面的代码/方法有什么问题?

在 VS 2008 环境中开发的 exe 中使用 VS2019 环境中内置的 dll 有问题,因为我们在旧版本中使用了更高版本中内置的东西。

难道不能这样做吗?如果可能的话,我在遵循上述方法时哪里不正确?

If I use the same dll in a console exe built in 2019 environment,everything works just fine.

EDIT :编辑以使接口声明和定义正确。

解决方法

首先,您的声明和定义必须完全匹配。

其次,如果您希望您的 DLL 被任何程序使用(无论使用哪种编译器\语言),您不得使用任何可能因 DLL 接口中的编译器版本而改变的东西。这意味着将您的 DLL 接口限制为与 C 兼容的功能,不公开任何 STL 内容或模板,也不依赖于函数的默认调用约定(将它们装饰为 extern "C" 或 _cdecl)。像为 C 语言编写接口一样编写接口。在 DLL 中,您可以为所欲为。