全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1705
推到 Plurk!
推到 Facebook!

unresolved external 錯誤訊息中函式引數跟原型不一樣

尚未結案
chang1981
一般會員


發表:31
回覆:28
積分:11
註冊:2008-09-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-10 08:49:01 IP:61.230.xxx.xxx 訂閱
各位前輩好~ 小弟最近在寫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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-10 08:57:49 IP:163.28.xxx.xxx 訂閱
是否可以把使用到DrawFrame的code也po上來??
強制轉換成(HDC__ *) 有試過嗎?
------
FPGA驗證, FPGA開發平台, http://smims.com
chang1981
一般會員


發表:31
回覆:28
積分:11
註冊:2008-09-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-10 09:37:39 IP:61.230.xxx.xxx 訂閱
感謝I大的回覆, 小弟想把兩個專案直接上傳上來,但是好像沒辦法用編輯文章的方是上傳
是不是要重新發文才可以阿?

ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-10 09:41:07 IP:163.28.xxx.xxx 訂閱
取某一段即可吧...
------
FPGA驗證, FPGA開發平台, http://smims.com
chang1981
一般會員


發表:31
回覆:28
積分:11
註冊:2008-09-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-10 09:47:42 IP:61.230.xxx.xxx 訂閱
以下是範例程式的部分:
[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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-02-10 09:52:17 IP:163.28.xxx.xxx 訂閱
試過強制轉換??
[code cpp]
m_DstROI.DrawFrame((HDC)Canvas->Handle, E_FRAME_ON, TRUE);
[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
chang1981
一般會員


發表:31
回覆:28
積分:11
註冊:2008-09-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-02-10 09:54:26 IP:61.230.xxx.xxx 訂閱
是的我有試過了,出現一模一樣的錯誤訊息~

m_DstROI.DrawFrame((HDC)Canvas->Handle, E_FRAME_ON, TRUE);
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-02-10 09:58:52 IP:163.28.xxx.xxx 訂閱
你傳入的參數個數與宣告的不同??
------
FPGA驗證, FPGA開發平台, http://smims.com
chang1981
一般會員


發表:31
回覆:28
積分:11
註冊:2008-09-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-02-10 10:05:16 IP:61.230.xxx.xxx 訂閱
是的~ 因為我是比照範例程式的方法呼叫, 且小弟竊以為若原型宣告部分有給起始值,
則呼叫的時候可以省略該引數,所以就沒有去理會引數個數不同的問題~~
系統時間:2024-04-25 9:29:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!