關於Variant與TIniFile間的應用問題 |
尚未結案
|
jackwu
一般會員 發表:28 回覆:54 積分:16 註冊:2002-08-18 發送簡訊給我 |
各位先進:
小弟在程式中,為了簡化INI檔案的讀檔與存檔方式,所以採用了Variant變數,來進行變數的存取動作,其程式碼如下:
//--------------------------------------------------------------------------- void __fastcall TToolForm::OpenINIFile(AnsiString FileName) { sFile = new TIniFile(FileName); } //--------------------------------------------------------------------------- void __fastcall TToolForm::CloseINIFile() { delete sFile; } //--------------------------------------------------------------------------- void __fastcall TToolForm::RWINIData(AnsiString Section, AnsiString Indn, Variant &Data) { if(rwState) { int nTmp; float fTmp; bool bTmp; AnsiString sTmp; switch(Data.VType) { case varInteger: Data = sFile->ReadInteger(Section, Indn, nTmp); break; case varBoolean: Data = sFile->ReadBool(Section, Indn, bTmp); break; case varSingle: Data = sFile->ReadFloat(Section, Indn, fTmp); break; case varString: Data = sFile->ReadString(Section, Indn, sTmp); break; } } else sFile->WriteString(Section, Indn, Data); } //--------------------------------------------------------------------------- void __fastcall TToolForm::RWLearnData(AnsiString FileName) { OpenINIFile(FileName); RWINIData("GrabParameter", "g_nGlassLen_mm", g_nGlassLen_mm); RWINIData("GrabParameter", "g_nViewOverlap", g_nViewOverlap); RWINIData("GrabParameter", "g_nViews", g_nViews); RWINIData("GrabParameter", "g_fPixel_um", g_fPixel_um); RWINIData("GrabParameter", "g_nSize", g_nSize); CloseINIFile(); } //---------------------------------------------------------------------------現在在文字的儲存與讀取沒有問題,但是發現Variant的變數要傳回其他的變數如int, float, AnsiString等,卻沒有辦法將參數傳遞過去,請問各位先進,我的程式有哪裏寫錯了呢? 因為是第一次使用Variant變數,還不是很了解其用法,煩請各位先進指教,謝謝 |
jackwu
一般會員 發表:28 回覆:54 積分:16 註冊:2002-08-18 發送簡訊給我 |
各位先進:
看來此一問題好像沒有辦法找到有效的解答,所以小弟將程式改寫
雖然已經不是採用Variant,但還是可以達到相同的效果
程式碼如下
void __fastcall TForm1::OpenINIFile(AnsiString FileName) { sFile = new TIniFile(FileName); } //--------------------------------------------------------------------------- void __fastcall TForm1::CloseINIFile() { delete sFile; } //--------------------------------------------------------------------------- void __fastcall TForm1::RWINIData(AnsiString Section, AnsiString Indn, int &Data) { if(rwState) Data = sFile->ReadInteger(Section, Indn, Data); else sFile->WriteInteger(Section, Indn, Data); } //--------------------------------------------------------------------------- void __fastcall TForm1::RWINIData(AnsiString Section, AnsiString Indn, float &Data) { if(rwState) Data = sFile->ReadFloat(Section, Indn, Data); else sFile->WriteFloat(Section, Indn, Data); } //--------------------------------------------------------------------------- void __fastcall TForm1::RWINIData(AnsiString Section, AnsiString Indn, AnsiString &Data) { if(rwState) Data = sFile->ReadString(Section, Indn, Data); else sFile->WriteString(Section, Indn, Data); } //--------------------------------------------------------------------------- void __fastcall TForm1::RWLearnData(AnsiString FileName) { OpenINIFile(FileName); RWINIData("a", "Int", testint); RWINIData("a", "Float", testfloat); RWINIData("a", "AnsiString", teststring); CloseINIFile(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { rwState = true; testint = 100; testfloat = 22.001; teststring = "aa"; RWLearnData("d:\\a.ini"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { rwState = false; testint = 10; floattestfloataa = 10.001; teststring = "test"; RWLearnData("d:\\a.ini"); } //---------------------------------------------------------------------------不過如有更好的解決方法,也歡迎各位交流一下 發表人 - jackwu 於 2005/07/26 13:56:30 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |