2013-02-07 46 views
-2

我想使用CvCaptureFromFile(..)函數的源代碼,因爲我不想在我的項目中使用OpenCV庫函數。所以我按F10,F11進入功能,我複製了我需要的東西,並將它們轉換成C代碼。直到現在一切都很好。CvCaptureFromFile(..)的源代碼

但是,當我試圖運行我收到函數內部鏈接錯誤icvIntFFMPEG(void)

錯誤如下:

錯誤1 error LNK2019: unresolved external symbol "__declspec(dllimport) void * __stdcall GetProcAddress(struct HINSTANCE__ *,char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "void __cdecl icvInitFFMPEG(void)" ([email protected]@YAXXZ)
錯誤2 error LNK2019: unresolved external symbol "struct HINSTANCE__ * __stdcall LoadLibrary(char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "void __cdecl icvInitFFMPEG(void)" ([email protected]@YAXXZ)

我複製源代碼中的所有內容。任何想法,我哪裏錯了?我該如何解決這個錯誤?

UPDATE:如果我包的標題文件(其中我應對的源代碼)一個extern內部「C」類似這 -

extern "C" { 
    #include "defination.h" 
} 

然後,第一誤差消失了,並且誤差與調用LoadLibrary變化

error LNK2019: unresolved external symbol [email protected] referenced in function _icvInitFFMPEG

+1

您複製了您*需要的東西,但不復制您複製的東西需要的東西......爲什麼不直接使用OpenCV而不是玩這些「遊戲」? –

+0

我不能使用opencv多數民衆贊成爲什麼我使用的源代碼.. – MMH

回答

2

的OpenCV採用的ffmpeg - 這是一個非常大的項目。 ffmpeg使用窗簾後面的其他工具。你可能想使用ffmpeg,但是從ffmpeg獲取源代碼本身是愚蠢的 - 你會花費數年的時間來處理那些代碼 - 真的。

因此,決定一個視頻輸入庫 - 無論是OpenCV,ffmpeg,Direct3D或其他,並使用它。

不要拘泥於'你不能使用外部庫'的想法,因爲你離不開它們。開發這樣一個圖書館需要幾年的時間 - 我確信你不想那麼做。

+0

感謝您的幫助,但我已經告訴我從我的教官我不能使用外部庫:(:(在這種情況下任何想法,我應該如何前進。 – MMH

+4

然後你可能也想編寫一個新的操作系統,一個編譯器並設計一臺計算機,你可能已經錯誤地理解了這些需求,如果你爲圖像處理課程工作,你自然會爲自己編寫算法。視頻閱讀是另一回事,你需要像使用監視器,計算機和編譯器一樣使用庫,如果你的作業是編寫視頻解碼器,請不要作弊。 – Sam

+0

我不是作弊我被允許看到從opencv或任何其他庫的源代碼..我不能直接使用他們..通常感謝您的答案。 – MMH

1

好吧,看起來你得到未解決的調用LoadLibrary()/ GetProcAddress()函數內Kernel32.dll。你使用什麼IDE /項目類型?至少據我記憶,除非指定/ NODEFAULTLIB,否則默認情況下應該鏈接Kernel32.lib。您可以嘗試將#pragma comment(lib, "kernel32.lib")添加到您複製代碼的文件中,但沒有關於您的設置的更多信息,很難回答是什麼導致此問題。

+0

嗨,感謝您的答覆。我使用VS 2010,我有鏈接編輯Kernel32。lib中添加#pragma註釋(lib,「kernel32.lib」),但仍然得到相同的錯誤。 – MMH