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

執行檔傳回值給呼叫的執行檔的問題~~

答題得分者是:taishyang
hank73317
一般會員


發表:20
回覆:47
積分:13
註冊:2008-12-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-12 20:51:32 IP:118.169.xxx.xxx 訂閱
請問各位大大~~~~如果我要~~~~

用一個執行檔~~~~~開啟另一個執行檔時~~~~~

例如~~~~AAA.exe開啟~~~~~BBB.exe~~~~~~~

我知道可以使用WinExec("C:\\BBB.exe",NULL)~~~~~

有沒有可能~~~~可以讓BBB.exe傳回一個值回給AAA.exe~~~~

請問有BCB的函式或什麼方法呢

請各位大大給我解答~~~~
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-13 11:32:46 IP:122.116.xxx.xxx 未訂閱
您好,

這問題應該用 message 的方式可以得到答案,
本站中有許多 程式間傳值 的問題曾被討論過, 您可以搜尋參考.

如果不要用那方法, 我是曾經在 delphi 把 clipboard 元件當成 執行檔之間的傳訊工具.目前還現役中.
也請參考一下

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
hank73317
一般會員


發表:20
回覆:47
積分:13
註冊:2008-12-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-14 01:47:59 IP:118.169.xxx.xxx 訂閱
大大`````我是bcb的初學者````````我去看了一下關於傳值的東西

有些地方看不懂````希望大大可以幫我解釋一下```````

//===========================================================================
// Send.exe
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hWnd=FindWindow(NULL, "ReceiveForm");
if(hWnd)
{
AnsiString AStr="This is my char!";
COPYDATASTRUCT CopyData;
CopyData.dwData=0;
CopyData.cbData=AStr.Length();
CopyData.lpData=AStr.c_str();
SendMessage(hWnd, WM_COPYDATA, (WPARAM)Handle, (LPARAM)&CopyData);
}
}
//==========================================================================================
//===========================================================================================

// Receive.exe
void __fastcall TForm1::WMCopyData(TMessage& Message)
{
COPYDATASTRUCT *CopyData=(COPYDATASTRUCT*)(Message.LParam);
char *szStr=new char[CopyData->cbData 1];
ZeroMemory(szStr, CopyData->cbData 1);
CopyMemory(szStr, CopyData->lpData, CopyData->cbData);
AnsiString AStr=(AnsiString)szStr;
ShowMessage(AStr);
delete [] szStr;
}

//================================================================================================

HWND hWnd=FindWindow(NULL, "ReceiveForm");`````這段的意思``````HWND是什麼`````

COPYDATASTRUCT是用來定義什麼```````````````````
hank73317
一般會員


發表:20
回覆:47
積分:13
註冊:2008-12-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-12-14 01:49:05 IP:118.169.xxx.xxx 訂閱
CopyData.dwData=0;   
CopyData.cbData;```````````````````````這3個是什麼````````````````
CopyData.lpData;

SendMessage(hWnd, WM_COPYDATA, (WPARAM)Handle, (LPARAM)&CopyData); ```````這段的意思```````````````

還有阿````在// Receive.exe中````````````````````
void __fastcall TForm1::WMCopyData(TMessage& Message) ````的WMCopyData是元件嗎````可是我找不到這個元件耶```````````
編譯時````````他就顯示Form1中沒有WMCopyData````````````````


麻煩大大給我解答```````感恩`````
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-12-15 10:51:46 IP:118.169.xxx.xxx 訂閱
雖然發問者態度很好,有心想學
但蠻想建議發問者先去看個書的,太多基本的觀念都不清楚

P.S:不知道是不是濫用符號的關係,問題看起來都很吃力:P
hank73317
一般會員


發表:20
回覆:47
積分:13
註冊:2008-12-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-12-15 11:16:18 IP:122.146.xxx.xxx 訂閱
 嗯嗯~~~~我已經有買書來看了~~~~~~~~~~~~~~不過外面的書也都是交一些非常基本的用法~~~~~~~~~~~

像是一些BCB基本元件的用法~~~~~~~~~~~~~~~~~~~~~

不知道這位大大可以推薦依些好學的書給我~~~~~~~~~~~讓我可以比較上手一點呢~~~~~~~~~~~~

還有可以幫我解答~~~~~~~~~~~~~~~~WMCOPYDATA~~~~~這是什麼呢~~~~~~~謝謝大大~~~~
編輯記錄
hank73317 重新編輯於 2008-12-15 11:16:50, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-12-15 11:30:08 IP:118.169.xxx.xxx 訂閱
你需要的是一本C/C 的書
舉例來說
Q.void __fastcall TForm1::WMCopyData(TMessage& Message)的WMCopyData是元件嗎?
可是我找不到這個元件耶,編譯時,他就顯示Form1中沒有WMCopyData


A.
WMCopyData他是一個function的名稱,且它是屬於TForm1的member function
怎麼宣告這個function為TForm1這個class的member function,書上都會有說

P.S:濫用符號,問題看起來很吃力!! ,還是您不知道標點符號怎麼用^^?


===================引 用 hank73317 文 章===================
嗯嗯~~~~我已經有買書來看了~~~~~~~~~~~~~~不過外面的書也都是交一些非常基本的用法~~~~~~~~~~~

像是一些BCB基本元件的用法~~~~~~~~~~~~~~~~~~~~~

不知道這位大大可以推薦依些好學的書給我~~~~~~~~~~~讓我可以比較上手一點呢~~~~~~~~~~~~

還有可以幫我解答~~~~~~~~~~~~~~~~WMCOPYDATA~~~~~這是什麼呢~~~~~~~謝謝大大~~~~
hank73317
一般會員


發表:20
回覆:47
積分:13
註冊:2008-12-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-12-15 14:01:11 IP:122.146.xxx.xxx 訂閱
這位大大,真的很感謝您給我的建議,我一定會好好努力學習,也抱歉讓您看的那麼累.


請您好人做到底,在幫我解答一下,我去看了一些前輩寫的程式,了解了WMcopydata的設定與用法


不過我在照做的時候,兩個EXE不能互傳,在編譯時都沒有發生錯誤.


把這兩個程式編譯成EXE後,還是不能傳值,可以幫我找出還有哪裡沒寫道嗎?


再次感謝這位大大的幫忙.



第一個執行檔的程式:

//==================================================================================================================================================
// Send.exe ===============================================================================================
// Unit1.cpp(在Unit1.cpp中)=============================================================================
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

HWND hWnd=FindWindow(NULL, "ReceiveForm");
if(hWnd)
{
AnsiString AStr="This is my char!";
COPYDATASTRUCT CopyData;
CopyData.dwData=0;
CopyData.cbData=AStr.Length();
CopyData.lpData=AStr.c_str();
SendMessage(hWnd, WM_COPYDATA, (WPARAM)Handle, (LPARAM)&CopyData);
}

}

//===============================================================================================================================================




這是第2個執行檔的程式:


// Receive.exe
//Unit1.h(在Unit1.h中)================================================================
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp><br /> #include

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
void __fastcall WMCopyData(TMessage& Message);
public: // User declarations
__fastcall TForm1(TComponent* Owner);

BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_COPYDATA, TMessage, WMCopyData)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


//Unit1.cpp(在Unit1.cpp中)================================================================================================

//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}


void __fastcall TForm1::WMCopyData(TMessage& Message)
{
COPYDATASTRUCT *CopyData=(COPYDATASTRUCT*)(Message.LParam);
char *szStr=new char[CopyData->cbData 1];
ZeroMemory(szStr, CopyData->cbData 1);
CopyMemory(szStr, CopyData->lpData, CopyData->cbData);
AnsiString AStr=(AnsiString)szStr;
ShowMessage(AStr);
delete [] szStr;

}
//---------------------------------------------------------------------------



感謝在感謝這位大大給我的指教,謝謝.

taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-12-15 14:06:31 IP:118.169.xxx.xxx 訂閱
把你的專案打包上傳吧,這樣找比較快 ^_^
hank73317
一般會員


發表:20
回覆:47
積分:13
註冊:2008-12-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-12-15 15:06:42 IP:122.146.xxx.xxx 訂閱
不好意思,問一個很笨的問題,請問要如何打包上傳呢?


沒有看到可以上傳檔案的圖示耶謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-12-15 15:19:19 IP:118.169.xxx.xxx 訂閱
會員求助程式檔案上傳區
http://delphi.ktop.com.tw/board.php?cid=31&fid=97
上傳完畢後PO上連結
編輯記錄
taishyang 重新編輯於 2008-12-15 15:20:40, 註解 無‧
hank73317
一般會員


發表:20
回覆:47
積分:13
註冊:2008-12-12

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-12-15 15:25:02 IP:122.146.xxx.xxx 訂閱
http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=96497


副站長大大,這是我壓縮好的專案,把它分開寫在兩個資料夾中,在勞請大大幫我看一下,謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#13 引用回覆 回覆 發表時間:2008-12-15 15:42:22 IP:118.169.xxx.xxx 訂閱
將接收端form的caption改成Project2即可
hank73317
一般會員


發表:20
回覆:47
積分:13
註冊:2008-12-12

發送簡訊給我
#14 引用回覆 回覆 發表時間:2008-12-15 15:49:44 IP:122.146.xxx.xxx 訂閱
這位副站長大大,你解決了我頭痛好久的問題,我真不知道要如何感謝您


真是太謝謝了,我一定好好學習,以後也可以像您一樣這麼強,來幫助像我一樣需要幫助的人.


真的非常感謝
hank73317
一般會員


發表:20
回覆:47
積分:13
註冊:2008-12-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2008-12-15 16:24:01 IP:122.146.xxx.xxx 訂閱
再向您請教一下,像我有買了些C/C++和BCB的書籍阿.


其實都沒有提到像COPYDATASTRUCT和ZeroMemory...等,這些函數的應用.


請問這些是屬於C/C 進階才會提到嗎?

還是要找API涵式庫的書籍呢?

謝謝大大.
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#16 引用回覆 回覆 發表時間:2008-12-15 16:28:37 IP:118.169.xxx.xxx 訂閱
你問的這些是屬於WIN32 API的範圍,BCB的Help裡Windows SDK中可以查詢
當然也是有書專門來介紹


===================引 用 hank73317 文 章===================
再向您請教一下,像我有買了些C/C 和BCB的書籍阿.


其實都沒有提到像COPYDATASTRUCT和ZeroMemory...等,這些函數的應用.


請問這些是屬於C/C 進階才會提到嗎?

還是要找API涵式庫的書籍呢?

謝謝大大.
hank73317
一般會員


發表:20
回覆:47
積分:13
註冊:2008-12-12

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