我为AutoCAD编写插件。如果我编写托管(即.net)插件,那么我可以使用任何可以与AutoCAD使用的.NET Framework版本一起使用的Visual Studio版本(非常方便):
因此,通过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 ++函数的命名标准不存在。
谢谢。
答案 0 :(得分:11)
确实存在标准,请参阅https://mentorembedded.github.io/cxx-abi/abi.html#mangling
但并非所有的编译器都使用它,因为他们有自己多年使用的修改惯例,并且他们不想因各种原因改变它们。
在您的情况下,不同版本的Visual Studio之间的差异不仅仅是名称修改,C ++运行时库和标准库也有变化。