2010-10-13 44 views
1

我正在使用教程中的代碼庫提供的功能將非靜態成員函數的函數點傳遞給需要靜態函數指針的函數,可能有助於知道我起訴了什麼,所以這裏是鏈接http://www.codeproject.com/KB/cpp/thunk32.aspx此代碼使用Boost庫,我已經下載並設置了或多或少的一切。MSVS2010鏈接器錯誤悲傷 - 不完全確定什麼是錯誤

在咚庫,頭文件中的一個具有單元,讀取

#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,THUNK32_MAX_ARGS,"Thunk32_template.h")) 
??=include BOOST_PP_ITERATE() 
#undef BOOST_PP_ITERATION_PARAMS_1 

,但是這給了我史詩大量的錯誤,我可以通過改變它解決到

#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,THUNK32_MAX_ARGS,"Thunk32_template.h")) 
#include BOOST_PP_ITERATE() 
#undef BOOST_PP_ITERATION_PARAMS_1 

這個下載的代碼作爲第二個項目包含在我的解決方案中,它能夠愉快地進行編譯和構建。但我的項目正在使用此代碼的問題聯繫起來,救人問,我得到這些錯誤信息

1>WebCamera.obj : error LNK2019: unresolved external symbol "protected: __thiscall indev::Thunk32Base::Thunk32Base(void)" ([email protected]@@[email protected]) referenced in function "public: __thiscall indev::Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>::Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>(void)" ([email protected]@@[email protected]@[email protected]@@[email protected]@@[email protected]) 
1>WebCamera.obj : error LNK2019: unresolved external symbol "protected: __thiscall indev::Thunk32Base::~Thunk32Base(void)" ([email protected]@@[email protected]) referenced in function "public: __thiscall indev::Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>::~Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>(void)" ([email protected]@@[email protected]@[email protected]@@[email protected]@@[email protected]) 
1>WebCamera.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "public: bool __thiscall WebCamera::Init(struct HWND__ *)" ([email protected]@@[email protected]@@Z) 

我覺得這是想說的是,構造函數和析構函數沒有聲明,我的WebCamera.Init ()也混亂了。我確信Thunk32項目導出的庫包含在我的其他項目中,但仍然出現這些錯誤。

我想知道,如果我已經做出了正確的假設,??=include應該已經更改爲#include,如果我有,我做了什麼錯誤或未能做到這些結果在這些鏈接器錯誤。或者,如果您可以提供給我一種不同的方式,可以將函數指針傳遞給非常靜態的成員函數。

感謝

回答

0

好的,所以我現在設法解決了這個問題。

Michael Burr nicley說,??=是基本相同的輸入#但在某種程度上是誰不要有井號可以鍵入它的人,看到Purpose of Trigraph sequences in C++?

Hans Passant然後拿到球滾動我買讓我知道我沒有完全鏈接的東西。我需要右鍵點擊我的主項目,選擇'Project Dependencies'並選擇我的其他項目,它具有thunk32代碼。我還需要告訴我的主要項目,看看Thunk項目在哪裏保存lib,結果證明在我的文檔中的一個文件夾中(解釋一個!)。我還需要添加Thunk32d.lib(注意'd'因爲我處於調試模式,Hans說我需要winmm.lib,但事實證明(當用googling函數給我錯誤時,我需要Vfw32.lib

謝謝你們!我希望通過賦予完整的答案是這樣它可以幫助一些其他人誰也有類似的問題。

0

你有一個構造函數和在indev :: Thunk32Base類,你忘了在CPP文件中定義聲明的析構函數?

+0

揭掉,indev :: Thunk32Base既有structors,他們已經部分的代碼我沒有收到任何編譯錯誤,只是我提到的鏈接錯誤 – thecoshman 2010-10-13 17:59:08

+0

你不會因爲缺少函數定義而得到編譯時錯誤,你只會得到鏈接時間錯誤,例如原始問題中的錯誤,所以請確保函數不僅僅是declar編輯,但也**定義**! – 2010-10-13 18:05:47

+0

是的,他們被定義 – thecoshman 2010-10-13 18:16:23

3

??=#字符的「三字母」序列。根據標準,三合字母被假設爲第一步驟中的一個進行處理的處理(在階段1 - 預處理器處理指令之前),所以:

??=include "whatever" 

應相當於:

#include "whatever" 

所以你應該能夠使用這種形式(我不知道爲什麼在三字母被擺在首位放在那裏? - 某種邪惡的笑話也許)

然而,三合引起問題和困惑(可能比他們更幫助),所以編譯器似乎正在向w方向發展指責他們和/或默認不處理他們。 VS 2010中的編譯器在默認情況下關閉了三角圖處理 - 您必須使用/Zc:trigraphs選項才能打開它。

查看Purpose of Trigraph sequences in C++?瞭解更多詳情。

+0

所以......應該改變無關緊要(實際上它是有利的,因爲它可以讓編譯工作正常)從你說的話,我不應該打擾試圖啓用trigraphs,因爲它不會有所作爲。 – thecoshman 2010-10-13 18:20:40

+0

@thecoshman:我認爲你是對的。 – 2010-10-13 18:30:25

2

啊,Einar,好人。做閃光和共享點的東西,這些天,哎。挪威人,可能會解釋trigraphs。

Anyhoo,沒什麼複雜的,你只是忘了告訴鏈接器看一些庫。右鍵單擊您的項目,Project Dependencies,勾選Thunk項目。這可以確保Thunk32.lib可以查看並解析ctor和dtor。

再次右鍵單擊Properties,Linker,Additional dependencies,添加「winmm.lib」。這解決了capCreateCaptureWindow符號。

+0

由於令人愉快地高興你的答案,可悲的是它沒有解決我的問題相同的鏈接器錯誤即將上演......我可能已經處理了Thunk的輸出文件夾,但我也結束了文件夾作爲我的其他項目庫包括文件夾事情......任何箍,必須有睡眠。我期待得到更多的幫助,非常感謝你幫助夥計 – thecoshman 2010-10-13 22:45:24

+0

確定,所以我管理我的兩個鏈接錯誤。我按照你的說法做了,沒有區別,然後注意到Thunk32正在構建一個調試版本,所以我將Thunk32d.lib添加到其他依賴項中。現在我只需要從我的問題中排序我的第三個鏈接錯誤。 – thecoshman 2010-10-14 09:58:09