選擇目錄&新增目錄【Q:程式移植】 |
答題得分者是:aftcast
|
bkgbtonxu
一般會員 ![]() ![]() 發表:10 回覆:14 積分:4 註冊:2007-12-17 發送簡訊給我 |
各位大大好,小弟有程式移植的問題想請教,首先附上參考網扯如下:
一http://delphi.ktop.com.tw/board.php?cid=168&fid=914&tid=72744 二http://www.wretch.cc/blog/Nelson/1805416 說明:因為貴站提供的資訊有部份未完整【網扯一】,所以附上一個網路上較完整的資訊【網扯二】 參考以上資訊已新增一專案並已完成功能,但在移植程式時發生問題 所以提問:該如何解決= =""目前仍想不到小到的部份是哪~ 以下是CODE CPP檔 [code cpp] #include #define NO_WIN32_LEAN_AND_MEAN #define BIF_NEWDIALOGSTYLE 0x0040 #include #pragma hdrstop #include #include "Unit1.h" void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString StartDirectory = "C:\\"; // 設定對話框起始目錄 AnsiString SelectedDirectory; // 儲存被選擇目錄的路徑字串 AnsiString DirectoryName; // 儲存被選擇目錄的名稱字串 if(SetDirectory(StartDirectory, &SelectedDirectory, &DirectoryName)) { ShowMessage("選擇目錄:" SelectedDirectory "\n目錄名稱:" DirectoryName); } } [/code] 以下是.H檔 [code cpp] public: // User declarations __fastcall TForm1(TComponent* Owner); AnsiString StartDirectory ; int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lpData); bool __fastcall SetDirectory(AnsiString StartDir, AnsiString *selDir, AnsiString *dirName) { auto bool rc = true; BROWSEINFO bi; char PathStr[MAX_PATH]; char FolderName[MAX_PATH]; LPITEMIDLIST ItemID; memset(&bi, 0, sizeof(BROWSEINFO)); memset(PathStr, 0, MAX_PATH); bi.hwndOwner = Application->Handle; bi.pszDisplayName = FolderName; bi.lpszTitle = "選擇資料夾"; bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN | BIF_NEWDIALOGSTYLE; //bi.lpfn = reinterpret_cast bi.lpfn = NULL; bi.lParam = reinterpret_cast CoInitialize(NULL); ItemID = SHBrowseForFolder(&bi); if(ItemID == NULL) { rc = false; } else { SHGetPathFromIDList(ItemID, PathStr); } GlobalFreePtr(ItemID); CoUninitialize(); *selDir = PathStr; *dirName = FolderName; return rc; } }; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lpData) { if(uMsg == BFFM_INITIALIZED) { PCSTR prevDir = reinterpret_cast if(DirectoryExists(prevDir)) { SendMessage(hwnd, BFFM_SETSELECTION, static_cast } } return 0; } //--------------------------------------------------------------------------- //------------------- extern PACKAGE TForm1 *Form1; //------------------- [/code] 以上程式 在建新專案時 已編譯成功 但照一樣的程式放置對應的位置,無法complier成功 換的地方頂多是改unit.h&unit.cpp改放置unit2.cpp/.h而已 出現錯誤的地方很多例如下: undefined symbol 'BFFM_INITIALIZED' undefined symbol 'BFFM_SETSELECTION' undefined symbol 'BROWSEINFO' STATEMENT MISSING; ............. 蠻多的= ="" 想不通~照像植移~HEAD也有一樣照加~該給的應該也給了~到底是少弄了什麼東西>
------
http://www.wretch.cc/album/bkgbtonxu |
aftcast
站務副站長 ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
快速的看了一下你的h檔,你用了inline menthod。請問你是否有在class的外面放了
[code cpp] #include #define NO_WIN32_LEAN_AND_MEAN #define BIF_NEWDIALOGSTYLE 0x0040 [/code] 我看不到h檔的最上面是否有這三句?!
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
bkgbtonxu
一般會員 ![]() ![]() 發表:10 回覆:14 積分:4 註冊:2007-12-17 發送簡訊給我 |
[code cpp] 請在此區域輸入程式碼
[/code] 這三列我有試過放進去,會跳出shobjidl.h檔,顯示出以下問題 E2338 Multiple declaration for 'FOLDERSETTINGS' E2338 Multiple declaration for 'DESKBANDINF0' ......等 類似這樣 但強調的是說,在新建一個.bpr去式的時侯~已經compliers成功ok~也顯示的出來 但依樣畫壺盧將程式放過去~位置也一樣,但就是出現錯誤= =""照以前經弄程式的經驗~應該是會成功 想不出到底是怎麼回事= ="這是我冏的地方,明明弄建的bpr是ok的= ="
------
http://www.wretch.cc/album/bkgbtonxu |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
aftcast
站務副站長 ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
聽你那麼一說,覺得就是你放錯位置了。
建議你把那三行放在h檔的class上面,並把cpp檔上的那三行給去除即可! ===================引 用 bkgbtonxu 文 章=================== 這三列我有試過放進去,會跳出shobjidl.h檔,顯示出以下問題 E2338 Multiple declaration for 'FOLDERSETTINGS' E2338 Multiple declaration for 'DESKBANDINF0' ......等 類似這樣
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
bkgbtonxu
一般會員 ![]() ![]() 發表:10 回覆:14 積分:4 註冊:2007-12-17 發送簡訊給我 |
大家好!這個問題終於在晚上解決了= =""
結果是很冏,是一個很簡單的答案! 這次的問題為什麼在專題移植的過程中會有錯誤呢? 首先定義一下: 照網路資料做的出的專案為【專案A】 要被加入程式的為【專案B】 OK大致上這樣!那為什麼會錯呢? 因為我的專案B中Form有兩個分別為Form1跟Form2【將程式移植進來檔案】 上述加的head 檔都是放在Form2【unit2】 解決的方式,就是在Form【unit】也要加入有使用到的head。 要怎麼確定有使用到呢?據某位【程式coding愛好者】是說,他用猜的~ 因為有顯示出muxxxxx類似有重覆使用的意思,所以他就加上head檔 //--------------------------------------------------------------------------- #define NO_WIN32_LEAN_AND_MEAN #include 類似這樣~就成功了~事實上當然沒那麼簡單~詳細使用還是要查help/msdn才知道^^
------
http://www.wretch.cc/album/bkgbtonxu |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |