问题描述
它有以下接口。
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 中,您可以为所欲为。