c#向VC的窗口发消息,怎么传递string c#向VC的窗口发消息,怎么传递string 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通过 SendMessage(hwnd, CmdId, wParam, lParam)发送 确实,比较麻烦。因为string一般需要包装成地址传递,但是不同进程的地址是无法直接使用的。必须依靠其它进程间通讯的手段来传递。当然有一个变通的办法,就是在某一方程序中使用一个文本框(隐藏的)来传值,使用wm_gettext。 SendMessagePostMessagec#不熟悉,可以把这块用c/c++做成dll,c#调用。 msdn search wm_copydata 消息 // ************ Globals ************//#define MYDISPLAY 1typedef struct tagMYREC{ char s1[80]; char s2[80]; DWORD n;} MYREC;COPYDATASTRUCT MyCDS;MYREC MyRec;HRESULT hResult;BOOL CALLBACK InfoDlgProc( HWND, UINT, WPARAM, LPARAM );// ************ Code fragment ****************// Get data from user. InfoDlgProc stores the information in MyRec.// DialogBox( ghInstance, "InfoDlg", hWnd, (DLGPROC) InfoDlgProc );//// Copy data into structure to be passed via WM_COPYDATA.// Also, we assume that truncation of the data is acceptable.// hResult = StringCbCopy( MyRec.s1, sizeof(MyRec.s1), szFirstName ); if (hResult != S_OK) return False; hResult = StringCbCopy( MyRec.s2, sizeof(MyRec.s2), szLastName ); if (hResult != S_OK) return False; MyRec.n = nAge;//// Fill the COPYDATA structure// MyCDS.dwData = MYPRINT; // function identifier MyCDS.cbData = sizeof( MyRec ); // size of data MyCDS.lpData = &MyRec; // data structure//// Call function, passing data in &MyCDS// hwDispatch = FindWindow( "Disp32Class", "Hidden Window" ); if( hwDispatch != NULL ) SendMessage( hwDispatch, WM_COPYDATA, (WPARAM)(HWND) hWnd, (LPARAM) (LPVOID) &MyCDS ); else MessageBox( hWnd, "Can't send WM_COPYDATA", "MyApp", MB_OK );发送方// ************ Globals ************//#define MYDISPLAY 1typedef struct tagMYREC{ char s1[80]; char s2[80]; DWORD n;} MYREC;PCOPYDATASTRUCT pMyCDS;void WINAPI MyDisplay( LPSTR, LPSTR, DWORD );//// ************ Code fragment ****************//case WM_COPYDATA: pMyCDS = (PCOPYDATASTRUCT) lParam; switch( pMyCDS->dwData ) { case MYDISPLAY: MyDisplay( (LPSTR) ((MYREC *)(pMyCDS->lpData))->s1, (LPSTR) ((MYREC *)(pMyCDS->lpData))->s2, (DWORD) ((MYREC *)(pMyCDS->lpData))->n ); } break;接受方的 如果你理解上边的程序,string 就简单了用marshal.stringtoptrauto or stringtoptransi 关于用DataView的RowFilter属性来筛选可以为空的字段。 winform形式的水晶报表为什么运行一段时间就报load report failed的错误,怎么解决啊? 如何控制SHOW出来的窗体只有一个,不是SHOW 模式窗体 求助!无限极分类显示全路径遇到问题,折腾一周了。 [求助]C#高手请进!!!!!! datagrid我使用了分页,通过按钮事件将最后一页的所有数据都删除的时候,那一页就不存在了,于是报错: 怎样遍历所有菜单的Item? 手写识别,合作 关于FTP上传Uxix问题 文件上传问题?? oracle oci编程封装c# C# ASP.NET编程
发送
必须依靠其它进程间通讯的手段来传递。当然有一个变通的办法,就是在某一方程序中使用一个文本框(隐藏的)来传值,使用wm_gettext。
PostMessagec#不熟悉,可以把这块用c/c++做成dll,c#调用。
//
#define MYDISPLAY 1
typedef struct tagMYREC
{
char s1[80];
char s2[80];
DWORD n;
} MYREC;
COPYDATASTRUCT MyCDS;
MYREC MyRec;
HRESULT hResult;
BOOL CALLBACK InfoDlgProc( HWND, UINT, WPARAM, LPARAM );
// ************ Code fragment ****************
// Get data from user. InfoDlgProc stores the information in MyRec.
//
DialogBox( ghInstance, "InfoDlg", hWnd, (DLGPROC) InfoDlgProc );
//
// Copy data into structure to be passed via WM_COPYDATA.
// Also, we assume that truncation of the data is acceptable.
//
hResult = StringCbCopy( MyRec.s1, sizeof(MyRec.s1), szFirstName );
if (hResult != S_OK)
return False;
hResult = StringCbCopy( MyRec.s2, sizeof(MyRec.s2), szLastName );
if (hResult != S_OK)
return False;
MyRec.n = nAge;
//
// Fill the COPYDATA structure
//
MyCDS.dwData = MYPRINT; // function identifier
MyCDS.cbData = sizeof( MyRec ); // size of data
MyCDS.lpData = &MyRec; // data structure
//
// Call function, passing data in &MyCDS
//
hwDispatch = FindWindow( "Disp32Class", "Hidden Window" );
if( hwDispatch != NULL )
SendMessage( hwDispatch,
WM_COPYDATA,
(WPARAM)(HWND) hWnd,
(LPARAM) (LPVOID) &MyCDS );
else
MessageBox( hWnd, "Can't send WM_COPYDATA", "MyApp", MB_OK );
发送方
// ************ Globals ************
//
#define MYDISPLAY 1
typedef struct tagMYREC
{
char s1[80];
char s2[80];
DWORD n;
} MYREC;
PCOPYDATASTRUCT pMyCDS;
void WINAPI MyDisplay( LPSTR, LPSTR, DWORD );
//
// ************ Code fragment ****************
//
case WM_COPYDATA:
pMyCDS = (PCOPYDATASTRUCT) lParam;
switch( pMyCDS->dwData )
{
case MYDISPLAY:
MyDisplay( (LPSTR) ((MYREC *)(pMyCDS->lpData))->s1,
(LPSTR) ((MYREC *)(pMyCDS->lpData))->s2,
(DWORD) ((MYREC *)(pMyCDS->lpData))->n );
}
break;
接受方的
用marshal.stringtoptrauto or stringtoptransi