請問難道a.exe與b.exe傳遞參數只能char不能String嗎? |
答題得分者是:RaynorPao
|
l90425
初階會員 ![]() ![]() 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
請問各位大大參數只能char不能String嗎
那樣還要將 String 轉為 char, 而且String的大小還是未知的 那麼如此就要將 char 位置配置的很大, 能用String格式來傳遞嗎? 謝謝!謝謝! [code cpp] a.exe typedef struct _MYSTRUCT { char TransmitQuery[500]; int iInt; } MyStruct; void __fastcall TFormB_2_1::Button8Click(TObject *Sender) { String Query; Query="難道a.exe與b.exe傳遞參數只能char不能String嗎"; HWND hWnd=FindWindow(NULL, "複合材料之結果"); if(hWnd) { COPYDATASTRUCT CopyData; MyStruct ms; lstrcpy(ms.TransmitQuery, strdup(Query.c_str())); if(ms.iInt==1) {ms.iInt=0;} else {ms.iInt=1;} CopyData.dwData=0; CopyData.cbData=sizeof(MyStruct); CopyData.lpData=&ms; SendMessage(hWnd, WM_COPYDATA, (WPARAM)Handle, (LPARAM)&CopyData); } } [/code] [code cpp] b.exe typedef struct _MYSTRUCT { char TransmitQuery; int iInt; } MyStruct; void __fastcall TForm1::WMCopyData(Messages::TMessage &Message) { COPYDATASTRUCT *CopyData=(COPYDATASTRUCT*)(Message.LParam); if(CopyData->cbData==sizeof(MyStruct)) { MyStruct ms; CopyMemory(&ms, CopyData->lpData, CopyData->cbData); if(ms.iInt==1) {Form1->Color=(TColor)0x00C6C600;} else {Form1->Color=(TColor)0x00C6C600;} ShowMessage(ms.TransmitQuery); ShowMessage(IntToStr(ms.iInt)); } } [/code] -謝謝大大的熱心回覆
------
-謝謝大大熱心的回覆!謝謝! 編輯記錄
l90425 重新編輯於 2008-08-20 14:46:23, 註解 無‧
|
RaynorPao
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
只要把程式再稍微改一下,就可以達到動態配置記憶體的效果了,例如:
[code cpp] // 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); } } [/code] [code cpp] // 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; } [/code]
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
l90425
初階會員 ![]() ![]() 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
不好意思版主大大我有個問題那就是如果用下面的方法
要如何同時傳遞 int、 String 格式 請大大在指導一下! 非常謝謝大大的回覆! ===================引 用 RaynorPao 文 章=================== 只要把程式再稍微改一下,就可以達到動態配置記憶體的效果了,例如: [code cpp] // 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); } } [/code] [code cpp] // 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; } [/code] -謝謝大大的熱心回覆!
------
-謝謝大大熱心的回覆!謝謝! |
RaynorPao
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
在 COPYDATASTRUCT 這個 structure 裡面,不是還有一個參數沒有用到「dwData」,可以先用這個參數來傳遞你需要的 int,例如:
[code cpp] // Send.exe void __fastcall TForm1::Button1Click(TObject *Sender) { HWND hWnd=FindWindow(NULL, "ReceiveForm"); if(hWnd) { AnsiString AStr="This is my char!"; int iInt=123; COPYDATASTRUCT CopyData; CopyData.dwData=(DWORD)iInt; CopyData.cbData=AStr.Length(); CopyData.lpData=AStr.c_str(); SendMessage(hWnd, WM_COPYDATA, (WPARAM)Handle, (LPARAM)&CopyData); } } [/code] [code cpp] // Receive.exe void __fastcall TForm1::WMCopyData(TMessage& Message) { COPYDATASTRUCT *CopyData=(COPYDATASTRUCT*)(Message.LParam); int iInt=(int)CopyData->dwData; char *szStr=new char[CopyData->cbData 1]; ZeroMemory(szStr, CopyData->cbData 1); CopyMemory(szStr, CopyData->lpData, CopyData->cbData); AnsiString AStr=(AnsiString)szStr; ShowMessage(AStr); ShowMessage(iInt); delete [] szStr; } [/code]
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
l90425
初階會員 ![]() ![]() 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
想問版主大大一個傻問題
那就如果有2個以上的參數要傳遞(ex:AnsiString AStr ,int a ,int b)是不是就沒辦法?謝謝!謝謝! 要如何才能使用兩個以上參數傳遞呢? 我已經想了很久還是想不到要如何能傳遞同時String 和多個 int 若用chat c[1000]實在很沒有效率 各位大大幫忙一下謝謝! 請問大大為什麼char *szStr;傳到b.exe值為""呢!我已經知道了 -謝謝版主大大的回覆 [code cpp] typedef struct _MYSTRUCT { char *szChar;// << 傳遞位址是沒有效果的 (因為這個位址在另一個 process 是沒有意義的) int iInt; int Int; } MyStruct; HWND hWnd=FindWindow(NULL, "b"); COPYDATASTRUCT CopyData; MyStruct ms; if(hWnd) { ms.szChar="123123"; ms.iInt=100; ms.Int=100; CopyData.dwData=0; CopyData.cbData=sizeof(MyStruct); CopyData.lpData=&ms; SendMessage(hWnd, WM_COPYDATA, (WPARAM)Handle, (LPARAM)&CopyData); } [/code] [code cpp] typedef struct _MYSTRUCT { char *szStr; int iInt; int Int; } MyStruct; COPYDATASTRUCT *CopyData=(COPYDATASTRUCT*)(Message.LParam); MyStruct ms; ZeroMemory(&ms, sizeof(MyStruct)); CopyMemory(&ms, CopyData->lpData, CopyData->cbData); AnsiString AStr=(AnsiString)ms.szStr; ShowMessage(AStr); ShowMessage(IntToStr(ms.iInt)); ShowMessage(IntToStr(ms.Int)); [/code] ===================引 用 RaynorPao 文 章=================== 在 COPYDATASTRUCT 這個 structure 裡面,不是還有一個參數沒有用到「dwData」,可以先用這個參數來傳遞你需要的 int,例如:
------
-謝謝大大熱心的回覆!謝謝!
編輯記錄
l90425 重新編輯於 2008-08-20 12:31:39, 註解 無‧
l90425 重新編輯於 2008-08-20 12:49:30, 註解 無‧ l90425 重新編輯於 2008-08-20 12:49:59, 註解 無‧ l90425 重新編輯於 2008-08-20 12:50:55, 註解 無‧ l90425 重新編輯於 2008-08-20 12:51:57, 註解 無‧ l90425 重新編輯於 2008-08-20 12:55:11, 註解 無‧ l90425 重新編輯於 2008-08-20 14:59:05, 註解 無‧ l90425 重新編輯於 2008-08-20 15:03:55, 註解 無‧ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |