unresolved external 錯誤訊息中函式引數跟原型不一樣 |
尚未結案
|
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
各位前輩好~ 小弟最近在寫BCB時碰到了一個不知怎樣解決的linker error
前提是 1.我已經正確的將lib檔加入專案,且正確的設好lib路徑 2.已經include正確的.h檔, 並設定好正確的include路徑 但是仍然會出現以下錯誤訊息 [Linker Error] Unresolved external 'EGenericROI::DrawFrame(void *, E_FRAME_POSITION, int, float, float, float, float)' referenced from D:\EVISION_TEST0205\UNIT1.OBJ 這樣的訊息在我的認知裡面 是 unit1.h當中所include的 具有 EGenericROI::DrawFrame原型的 .h檔(叫做EASY.h) 沒辦法在加入專案的lib檔案中找到對應的函式實體 , 但是我的確有將包含此函式實體的lib檔 EASYBCB6.lib加入專案 於是我開啟了範例程式 並將EASYBCB6.lib從範例程式專案中移除,想觀察範例程式出現的錯誤訊息,發現出現很多錯誤訊息 其中'EGenericROI::DrawFrame這一項的錯誤訊息如下: [Linker Error] Unresolved external 'EGenericROI::DrawFrame(HDC__ *, E_FRAME_POSITION, int, float, float, float, float)' referenced from D:\BCB SAMPLES\EROI\SDIMAIN.OBJ 於是我打開EASY.h 發現'EGenericROI::DrawFrame的第一個引數的確是HDC__ *, 我懷疑我自己寫的程式就是因為引數型別錯誤 造成EASY.h沒辦法在EASYBCB6.lib 當中找到正確的實體, 只是我不知道為什麼會出現這樣的結果, 難道式我在unit.cpp 中call此函式時所傳入的引數所造成的嗎? 但是我傳的引數一樣都是handle阿,請大家幫幫小弟~ 感恩!! PS.小弟另外做了一個實驗,就是在EASY.h的現'EGenericROI::DrawFrame原型下面直接加上隨便一段函式實體,這樣子就會編譯成功了,提供大大們參考 謝謝!! 編輯記錄
chang1981 重新編輯於 2009-02-10 09:32:27, 註解 無‧
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
以下是範例程式的部分:
[code cpp] void __fastcall TSDIAppForm::FormPaint(TObject *Sender) { if (!m_bImageLoaded) return; // nothing else to do otherwise // Retrieve the image and ROI // Copy the source image to the destination ImgOper(IMG_COPY, &m_SrcImage, &m_DstImage); // Invert the ROI contents ImgOper(IMG_INVERT, &m_DstROI, &m_DstROI); // Draw the image m_DstImage.Draw(Canvas->Handle); //Draw the ROI m_DstROI.DrawFrame(Canvas->Handle, E_FRAME_ON, TRUE); } [/code] 以下是我自己的程式 [code cpp] void __fastcall TForm1::FormPaint(TObject *Sender) { if (!m_bImageLoaded) return; // nothing else to do otherwise // Draw the image m_DstImage.Draw(Image1->Canvas->Handle); //Image1->Refresh(); //Draw the ROI m_DstROI.GetType(); m_DstROI.DrawFrame(Canvas->Handle, E_FRAME_ON, TRUE); } [/code] 其實我只是複製貼上而已,另外我嘗試過自己建一個image1 將程式改成 m_DstROI.DrawFrame(image1->Canvas->Handle, E_FRAME_ON, TRUE); 結果也是相同 另外附上EASY.h當中的函式原型 [code cpp] E_DLL0 void E_DLL1 DrawFrame ( HDC hDC, E_FRAME_POSITION eFramePosition = E_FRAME_ON, BOOL bHandles = FALSE, FLOAT32 f32ZoomX = 1.f, FLOAT32 f32ZoomY = 0.f, FLOAT32 f32PanX = 0.f, FLOAT32 f32PanY = 0.f); [/code] |
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |