我正在使用一个带有 SDK 的机器人软件,它允许我编写自己的代码,构建它并将生成的“dll”和“kab”文件添加到软件的 bin 目录中。通过这样做,我可以在软件中添加我自己的算法和新功能(或者可能是我不记得的另一个 SDK)。
它使用他们的 SDK、Windows SDK 和 Cmake,但问题是在他们的文档中写道,我只能使用 Microsoft Visual C++ 2005,不能使用其他任何东西!我尝试使用 Microsoft Visual Studio 2008 但失败了。
是否有可能我只能使用 msvc8?是因为msvc8的某些特定编译器吗?如果是这样,无论如何我都可以将这些编译器与 Netbeans 一起使用(这个 msvc8 非常令人失望:/)
有两种可能 -
Visual c++ 2005 和 2008 有不同的运行时库。 如果您调用以简单类型作为参数的函数,则不会有问题,但如果您传递更复杂的类型,则这些类型的定义可能会在版本之间发生变化。例如,如果一个函数采用 std::string 作为参数,您将使用该类的一个版本创建它,但尝试在使用该类的不同版本编译的代码中使用它,如果它在任何方面有所不同,则会失败很重要。我不知道这是否会影响 std::string 但它可能会影响您正在使用的东西。
另一个是内存分配。两个部分都是用不同的运行时库编译的,因此一个部分分配的内存不会被另一个部分知道。如果您在 dll 中添加了一些内存,并且主程序尝试释放它,它将不知道该内存并失败。这不仅适用于您自己使用 new 分配的内存,它还可以适用于任何自己分配内存的类。
可以使用不同版本的编译器编写插件 dll,但您需要非常小心,仅使用有效的类型,并正确组织内存分配。这是否可能取决于所需的接口是什么
编辑:为了回答你的另一个问题,Windows编译器都带有一个名为“cl”的编译器命令行,我确信你可以从netbeans调用它,尽管我不使用它,所以我不能告诉你如何