如何使用(呼叫?)VC的函式 |
尚未結案
|
cceCKF
一般會員 發表:13 回覆:13 積分:5 註冊:2004-04-05 發送簡訊給我 |
因為要使用MD5來產生digest作為認證之用,所以參考RFC2617所提供的範例,在VC環境下可以順利的運作,但是我將這些c的source code以Project -> Add to project加進BCB專案後,呼叫其函式還是會出現"[Linker Error] Unresolved external'函式名稱'"的錯誤,參考了站上有關於這個錯誤的文章,大部分都是說函式沒有定義,但是我是想直接引用外部程式的函式(這樣描述不知道正不正確?),還是一定得在BCB裡面重新定義才能夠使用呢? 我把相關檔案放在發問區:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=76823 謝謝各位先進指教 --
我想多學一點 發表人 -
------
我想多學一點 |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
函數宣告是為了要讓COMPILER做型態檢查,就像變數一樣,沒有先宣告就不能使用,將檔案包含進專案了,只是告知COMPILER有這些檔案組成程式,COMPILER只會依照順序編譯,所以有可能發生先編譯的程式呼叫還沒被編譯到的程式,就會有上述錯誤發生。
另外C++呼叫C寫的函數,在C的標頭檔函數宣告前後要加上以下範例作法(以MD5部分CODE為例),忘了是啥原因,好像是CALLING CONVENTION不同!
< class="code">
#if defined(__cplusplus)
extern "C"
{
#endif /* MD5 context. */
typedef struct {
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX; void MD5Init PROTO_LIST ((MD5_CTX *));
void MD5Update PROTO_LIST ((MD5_CTX *, unsigned char *, unsigned int));
void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *));
#if defined(__cplusplus)
}
#endif
----------------------------------------------
We will either find a way, or make one. -Hannibal -。 發表人 - stallion 於 2005/08/15 20:43:16
|
cceCKF
一般會員 發表:13 回覆:13 積分:5 註冊:2004-04-05 發送簡訊給我 |
引言: 函數宣告是為了要讓COMPILER做型態檢查,就像變數一樣,沒有先宣告就不能使用,將檔案包含進專案了,只是告知COMPILER有這些檔案組成程式,COMPILER只會依照順序編譯,所以有可能發生先編譯的程式呼叫還沒被編譯到的程式,就會有上述錯誤發生。 請問這部份該如何解決呢? 另外C++呼叫C寫的函數,在C的標頭檔函數宣告前後要加上以下範例作法(以MD5部分CODE為例),忘了是啥原因,好像是CALLING CONVENTION不同! < class="code"> #if defined(__cplusplus) extern "C" { #endif /* MD5 context. */ typedef struct { UINT4 state[4]; /* state (ABCD) */ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } MD5_CTX; void MD5Init PROTO_LIST ((MD5_CTX *)); void MD5Update PROTO_LIST ((MD5_CTX *, unsigned char *, unsigned int)); void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *)); #if defined(__cplusplus) } #endif ---------------------------------------------- We will either find a way, or make one. -Hannibal -。 發表人 - stallion 於 2005/08/15 20:43:16先謝謝Stallion大大的回覆。小弟我試著把md5的部分直接加進BCB,header放到專案的.h檔裡面,主程式的部份如下: //--------------------------------------------------------------------------- #include雖然沒有Linker Error的錯誤發生,但是在compile時產生許多Extra Parameter in call to MD5Init()的錯誤(只要是MD5Init, MD5Update, MD5Final都有),請問這是什麼情況呢? 我也已經加入了Stallion大您所提到的部分.. > -- 我想多學一點 發表人 -
------
我想多學一點 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
cceCKF 您好: bruce0211 版主在使用 MD5 時,似乎有過一段 "火大" 的心路歷程,後來自己整理了一些資料後,直接將它寫成了副程式,而且是寫了 BCB 與 Delphi 兩個版本,您不妨參考一下 BCB 的那個部份,因為是直接使用 BCB 所撰寫的,因此不會有相容性的問題:
心得分享系列(BCB)
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=18760
請查看上述連結頁面中的最後方,於 2005/08/08 發表的那一篇。 7 天天敲鍵盤 v 時時按滑鼠 8
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
1.
引言:函數宣告是為了要讓COMPILER做型態檢查,就像變數一樣,沒有先宣告就不能使用,將檔案包含進專案了,只是告知COMPILER有這些檔案組成程式,COMPILER只會依照順序編譯,所以有可能發生先編譯的程式呼叫還沒被編譯到的程式,就會有上述錯誤發生。請問這部份該如何解決呢?答案很簡單,就是在呼叫的檔案中,先行INCLUDE該函數的原型檔案(就是標頭檔),讓COMPILER知道可能還沒被編譯到的檔案中該函數的樣子外貌啦。 2.cceCKF有點誤會我的意思~ 我所加入的那幾句前置處理器語法,是用在標頭檔,而不是程式碼中。 ---------------------------------------------- |
cceCKF
一般會員 發表:13 回覆:13 積分:5 註冊:2004-04-05 發送簡訊給我 |
引言: cceCKF 您好: bruce0211 版主在使用 MD5 時,似乎有過一段 "火大" 的心路歷程,後來自己整理了一些資料後,直接將它寫成了副程式,而且是寫了 BCB 與 Delphi 兩個版本,您不妨參考一下 BCB 的那個部份,因為是直接使用 BCB 所撰寫的,因此不會有相容性的問題: 心得分享系列(BCB) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=18760 請查看上述連結頁面中的最後方,於 2005/08/08 發表的那一篇。 7 天天敲鍵盤 v 時時按滑鼠 8謝謝RedSnow大的回覆, 這篇文章我有看過, 目前正對照bruce0211版主撰寫的程式哪些部分與RFC 1321裡面的MD5Init()、MD5Update()、MD5Final()相同, 因為這三個函式放到bcb後compile有error, 現在大概只能靠bruce0211版主所寫的程式來重寫一個Http digest authenticate的程式了.. > -- 我想多學一點
------
我想多學一點 |
cceCKF
一般會員 發表:13 回覆:13 積分:5 註冊:2004-04-05 發送簡訊給我 |
引言: 1.引言:函數宣告是為了要讓COMPILER做型態檢查,就像變數一樣,沒有先宣告就不能使用,將檔案包含進專案了,只是告知COMPILER有這些檔案組成程式,COMPILER只會依照順序編譯,所以有可能發生先編譯的程式呼叫還沒被編譯到的程式,就會有上述錯誤發生。請問這部份該如何解決呢?答案很簡單,就是在呼叫的檔案中,先行INCLUDE該函數的原型檔案(就是標頭檔),讓COMPILER知道可能還沒被編譯到的檔案中該函數的樣子外貌啦。 嗯..這點我有做到, 但還是沒辦法]< >> > 我所加入的那幾句前置處理器語法,是用在標頭檔,而不是程式碼中。 <>我真是太淺了< >> ---------------------------------------------- > 我參考了下面的討論, 原po最後還是把C的部分直接加到*.cpp裡面, 直接share給bcb使用似乎還是不可行?? 但我有更嚴重的問題, 就是放到*.cpp裡面竟然出現[C Error]..也許是語法上的問題吧?!
------
我想多學一點 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |