2011-12-04 27 views
2

我想在我的C++/CLI應用程序中包含第三方C++庫。結合C++/CLR和C++

這樣做的標準方法是什麼?

在此先感謝。

回答

1

有很少吧,C++/CLI被明確爲支持此方案。只需從CLR節點中選擇一個項目模板即可開始。您必須告訴鏈接器鏈接.lib文件和#include C++/CLI源代碼中的標題。

唯一可以解決的問題是#include頭文件可能包含可能被C++/CLI編譯器誤解的聲明。例如C函數聲明。最好的辦法是向編譯器明確告訴它。像這樣:

#include "stdafx.h" 
#pragma managed(push, off) 
#include "3rdparty.h" 
#pragma managed(pop) 
#pragma comment(lib, "3rdparty.lib") 
// Rest of your code 

該片段中的#pragma註釋告訴鏈接器也鏈接第三方庫的.lib文件。讓您無需在鏈接器的「附加依賴關係」設置中明確執行此操作。

就是這樣。

2

我不知道是否存在這樣的標準,您可以像使用C++應用程序一樣使用C++/CLI應用程序中的C++庫。 我總是試圖做的唯一事情是將第三個庫包裝在Proxy或Facade設計模式後面,以便客戶端始終可以與託管類一起工作。 如果您的C++/CLI應用程序是其他.NET應用程序使用的庫,這一點尤其重要。

例子:

// 3rd party header 
class Value{}; 

// your C++/CLI app 
#include <3rdpaty/Value.h> 

public ref class ValueWrapper 
{ 
public: 
    // wrapper interface here 

private: 
    std::scoped_ptr<Value> value_; 
}; 
+0

由於您不能使用非託管值類型作爲託管類的成員 – stijn

+0

,因此無法編譯您可以始終使用向前值和不透明指針指向值。這個編譯和完美的作品。 – nogard

+0

這是我在幾個月前完成接口連接的過程,它工作正常。 – Max