2012-04-19 44 views
0

我們的VB6程序當前在C++ dll中調用代碼。這個DLL不需要註冊,它只需要一個.def文件來指定屬性和方法。 Vb6遲到了。該DLL是用VS2005編寫的,不依賴於Net框架。因爲我們正在將我們的應用程序遷移到Net4,並且還想用新功能來增強C++ dll,所以我想知道如何將現有的C++代碼遷移到VC++。我想以後dll會很高興地集成到我們已經包含C#和VB.Net庫的解決方案中。將在VS 2005中編寫的免費的C++代碼遷移到VS2010中的Visual C++

有沒有關於這個計劃的做和不做的一些教程/文檔?

編輯: 我想我對VC++有一些基本的誤解,認爲它可以移植到100%託管代碼,同時保持C++語法。我得到的回覆似乎表明,VC++將始終生成本機非託管代碼?

+0

你應該編輯你的問題,因爲它不清楚你的意見,在你的意見下面有關保持它的功能,同時刪除互操作。你認爲在VC++ 2010託管的C++中有一些新的魔法會刪除你使用interop的要求嗎?也許你正在尋找一種方法來重寫C++ DLL以使用比目前使用的更多自動化互操作形式? – 2012-04-19 13:33:37

+0

@Dabblernl,感謝您的澄清,請嘗試[此msdn文章](http://msdn.microsoft.com/en-us/library/ms173265.aspx)作爲了解編譯CLR的C++代碼的起點。 – 2012-04-19 14:17:08

回答

1

如果您在VS2010中打開VS2005項目文件,VS2010會自動將舊項目轉換爲新的項目格式,並且自動轉換將完成一切正確的工作。這通常有效,但並非總是如此。因此,這裏故事的寓意是,仔細檢查新項目的所有編譯器/鏈接設置,以確保安全。

同樣在VS2010中,託管代碼和本地代碼之間有更好的互操作可能性:P/Invoke和C++/CLI。 P/Invoke比較簡單,但你會發現東西可能會編譯,但在運行時會失敗。 C++/CLI的方式更加靈活,工作更多一些,但是當它變得必要的時候,它更容易調試互操作。

+0

重點在於我希望擺脫Interop的事情,並使用C#,VB.Net和VC++類庫來解決問題,這些類庫可以愉快地生活在一起,並且可以在不需要任何Interop措施的情況下調用彼此的方法。 – Dabblernl 2012-04-19 12:55:28

+0

與託管和原生互相呼叫,無論如何你都在互操作。與VS2010相比,2005年有更好的選擇。 – 2012-04-19 13:01:22

+0

這個問題肯定不是很清楚。你想刪除互操作? – 2012-04-19 13:32:58

2

從純粹的C++角度來看,您應該能夠自動將VS2005解決方案和項目轉換爲VS2010。如果我記得您將解決方案或項目加載到VS2010中,它會自動爲您轉換它。

+0

換句話說,Visual C++ 2010中的語言更改是「新特性」和源代碼本身,除非它有一些真正毛茸茸的東西,它可能是非法的,現在不應該破壞。 C++應用程序中唯一發生的轉換是在項目級別/解決方案級別的內部。我還沒有看到任何.cpp或.hpp文件的修改,這些修改是從vs 2005到2010的導入過程的一部分。我不認爲C#和VB.net互操作(使用它們作爲DLL)實際上已經改變了很多,主要是隻是項目/解決方案文件格式。 – 2012-04-19 13:32:09