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