VC + + 두 프로그램 에서 문자열 등 상수 값 을 전달 하 는 방법: WM 사용COPYDATA 소식 의

2172 단어
메시지 역할:    프로 세 스 간 에 데 이 터 를 공유 합 니 다 (내부 에서 메모리 맵 파일 을 만 듭 니 다)
메시지 소개: 필요 한 데이터 구조 / 유형: typedef struct tagCOPYDATASTRUCT {    ULONG_PTR dwData;    DWORD cbData;    PVOID lpData;} COPYDATASTRUCT, *PCOPYDATASTRUCT;
구조 체 파라미터 설명:    dwData(ULONG)   표지 등 으로 사용 할 수 있 는 수 치 를 저장 합 니 다.    lpData(void*)   보 낼 데이터 의 시작 주소 (NULL 일 수 있 음)    cbData(DWORD)   보 낼 데이터 의 길이 메시지 의 인자:    hWnd:   데 이 터 를 받 는 창의 핸들    wParam: 이 데 이 터 를 전송 하 는 창 핸들 (NULL 도 상관 없습니다)    lParam: COPYDATASTRUCT 형식 변수의 주소 사용 예시:
    COPYDATASTRUCT cds;
    char msg[] = "    ";
    cds.dwData = 0;
    cds.lpData = msg;
    cds.cbData = strlen(msg)+1; //       '\0'  ,      ,    ANSI   
    SendMessage(FindWindow("nbsg_class", NULL), WM_COPYDATA, 0, (LPARAM)&cds);

메모: CString 형식의 문자열 을 보 내 려 면 이렇게 할 수 있 습 니 다.
CString str = _T("    ");
char* msg = str.GetBuffer(0);

이렇게 하면 char * 타 입 으로 바 뀔 수 있 습 니 다.
수신 단 이 이 소식 에 대한 처리 가능성:
BOOL CxuanzeDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
    // TODO:               /      
    COPYDATASTRUCT* pCDS = (COPYDATASTRUCT*)pCopyDataStruct;
    CString str((char*)pCDS->lpData);
    str.Format(_T("%s    :%d"), str, pCDS->dwData);
    AfxMessageBox(str);
    return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
}

설명: WM 사용COPYDATA 메시지 의 전달 데 이 터 는 전달 할 데 이 터 를 공유 메모리 에 복사 한 후 주 소 를 다른 프로 세 스에 전달 하 는 것 입 니 다.
이 메시지 에서 dwData 라 는 표지 가 있 습 니 다. 이 데 이 터 는 ULONG 입 니 다.PTR 형식 으로 기호 가 없 는 긴 정수 로 데이터 의 표지 로 사용 할 수 있 습 니 다. 이렇게 서로 다른 표지 로 전 달 된 데 이 터 를 서로 다른 용도 로 사용 할 수 있 습 니 다!

좋은 웹페이지 즐겨찾기