2012-06-22 79 views
0

我已經使用boost.asio在Visual CLR項目中成功實現了一個網絡應用程序。但是當我嘗試使用通用的「語言運行時支持(/ clr)」的Windows窗體項目中使用相同的代碼,這是由boost.asio推薦它不工作Error 15 error LNK2022: metadata operation failed (8013119F) : A TypeRef exists which should, but does not, have a corresponding TypeDef: (dummy): (0x01000019)Visual C++中的Boost.asio表單項目

我的問題是我怎樣才能整合我的網絡代碼完成在Windows窗體項目中使用boost.asio。我現在要嘗試的是將不同項目中的所有boost.asio實現編譯爲「無公共語言運行時支持」,並將其與Windows窗體項目鏈接起來。

同時,如果你們中的任何人都已經嘗試過了,請幫助我節省一些時間。

+0

「它不工作」對於這個問題並不是一個好的定義。 – Mohammad

+0

@穆罕默德我編輯,謝謝。 – Navin

+0

你是否也使用boost :: thread? – Mohammad

回答

1

看來你使用boost :: thread。 根據this錯誤報告,this問題和我個人的經驗,boost :: thread在靜態鏈接時不會與C++/CLR項目一起工作。你應該把它們放在一個不受管理的庫中,而不是像你自己說的那樣使用這個庫。

+0

你的意思是我應該將boost.asio代碼編譯爲dll並在windows窗體項目中使用dll? – Navin

+1

問題不在於使用boost :: asio,而是使用boost :: thread。一種方法是動態鏈接到boost :: thread。另一種解決方案是在代碼的boost :: thread相關部分使用本地包裝。 – Mohammad

+0

謝謝。我會嘗試以下並讓你知道。 – Navin

0

@穆罕默德我想我想通了。我需要在一個空的項目中手動添加表單,然後在其中包含boost/asio。加載boost/asio窗口項目它自己不工作可能是因爲預先編譯的標題。現在我必須找出助推線程問題。就像你說的我會嘗試你提出的方法並讓你知道。

+1

它確實有效。我已經用你的示例項目對它進行了測試。我提到的唯一問題是靜態鏈接。 – Mohammad

+0

它適合你嗎?但是當我在我的預處理器設置中添加「BOOST_ALL_DYN_LINK」時,出現此錯誤「程序無法啓動,因爲您的計算機缺少boost_system-vc90-mt-gd-1_49.dll」,但它實際上存在於「C:\ Boost \ lib \ i386「目錄。 – Navin

+1

將該文件複製到您的exe文件旁邊。 – Mohammad

相關問題