2011-12-22 2 views
0

내 응용 프로그램 (win32)에 문제가 있습니다. 나는 클라이언트와 서버를 가지고있다. 클라이언트 응용 프로그램은 기본 응용 프로그램에서 작동하는 플러그인이 아닙니다. 서버 응용 프로그램은 외부 응용 프로그램이며 소스 코드를 닫고 클라이언트에서 콜백 함수를 사용할 수 있습니다. 클라이언트 (플러그인)는 "Link"(함수가있는 구조체에 대한 포인터)를 통해 MainApplication과 통신하며 메시지, 날짜 및 이름이있는 구조체와 같이 지정된 채워진 구조체에 대한 포인터를 보낼 수 있습니다. 플러그인의 소스 코드를 수정할 수 있습니다. 이제 문제는 서버가 함수를 호출하는 것입니다 (예 : 메시지 수신). "메시지 구조"를 작성하고 채우고 Link를 사용하여 해당 구조 MainApplication에 대한 포인터를 보내면 해당 메모리 블록을 읽을 수 없기 때문에 충돌이 발생합니다.메모리 액세스 문제

서버 호출 함수 -> 작성 및 채우기 구조 -> 링크 -> MainApplication을 통해 MainApplication에 대한 구조체의 포인터 보내기가 메모리 주소 및 BAM 충돌을 읽으려고합니다.

내가 수동으로 할게, 플러그인에서 작동합니다.

어떻게 구조체를 기본 응용 프로그램으로 보내야합니까? MainApplication은 구조체에 대한 주소 만받을 수 있습니다. 어쩌면 약간 엉망이되지만 문제를 이해해야합니다.

+0

'클라이언트'는 플러그인입니다. '서버'와 같은 프로세스에서 실행되고 있습니까? 또한 클라이언트가 채우는 구조와 클라이언트가 메시지 및/또는 결과를 서버로 보내는 방법과 같이 적어도 * 일부 코드를 게시해야합니다. –

+0

명시 적으로 공유 메모리 영역을 사용하지 않는 한 별도의 프로세스에는 별도의 메모리 주소 공간이 있습니다. 너? –

+0

MainApplication과 Server는 두 개의 분리 된 응용 프로그램입니다. 클라이언트는 MainApplication과 동일한 프로세스에서 실행되는 플러그인입니다. 구조의 구조는 필요 없습니다. Shared Memory를 사용하면 MainApplication이 읽을 수 있거나 클라이언트 (플러그인) 만 읽을 수 있습니까? – user1112008

답변

1

MainApplication에 해당 구조의 포인터를 보내는 서버 호출 함수가 해당 서버 함수에 대한 로컬 포인터 일 수 있습니다. 해당 포인터에 동적으로 메모리 공간을 할당 할 수 있습니다. 할당 된 메모리 공간은 주 응용 프로그램에 전달됩니다. 이 코드는 아직 힙에서 메모리를 해제하지 않았으므로 포인터를 사용하여 기본 응용 프로그램을 완료 한 후에 힙에서 해제 할 수 있습니다.