|
안녕하십니까
입문 일년 반째 되는 "아직도"초보 빌더 유저입니다.
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에서 두개의 어플리케이션 끼리 함수를 공유해서 사용하는 법 아시는
고수분 있으시면 답변 부탁드립니다.
-글 너무 길게 써서 죄송합니다. -
|