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

請問2個Form的合併.

尚未結案
ksvm
一般會員


發表:29
回覆:42
積分:14
註冊:2004-07-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-25 01:16:10 IP:61.219.xxx.xxx 未訂閱
2個projects各個在獨立時Compiler都沒問題且可執行.但把B程式的.h與.cpp,VCL都移到A程式內之後就會因為include的位置不同而有很奇怪的err Unresolved external '__fastcall Sysutils::StrToIntA(const System::AnsiString)' referenced from D:\TEST\UNIT1.OBJ [C Error] Unit1.cpp(164): E2034 Cannot convert 'AnsiString' to 'const char * 程式也沒有錯. 不知高手知道有方便的方法? 請指教
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-25 02:32:08 IP:203.204.xxx.xxx 未訂閱
ksvm你好 那是編譯器找不到 Sysutils::StrToIntA(const System::AnsiString) 這個函式的實作,依你的程式可能為叫用錯誤的UNIT1.OBJ檔,請檢查你的程式碼~還有兩個專案的叫用請參考這篇~看你是否有漏掉什麼步驟 http://delphi.ktop.com.tw/topic.php?topic_id=56164
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-25 20:11:26 IP:59.104.xxx.xxx 未訂閱
引言: 2個projects各個在獨立時Compiler都沒問題且可執行.但把B程式的.h與.cpp,VCL都移到A程式內之後就會因為include的位置不同而有很奇怪的err Unresolved external '__fastcall Sysutils::StrToIntA(const System::AnsiString)' referenced from D:\TEST\UNIT1.OBJ [C Error] Unit1.cpp(164): E2034 Cannot convert 'AnsiString' to 'const char * 程式也沒有錯. 不知高手知道有方便的方法? 請指教
檢查你的 Unit1.cpp 這個檔案第 164 行,你有一個地方有用到字串, 把他改成 字串.c_str() 就可以解查這部分的問題。 沒看到你的程式碼,我猜你應該是傳一個字串到一個函數裡面。 字串那個變數後面加 .c_str() 就解決了。
ksvm
一般會員


發表:29
回覆:42
積分:14
註冊:2004-07-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-25 23:31:08 IP:61.219.xxx.xxx 未訂閱
謝謝兩位大大的回答, Cannot convert 'AnsiString' to 'const char *用海星大大指點.c_str()是ok 但 Unresolved external '__fastcall Sysutils::StrToIntA(const System::AnsiString)' referenced from D:\TEST\UNIT1.OBJ 還再找... 很奇怪,各個在獨立時Compiler都沒問題且可執行.
ksvm
一般會員


發表:29
回覆:42
積分:14
註冊:2004-07-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-25 23:32:21 IP:61.219.xxx.xxx 未訂閱
考慮自製個StrToIntA(const System::AnsiString) 應是可行? 發表人 - ksvm 於 2004/12/25 23:36:19
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-26 00:00:27 IP:59.104.xxx.xxx 未訂閱
引言: 謝謝兩位大大的回答, "Cannot convert 'AnsiString' to 'const char"用海星大大指點.c_str()是ok 但 Unresolved external '__fastcall Sysutils::StrToIntA(const System::AnsiString)' referenced from D:\TEST\UNIT1.OBJ 還再找... 很奇怪,各個在獨立時Compiler都沒問題且可執行.
你的StrToIntA() 這個函數是定義在那個檔案?? 假設你這個函數定義在 UNIT2.cpp 跟 UNIT2.hpp,那你的 UNIT1.cpp 裡面應該再加上
#include  
=================================================================== 還有你的 Debug 能力要加強一下,他的錯誤訊息都已經提示的非常的明白 你的程式碼哪裡錯了,甚至要怎樣解決都寫的很清楚,會寫程式只是程式設 計師最基本入門而已,要學會看懂 error訊息並且排解,那才會初學合格。 像你這次的錯誤訊息,發生錯誤原因都寫得那麼清楚了,找不到 StrToIntA 這個外部函數,所以你要找出到底 StrToIntA() 這個函數在哪? 要讓他 跟函數一起編譯才行。看不懂英文的話,就用軟體翻譯一下就好了。 我看那個 StrToIntA 好像是屬於 Sysutils 這個 Class 的方法,你先看一下 Sysutils 這個 Class 是在那個 hpp 檔案定義的,把他加到你的 hpp 文件 內就對了。 =================================================================== 另外發生這種狀況時,嘗試把快取關閉掉,重新編譯一次,有時候這種找不到 XX函數的問題,就會自己解決。 menu->Project->Options->Compiler->Pre-Compixxxx 這個地方把他改成 none,不要讓他用快取,再重新編譯過,他就會慢慢去搜尋出這個函數的位置,但相對的編譯速度會較慢。 發表人 - 海星 於 2004/12/26 00:07:11
ksvm
一般會員


發表:29
回覆:42
積分:14
註冊:2004-07-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-26 23:34:57 IP:61.219.xxx.xxx 未訂閱
那我去試試看 謝謝指點.
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-27 00:00:39 IP:59.104.xxx.xxx 未訂閱
引言: 考慮自製個StrToIntA(const System::AnsiString) 應是可行? 發表人 - ksvm 於 2004/12/25 23:36:19
當然可以!! 看那個名稱命名,功能應該只是把字串變成 Integer 數值而已, 甚至你把所有的 StrToIntA 字串都改成 StrToInt() 我想也沒差, 用 VCL 已經有的 StrToInt() 去做這件事就好了不需再寫一次.
KENI_LIN
中階會員


發表:86
回覆:267
積分:90
註冊:2004-05-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-27 15:13:05 IP:220.228.xxx.xxx 未訂閱
我有一個簡單的用法,用子程式方式表示,假設你現在有兩個程式A跟B: (1)開啟Form1,將A程式物件建立在Form1上 (2)你可以在A程式底下新建立一個Form2(在工具列File->New Form就可以產生) (3)將你的B程式物件建立在Form2 (4)記的在Form1程式下要加入這一段#include"Unit2.h"; (5)只要在Form1程式底下,建立一個Button1(假設),就可以將B程式叫出來,如下所示 Void_fastcall TForm1::Button1(Topject*sender) { Form2->ShowMode(); //呼叫Form2的B程式視窗 } 這種方法就比較不會有compile錯誤,你可以試看看! Keni Lin
------
Keni Lin
ksvm
一般會員


發表:29
回覆:42
積分:14
註冊:2004-07-27

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-27 15:47:46 IP:61.219.xxx.xxx 未訂閱
前提是:2個projects各個在獨立時Compiler都沒問題且可執行但把B程式的.h與.cpp,VCL都移到A程式內,意思就是把B程式內所建的功能全移到A程式內(B程式就當做是不見了) 奇怪的就是也沒用到StrToIntA,但就會有這個函式冒出來(只有用到StrToInt這個函數) 只有這個err是最少的.(如把#include位置再調一下就更多err出來,) 試著在UNIT1.obj內把StrToIntA改成StrToInt 就變成 [Linker Error] Unresolved external 'TForm1::StrToInt' referenced from D:\TEST\UNIT1.OBJ, 己試了幾种方法..... 再請教KENI_LIN大大的方法這個Form2->ShowMode(); 用法一下, 它會轉移B程式的功能而不會再show 出From2? 請指教
KENI_LIN
中階會員


發表:86
回覆:267
積分:90
註冊:2004-05-31

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-27 16:44:27 IP:61.64.xxx.xxx 未訂閱
這一種子程式用法,可以建立許多的Form,但都有一個前提就是每個Form都是獨立作業,所以彼此之間是沒有關係的,也就是須等B程式(Form2)做完後,才能回到A程式(Form1)去呼叫B程式的結果. 如果你這兩個程式是要平行(同時)執行,可能就不適合用這種方式,因為我有遇到跟你差不多的問題,兩個程式結合後,在另一個有做 > 呼叫另一個 > 寒窗苦讀十年書;只待今朝狀元時!~~ ︵ / / ︵ ( ∩ ∩ ) ○ ︶ ○
------
Keni Lin
ksvm
一般會員


發表:29
回覆:42
積分:14
註冊:2004-07-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-12-27 16:54:08 IP:61.219.xxx.xxx 未訂閱
正中紅心,就是Edit->text, Combox->text.
系統時間:2024-05-15 19:27:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!