0

我正在使用一个带有 SDK 的机器人软件,它允许我编写自己的代码、构建它并将生成的“dll”和“kab”文件添加到软件的 bin 目录中。通过这样做,我可以在软件中添加我自己的算法和新功能(或者可能是我不记得的另一个 SDK)。

它使用他们的 SDK、Windows SDK 和 Cmake,但问题在于他们的文档中写到我只能使用 Microsoft Visual C++ 2005 而不能使用其他任何东西!我尝试使用 Microsoft Visual Studio 2008,但失败了。

有没有可能我必须只使用msvc8?是不是因为某些特定的 msvc8 编译器?如果是这样,无论如何我可以将这些编译器与 Netbeans 一起使用(这个 msvc8 非常令人失望:/)

4

1 回答 1

0

有两种可能——

Visual c++ 2005 和 2008 具有不同的运行时库。如果您正在调用具有简单类型作为参数的函数,那么没有问题,但如果您传递更复杂的类型,那么这些类型的定义可能会在版本之间发生变化。例如,如果一个函数将 std::string 作为参数,您将使用该类的一个版本创建它,但尝试在使用该类的不同版本编译的代码中使用它,如果它以任何不同的方式将失败很重要。我不知道这是否会影响 std::string 但它可能会影响您正在使用的东西。

另一个是内存分配。这两个部分都使用不同的运行时库编译,因此其中一个分配的内存不会被另一个知道。如果您在 dll 中新建一些内存并且主程序尝试释放它,它将不知道该内存并失败。这不仅适用于您自己使用 new 分配的内存,它还可以适用于任何自己分配内存的类。

可以使用不同版本的编译器编写插件 dll,但您需要非常小心,只使用有效的类型,并正确组织内存分配。这是否可能取决于所需的接口是什么

编辑:为了回答你的另一个问题,windows编译器都带有一个名为“cl”的编译器命令行,我相信你可以从netbeans调用它,虽然我不使用它,所以我不能告诉你如何

于 2012-06-02T10:38:48.640 回答