線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2163
推到 Plurk!
推到 Facebook!

選擇目錄&新增目錄【Q:程式移植】

答題得分者是:aftcast
bkgbtonxu
一般會員


發表:10
回覆:14
積分:4
註冊:2007-12-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-25 09:22:28 IP:140.125.xxx.xxx 訂閱
各位大大好,小弟有程式移植的問題想請教,首先附上參考網扯如下:

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 (BrowseCallbackProc);
bi.lpfn = NULL;
bi.lParam = reinterpret_cast (StartDir.c_str());
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 (lpData);
if(DirectoryExists(prevDir))
{
SendMessage(hwnd, BFFM_SETSELECTION, static_cast (1L), lpData);
}
}
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
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-09-25 14:12:16 IP:59.115.xxx.xxx 訂閱
快速的看了一下你的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
編輯記錄
aftcast 重新編輯於 2008-09-25 14:15:35, 註解 無‧
aftcast 重新編輯於 2008-09-25 14:16:21, 註解 無‧
bkgbtonxu
一般會員


發表:10
回覆:14
積分:4
註冊:2007-12-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-09-25 15:18:47 IP:140.125.xxx.xxx 訂閱


[code cpp]
請在此區域輸入程式碼

  1. #include
  2. #define NO_WIN32_LEAN_AND_MEAN
  3. #define BIF_NEWDIALOGSTYLE 0x0040


[/code]

這三列我有試過放進去,會跳出shobjidl.h檔,顯示出以下問題
E2338 Multiple declaration for 'FOLDERSETTINGS'
E2338 Multiple declaration for 'DESKBANDINF0'
......等
類似這樣

但強調的是說,在新建一個.bpr去式的時侯~已經compliers成功ok~也顯示的出來
但依樣畫壺盧將程式放過去~位置也一樣,但就是出現錯誤= =""照以前經弄程式的經驗~應該是會成功
想不出到底是怎麼回事= ="這是我冏的地方,明明弄建的bpr是ok的= ="
------
http://www.wretch.cc/album/bkgbtonxu
編輯記錄
bkgbtonxu 重新編輯於 2008-09-25 15:49:06, 註解 無‧
bkgbtonxu 重新編輯於 2008-09-25 15:52:33, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-09-25 15:41:28 IP:118.169.xxx.xxx 訂閱
你可以把專案打包上傳,讓前輩們幫您看看問題在哪
P.S: 發問時請選字,錯別字有點多 ^_^

aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-09-25 18:52:40 IP:60.248.xxx.xxx 訂閱
聽你那麼一說,覺得就是你放錯位置了。

建議你把那三行放在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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-09-26 09:42:52 IP:140.125.xxx.xxx 訂閱
大家好!這個問題終於在晚上解決了= =""
結果是很冏,是一個很簡單的答案!

這次的問題為什麼在專題移植的過程中會有錯誤呢?

首先定義一下:

照網路資料做的出的專案為【專案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
系統時間:2017-10-24 19:30:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!