2012-06-02 34 views
0

我正在使用SDK附帶的機器人軟件,允許我編寫自己的代碼,編譯它,並將生成的「dll」和「kab」文件添加到軟件的bin目錄中。通過這樣做,我可以添加自己的算法和新功能的軟件(或者我可能不記得的另一個SDK)。有沒有可能一個項目只能由MS Visual C++ express構建?

它使用他們的SDK,Windows SDK和Cmake,但問題是在他們的文檔中寫道,我只能使用Microsoft Visual C++ 2005而沒有其他任何東西!我嘗試過使用Microsoft Visual Studio 2008,但是失敗了。

有沒有可能,我不得不使用msvc8?是否因爲msvc8的某些特定編譯器?如果是這樣,反正是有,我可以使用這些編譯器使用Netbeans(這msvc8是非常令人失望的:/)

+3

「我試圖與Microsoft Visual Studio 2008,我失敗了。」 - 錯誤信息,崩潰,鼻子惡魔?發生了什麼? – DCoder

+0

@DCoder,在構建時沒有錯誤,但在啓動軟件並嘗試運行我的「添加算法」後,它崩潰了。 – Pouya

+1

在VS2005上做了完全相同的構建工作(也就是說,您是否排除了自己的代碼中的任何錯誤)?這很奇怪,文檔是否爲此提供了任何理由?編譯是否會產生任何警告,代碼是否依賴一些未定義/實現定義的行爲?這是什麼軟件(是否有人可以嘗試在他們的系統上再現這種情況)? – DCoder

回答

0

有兩種可能性 -

的Visual C++ 2005和2008具有不同的運行時庫。 如果您調用的函數具有簡單的類型作爲參數,那麼就沒有問題,但如果您傳遞更復雜的類型,那麼這些類型的定義可能在版本之間發生變化。例如,如果一個函數使用std :: string作爲參數,那麼您將使用一個版本的類創建它,但試圖在使用不同版本的類編譯的代碼中使用它,如果它以任何方式事項。我不知道這是否影響std :: string,但它可能會影響您正在使用的東西。

另一個是內存分配。這兩個部分都是用不同的運行時庫編譯的,所以在其中分配的內存不會被其他人知道。如果你在你的DLL中新增了一些內存,並且主程序試圖釋放它,它將不知道該內存並失敗。這不僅適用於你自己分配的內存,它可以應用於任何自己分配內存的類。

可以使用不同版本的編譯器編寫addon dll,但需要非常小心才能使用可以工作的類型,並正確組織內存分配。這是否可能取決於所需的接口是什麼

編輯:要回答你的其他問題,Windows編譯器都帶有一個名爲「cl」的編譯器命令行,我相信你可以從netbeans調用,儘管我不要使用它,所以我不能告訴你如何

相關問題