全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3306
推到 Plurk!
推到 Facebook!

請問難道a.exe與b.exe傳遞參數只能char不能String嗎?

答題得分者是:RaynorPao
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-19 16:44:36 IP:59.125.xxx.xxx 未訂閱
請問各位大大參數只能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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-19 17:56:46 IP:210.208.xxx.xxx 訂閱
只要把程式再稍微改一下,就可以達到動態配置記憶體的效果了,例如:

[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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-08-19 23:10:18 IP:59.125.xxx.xxx 未訂閱
不好意思版主大大我有個問題那就是如果用下面的方法
要如何同時傳遞 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-08-20 10:38:16 IP:210.208.xxx.xxx 訂閱
在 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-08-20 12:06:27 IP:59.125.xxx.xxx 未訂閱
想問版主大大一個傻問題
那就如果有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, 註解 無‧
系統時間:2024-03-28 23:26:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!