我为 AutoCAD 编写插件。如果我编写托管(即 .net)插件,那么我可以使用任何可以与 AutoCAD 使用的 .NET Framework 版本一起工作的 Visual Studio 版本(这非常方便):
- AutoCAD 2009 可以使用.NET 3.0、3.5
- AutoCAD 2010 可以使用 .NET 3.5。
- ...
- AutoCAD 2016 可以使用 .NET 4.5、4.5.1
因此,通过 Visual Studio 2013,我可以为 AutoCAD 2009-2016 编写 .net 插件。
但有时我需要为 AutoCAD 编写非托管插件,因为它的托管 .net API 未完全涵盖非托管 API (ObjectARX SDK)。 ObjectARX 是 C++ 的 API。在这种情况下,我不能为每个 AutoCAD 版本使用相同的 Visual Studio。比如我要用VS 2005来编写AutoCAD 2009的插件。因此我在我的虚拟机上安装了 VS 2005-2013。在我看来这是非常不方便的。
我知道,这个问题存在是因为 C++ 函数命名标准不存在,每个版本的 VS 都有自己的名称生成规则,用于未标记为 external "C"
。
但为什么这个标准还不存在呢?这是什么原因呢?我相信这个原因是存在的。这种行为不方便不仅对我有用(我问过其他程序员)。但是他们不知道为什么每个新的VS版本都有自己的C++函数命名规则,为什么没有C++函数命名标准。
谢谢。
最佳答案
确实存在标准,请参阅 https://mentorembedded.github.io/cxx-abi/abi.html#mangling
但并不是所有的编译器都使用它,因为它们有自己的已经使用多年的 mangling 约定,并且出于各种原因不想更改它们。
在您的情况下,不同版本的 Visual Studio 之间的差异不仅仅是名称修改,C++ 运行时库和标准库也有变化。
关于c++ - 为什么 C++ 函数的命名标准不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30480653/