1

我有一個由C++和c#項目組合而成的大型解決方案,其中大部分都會輸出dll。我們也有一個可執行文件,這取決於這些項目的輸出。我們的整個解決方案目前內置於VS2005中。由於許多原因,我們必須將V80作爲我們的構建版本,但我們終於有時間轉移到2010 IDE。本機多重定位會影響內部結果的輸出方式

當我們在2010年構建時,我們的解決方案都編譯得很好,但運行應用程序時出現訪問衝突。這種異常發生在很多場景中,但始終處於代碼中的同一點 - 它也顯示爲「在用戶回調期間遇到的異常」。如果我們編輯出發生異常的代碼行,它就會移動到其他地方,這很有道理。我們遇到這個問題的場景如下:

2010年針對v80工具集構建的所有DLL和EXE。 2005年所有dll的構建,2010年針對v80工具集構建的exe。但是值得注意的是,如果我們使用2010年構建的dll(對v80),但是2005年構建的exe,一切正常。

我的問題是:使用v80工具集,2005年構建的輸出與2010年構建的輸出之間有什麼區別?

上述可能取決於是否有可能完全匹配構建的命令行參數(即C++和鏈接器配置),因爲它可能是我們沒有完全得到的。如果需要,我可以鏈接2005年和2010年的設置。

任何幫助將不勝感激。

更新: 我最近在2005年創建了一個非常簡單的應用程序,包括一個DLL和EXE。該dll有一個函數static __declspec(dllexport)int add(int a,int b)。該exe是一個簡單的控制檯應用程序,它調用了dll的add函數。

然後我將其移植到VS2010並將其設置爲v80工具集。構建這個產生與原始大小相同的dll,然而exe文件大4KB。我正在使用dumpbin試圖找出原因,但是我一分鐘也不太清楚。如果其他人可以在這種簡單的情況下識別爲什麼exe的大小不同,這可能有助於解決我的整體問題

+0

您是否有任何有關將v80平臺工具集添加到VS 2010的建議文檔? – Derek

+0

嗨,德里克。有一個名爲水仙花的框架可以在這裏找到:http://daffodil.codeplex.com/爲你做到這一點。我們已經嘗試過使用此項目和自定義製作的道具和目標文件。這些文件位於以下文件夾中: %ProgramFiles%\ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ \ PlatformToolsets或%ProgramFiles(x86)%\ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ \ PlatformToolsets 更詳細的信息可以在msdn博客上找到:http://blogs.msdn.com/b/vcblog/archive/2009/12/08/c-native-multi-targeting.aspx – cal

回答

1

現在解決這個問題,該問題是由默認打開DEP引起的。我可以確認任何人,儘管如果你使用相同的編譯器和鏈接器設置,構建的輸出應該和將會完全匹配。

相關問題