BCB元件如何引用*.PAS? |
答題得分者是:RaynorPao
|
BGman
初階會員 發表:28 回覆:85 積分:42 註冊:2003-01-10 發送簡訊給我 |
請問一下如何不使用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 發送簡訊給我 |
引言: 請問一下如何不使用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 發送簡訊給我 |
這是一支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 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 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
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
BGman
初階會員 發表:28 回覆:85 積分:42 註冊:2003-01-10 發送簡訊給我 |
|
BGman
初階會員 發表:28 回覆:85 積分:42 註冊:2003-01-10 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
BGman
初階會員 發表:28 回覆:85 積分:42 註冊:2003-01-10 發送簡訊給我 |
原來如此!
真是謝謝你!
另外,我把 *.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 發送簡訊給我 |
引言: 原來如此! 真是謝謝你! 另外,我把 *.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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |