集成不同VS版本开发的应用
Posted
技术标签:
【中文标题】集成不同VS版本开发的应用【英文标题】:Integrate applications developed in different VS versions 【发布时间】:2019-03-18 06:48:19 【问题描述】:我目前面临一个任务,我必须集成一个 IMU,其 API 是使用 Visual Studios 2015 开发的,其 API 仅与 Visual Studios 2010 兼容。 我已经尝试过将 IMU API 适配到 VS2010,但这太复杂和乏味了。这在合理的时间内是不可行的。
我想到的一个解决方案是在 VS2015 中实现一个类(我们称之为 BridgeClass),它将使用一个简单的结构从 IMU 读取所需的数据。这将实现为dll
,我可以将其链接到 VS2010 中的集成软件。
但是,不清楚的部分是,我怎样才能让这两个库彼此分开,以便 VS2010 永远不会“看到”VS2015 的任何不愉快的东西。这可以使用dll
吗?我必须将 IMU 库链接到 BridgeClass(例如打开端口并从 IMU 读取数据),这是否会反过来链接到集成软件并最终与直接集成 IMU 相同?
如果有人能给我一些关于这方面的信息或指向一些有用的链接,我会非常有帮助。谢谢!
【问题讨论】:
【参考方案1】:只要您的 DLL 的 API 不使用任何标准库并且没有跨 DLL 边界引发异常,它就应该在混合的 Visual Studio 版本中工作。
您需要使用char*
而不是std::string
。没有std::vector
、std::shared_ptr
、std::unique_ptr
等。
您需要注意的另一件事是,在 DLL 中分配的任何内容都必须在 DLL 中释放,这通常通过您的应用程序可以调用以创建和销毁对象的 c 工厂函数和 c 析构函数来完成。
【讨论】:
VS2010不支持其余的,但是我不明白为什么我不应该使用std::string
?此外,如果您能稍微澄清一下用于分配和解除分配的 C 函数,那就太好了。
std::string
的实现在 Visual Studio 版本之间不同且不兼容。此外,很难确保分配和释放都发生在同一个地方。以上是关于集成不同VS版本开发的应用的主要内容,如果未能解决你的问题,请参考以下文章
OsgEarth开发笔记:Qt5.15.2在QtCreator集成Osg3.6.3+OsgEarth3.1+OsgQt的vs2019x64版本开发环境搭建
OsgEarth开发笔记:Qt5.15.2在QtCreator集成Osg3.6.3+OsgEarth3.1+OsgQt的vs2019x64版本开发环境搭建