当前位置:编程学习 > C#/ASP.NET >>

c#向VC的窗口发消息,怎么传递string

c#向VC的窗口发消息,怎么传递string  --------------------编程问答-------------------- 通过  SendMessage(hwnd, CmdId, wParam, lParam)
发送 --------------------编程问答-------------------- 对于地址传递,直接不行,需要映射到本进程空间,所以你还是用内存映射,将内容存到指定内存地址,燃后发消息让其他进程去读 --------------------编程问答-------------------- C#不熟悉,能够给个例子 --------------------编程问答-------------------- SendMessage就可以 --------------------编程问答--------------------
引用 2 楼 bdmh 的回复:
对于地址传递,直接不行,需要映射到本进程空间,所以你还是用内存映射,将内容存到指定内存地址,燃后发消息让其他进程去读

确实,比较麻烦。因为string一般需要包装成地址传递,但是不同进程的地址是无法直接使用的。
必须依靠其它进程间通讯的手段来传递。当然有一个变通的办法,就是在某一方程序中使用一个文本框(隐藏的)来传值,使用wm_gettext。 --------------------编程问答-------------------- SendMessage
PostMessage

c#不熟悉,可以把这块用c/c++做成dll,c#调用。 --------------------编程问答-------------------- msdn search wm_copydata 消息 --------------------编程问答-------------------- // ************ Globals ************
//
#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;
接受方的
--------------------编程问答-------------------- 如果你理解上边的程序,string 就简单了
用marshal.stringtoptrauto or stringtoptransi
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,