2012-02-08 64 views
0

我正在使用Visual Studio,.Net和Windows。圍繞靜態庫託管C++包裝

我正在寫一個靜態庫的包裝。我需要幫助的問題是錯誤消息:

LINK:致命錯誤LNK1104:無法打開文件「Unmanaged.lib」

「非託管」是一類我的項目,但它不是項目的名稱。

我創建了一個C++ CLR類庫項目。其中我創建了一個託管類和一個非託管類。非託管類調用靜態庫。託管類使用非託管類。編譯器和鏈接器似乎試圖爲非託管類創建一個庫,但這不是應該發生的事情。

我可以在託管類庫項目中擁有一個非託管類(僅由託管類使用)嗎?我假設如此,但如果我錯了,那麼它會讓我省時間知道我所要做的事情是行不通的。

+3

您確定鏈接器 - >輸入 - >附加依賴項中沒有「Unmanaged.lib」嗎?如果沒有,搜索#pragma comment(lib,「Unmanaged.lib」)。 – gwiazdorrr 2012-02-08 10:43:14

+1

因此,您有一個要鏈接到託管程序集的靜態庫。它位於哪裏?它叫什麼名字?可能不是'unmanaged.lib',那將是不尋常的。 – 2012-02-08 14:22:41

+0

看到鏈接器錯誤,我猜測該項目既不是一個靜態庫,也不是一個CLR項目。需要更多信息。 – 2012-02-08 15:53:13

回答

1

我剛開始第一次編寫託管代碼,並花了很長時間弄清楚如何使用我的非託管類庫。但我想出了一個辦法。是的,你可以在同一個庫中擁有託管和非託管類。在我的情況下,一個複雜的是,我的非託管代碼只在VS2008編譯,而我需要把它放在託管代碼,只編譯與VS2010。所以這裏是我做的:

  1. 像往常一樣將我的非託管代碼構建到使用VS2008的靜態庫中。這將產生MyUnmanagedClasses.lib

  2. 在VS 2010中,右鍵點擊/對(管理)項目性質,我想使用的非託管代碼

  3. 選擇鏈接器/輸入

  4. 在第一個框中「附加依賴項」 中,增加MyUnmanagedClasses.lib

  5. 選擇鏈接器/一般

  6. 在 「附加庫目錄」 b ox,添加MyUnmanagedClasses.lib所在的目錄

  7. 就像你一直會使用你的非託管類!

注:不添加非託管項目本身到您的解決方案 - 這是我第一次嘗試,並沒有工作;就像我上面所說的那樣鏈接到庫中。

+1

你有本機代碼編譯VC2008,但不是VC2010?這是一個非常糟糕的跡象,通常表明代碼中存在錯誤,因爲2008年到2010年間的一致性有所提高。 – 2012-03-23 05:25:20