請問2個Form的合併. |
尚未結案
|
ksvm
一般會員 ![]() ![]() 發表:29 回覆:42 積分:14 註冊:2004-07-27 發送簡訊給我 |
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 發送簡訊給我 |
ksvm你好
那是編譯器找不到 Sysutils::StrToIntA(const System::AnsiString) 這個函式的實作,依你的程式可能為叫用錯誤的UNIT1.OBJ檔,請檢查你的程式碼~還有兩個專案的叫用請參考這篇~看你是否有漏掉什麼步驟
http://delphi.ktop.com.tw/topic.php?topic_id=56164
|
海星
高階會員 ![]() ![]() ![]() ![]() 發表:41 回覆:217 積分:106 註冊:2003-01-09 發送簡訊給我 |
引言: 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 發送簡訊給我 |
|
ksvm
一般會員 ![]() ![]() 發表:29 回覆:42 積分:14 註冊:2004-07-27 發送簡訊給我 |
|
海星
高階會員 ![]() ![]() ![]() ![]() 發表:41 回覆:217 積分:106 註冊:2003-01-09 發送簡訊給我 |
引言: 謝謝兩位大大的回答, "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 發送簡訊給我 |
|
海星
高階會員 ![]() ![]() ![]() ![]() 發表:41 回覆:217 積分:106 註冊:2003-01-09 發送簡訊給我 |
|
KENI_LIN
中階會員 ![]() ![]() 發表:86 回覆:267 積分:90 註冊:2004-05-31 發送簡訊給我 |
我有一個簡單的用法,用子程式方式表示,假設你現在有兩個程式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 發送簡訊給我 |
前提是: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 發送簡訊給我 |
|
ksvm
一般會員 ![]() ![]() 發表:29 回覆:42 積分:14 註冊:2004-07-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |