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

BCB元件如何引用*.PAS?

答題得分者是:RaynorPao
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-27 19:02:39 IP:211.22.xxx.xxx 未訂閱
請問一下如何不使用Class 的方式來實現 External Function 的機制? 我目前將一個有Delphi元件改寫成BCB 其中有一些不屬於類別的Global Function 我在網路上看到有人說可以直接引用*.pas 於是我開啟我的*.bpk 連結了*.pas BCB幫我產生了*.hpp 可是我用pragma link "MyComponent" #include "xxx.hpp" 結果卻出現 Link Error Unresolved external UnitName::FunctionName 按照一般的慣例應該是 ClassName::FunctionName 而不是 UnitName 請問一下如何不使用Class 的方式來實現 External Function 的機制?
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-27 23:28:10 IP:61.221.xxx.xxx 未訂閱
引言: 請問一下如何不使用Class 的方式來實現 External Function 的機制? 我目前將一個有Delphi元件改寫成BCB 其中有一些不屬於類別的Global Function 我在網路上看到有人說可以直接引用*.pas 於是我開啟我的*.bpk 連結了*.pas BCB幫我產生了*.hpp 可是我用pragma link "MyComponent" #include "xxx.hpp" 結果卻出現 Link Error Unresolved external UnitName::FunctionName 按照一般的慣例應該是 ClassName::FunctionName 而不是 UnitName 請問一下如何不使用Class 的方式來實現 External Function 的機制?
BGman 你好: 方便把你的 *.pas 讓我試試看嗎?? -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-28 09:44:05 IP:211.22.xxx.xxx 未訂閱
這是一支Class 之外的 Global Function 功能是N 進位轉換 ex. <0f,16> →15 我把他寫在 TCSStd.pas 再把他Add 進我的*.bpk unit TCSStd; interface uses Windows, Messages, SysUtils, Classes; const // fixed cols/rows // valid hex characters HEX_LOWER = '0123456789abcdef'; HEX_UPPER = '0123456789ABCDEF'; HEX_ALLCHARS = HEX_LOWER HEX_UPPER; type // custom Exception class EMPHException = class(Exception); function RadixToInt(Value: string; Radix: byte): integer; implementation resourcestring ERR_INVALID_RADIXCHAR = 'Invalid character %s, cannot convert using radix %xh'; //------------------------------------------------------------------- // translate a radix coded string into an integer function RadixToInt(Value: string; Radix: byte): integer; var // LCrdTemp: cardinal; // absolute Result LCrdTemp: cardinal absolute Result; begin LCrdTemp := 0; Value := UpperCase(Value); while Value <> '' do begin if not (Pos(Value[1], HEX_UPPER) in [1..Radix]) then raise EMPHException.CreateFmt(ERR_INVALID_RADIXCHAR, [Value[1], Radix]); LCrdTemp := LCrdTemp * Radix cardinal(Pos(Value[1], HEX_UPPER) - 1); Delete(Value, 1,1); end; end; end.
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-28 09:46:45 IP:211.22.xxx.xxx 未訂閱
RaynorPao 兄: 麻煩你了! 新年快樂! LCrdTemp: cardinal absolute Result; 另外請問一下,這是什麼意思呢?
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-28 12:03:08 IP:203.73.xxx.xxx 未訂閱
引言: RaynorPao 兄: 麻煩你了! 新年快樂!
BGman 你好: 我用 BCB 寫了一個 RadixToInt 的 function 如果你覺得還可以的話~~那就先這樣用吧 < class="code"> __int64 __fastcall RadixToInt(AnsiString szRadix, BYTE bRadix) { AnsiString szHexUpper="0123456789ABCDEF"; AnsiString szHex=UpperCase(szRadix); __int64 i64Ret=0; int i=0, iLen=0; BYTE j=0; bool bFind; iLen=szRadix.Length(); for(i=0; i 備註: (1)對於輸入的參數,我並沒有做error handle,因此你在使用的時候最好稍微 注意一下 ( > --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-01-28 13:55:18 IP:211.22.xxx.xxx 未訂閱
感謝RaynorPao 拔刀相助,經過測試您的程式碼結果正確無誤,雖然複製貼上 時for,while迴圈漏了幾個字,還可以推測出來。 我也將我寫的與大家分享,只是如果可以引用*.pas 還是比較方便 因為可以少寫40多的 Global Function  #> > >
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-01-28 13:58:57 IP:211.22.xxx.xxx 未訂閱
奇怪我剛才有打 include math.h 怎麼不見了 另外程式的縮排也亂了,我猜是不是要加 【code】【\code】
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-01-28 14:19:21 IP:203.73.xxx.xxx 未訂閱
引言: 奇怪我剛才有打 include math.h 怎麼不見了 另外程式的縮排也亂了,我猜是不是要加 【code】【\code】 < face="Verdana, Arial, Helvetica"> BGman 你好: (1)先恭喜你把問題解決了 ( > --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-01-28 15:26:03 IP:211.22.xxx.xxx 未訂閱
原來如此! 真是謝謝你! 另外,我把 *.pas remove 掉 改回原來的BCB Global Function 卻出現Error Compiler 說模擬兩可Std::RadixToInt ... , RadixToInt ... 表示專案還記住之前 *.pas 的訊息 我因為懶得將所有的 Global Function 都加上:: 所以開始用力的砍掉所有的 obj , csm , lib .... 結果還是一樣的錯誤訊息 最後只好把 *.bpk 砍掉重建 請問一下,BCB 及 Delphi 元件的資訊都是記錄在哪個檔(一般專案是在bpr) 然而dpk 卻只有記錄 use 了哪些檔案remove 時,雖然消失在 use 清單之中 但是 rebuild 還是存在,重新開機也沒用
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-01-28 15:58:20 IP:61.219.xxx.xxx 未訂閱
引言: 原來如此! 真是謝謝你! 另外,我把 *.pas remove 掉 改回原來的BCB Global Function 卻出現Error Compiler 說模擬兩可Std::RadixToInt ... , RadixToInt ... 表示專案還記住之前 *.pas 的訊息 我因為懶得將所有的 Global Function 都加上:: 所以開始用力的砍掉所有的 obj , csm , lib .... 結果還是一樣的錯誤訊息 最後只好把 *.bpk 砍掉重建 請問一下,BCB 及 Delphi 元件的資訊都是記錄在哪個檔(一般專案是在bpr) 然而dpk 卻只有記錄 use 了哪些檔案remove 時,雖然消失在 use 清單之中 但是 rebuild 還是存在,重新開機也沒用
BGman 你好: (1)你可以將你的 *.bpr 用 UltraEdit 打開(xml 格式),然後搜尋你原來的 *.bpk 的關鍵字,然後把它刪掉 (2)另外你也注意以下連結中的問題
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-01-28 17:17:49 IP:211.22.xxx.xxx 未訂閱
感謝您的提醒 dclusr50 是Borland 預設的使用者元件資訊檔 如果不特別指定他會不斷被 update ,這個問題我知道 可能是我沒有把問題講的清楚,我是在只有 *.bpk 的情況下發生的 因為光是元件在 Compiler 就出現,函式名稱模擬兩可的錯誤訊息 所以我才覺得納悶,已經從 use 清單移除卻還記住之前的資訊, 願聞其詳
系統時間:2024-04-29 16:06:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!