|
메모리 공유가 어렵다면 걍 tcp/ip 로컬 어드레스로 서로 통신하세요.
이것도 힘드시려나...
아니면 SendMessage로 wm_copy로 버퍼를 통째로 보내도 되겠네요.
장현건 님이 쓰신 글 :
: 안녕하십니까
:
: 입문 일년 반째 되는 "아직도"초보 빌더 유저입니다.
:
: 1번 프로그램에서 이미지를 찾고 2번 프로그램에서 그 이미지를 처리한 후 처리한 이미지를 1번 프로그램에 디스플레
: 이 해주는 프로그램을 작성하고 있는데요.
:
: 처음엔 1번 프로그램에서 찾은 이미지를 저장 후-> 저장된 이미지 파일을 2번 프로그램에서 수정후 저장
: ->다시 1번 프로그램에서 수정된 이미지파일을 Load하는 방법을 생각 했습니다.
:
: 하지만 속도도 좀 느리고, 나중에 문제가 발생할거 같은 생각이 들어서, 다른 방법으로
:
: 볼랜드 포럼에 나온 DLL을 이용한 메모리 공유를 시도하다가, 너무 어려워서 그만..;;
:
: 마지막 방법으로 API 메모리 공유가 생각나서 "API정복"에서 보고
:
: 전역으로 함수를 선언하고(호출방법이 콜백이라는 방식을 사용하더군요), 다음과 같은 코드를 작성 하였습니다.
:
: LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
: {
: HDC hdc;
: PAINTSTRUCT ps;
: HWND hTarget;
: char Mes[] = "메모리 맵 파일을 사용하여 두 프로세스가 메모리를 공유하는 예제";
:
: switch(iMessage){
: case WM_CREATE:
: hEdit = Form_app1->Memo1->Handle;
: //CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |
: //WS_VSCROLL | ES_MULTILINE,10,10,500,200,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
: SendMessage(hEdit,EM_LIMITTEXT,MAXSHAREMEMORY,0);
: hFMap=CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
: 0,MAXSHAREMEMORY, "MEMSHAREMAPPING");
: PtrInFile=(char*)MapViewOfFile(hFMap, FILE_MAP_ALL_ACCESS, 0, 0, MAXSHAREMEMORY);
: return 0;
: case WM_COMMAND:
: switch(LOWORD(wParam)){
: case ID_EDIT:
: switch(LOWORD(wParam)){
: case EN_CHANGE:
: GetWindowText(hEdit,PtrInFile,MAXSHAREMEMORY);
: hTarget=FindWindow(NULL, "MemShare1");
: if(hTarget)
: SendMessage(hTarget,WM_USER+1,0,0);
: break;
: }
: }
: return 0;
: case WM_USER+1:
: SetWindowText(hEdit,PtrInFile);
: return 0;
: case WM_PAINT:
: hdc=BeginPaint(hWnd, &ps);
: TextOut(hdc,10,220,Mes,strlen(Mes));
: EndPaint(hWnd, &ps);
: return 0;
: case WM_DESTROY:
: UnmapViewOfFile(PtrInFile);
: CloseHandle(hFMap);
: PostQuitMessage(0);
: return 0;
: }
: return(DefWindowProc(hWnd,iMessage,wParam,lParam));
: }
: 함수에 접근이 안되어서
: WM_CREATE가 함수보다 생성이 더 빨리되서 그런가 하고 WM_CHAR로 변경하고 글씨를 써 봤으나,
: 하지만 디버깅 결과 함수를 읽지 조차 않았습니다. ㅠ
:
: 혹시 위에 wndproc() 함수를 호출하는 방법이나,
:
: 한개의 PC에서 두개의 어플리케이션 끼리 함수를 공유해서 사용하는 법 아시는
:
: 고수분 있으시면 답변 부탁드립니다.
:
: -글 너무 길게 써서 죄송합니다. -
|