안녕하세요?
C++빌더 프로그램을 짜는데 델파이소스의 도움을 많이 받고 있습니다. ^^
화상이미지데이터를 스트림과 UDP를 이용해서 전달하려고 하는데요,
UDP의 SendStream부분에서 에러가 납니다.
컴파일에는 문제가 없고, Access violation에러가 나네여...
도움 부탁드릴께여~
LRESULT CALLBACK VideoCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
//스트림을 사용해서 비트맵을 전송하기위해 비트맵을 구성하는 부분..
BYTE * BmpBuff = (BYTE *) malloc( sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 320*240*3 );
TMemoryStream* myStream = new TMemoryStream();
Graphics::TBitmap* myBIT = new Graphics::TBitmap();
memcpy( BmpBuff, &Form1->DefaultBmpFileHeader, sizeof(BITMAPFILEHEADER) );
memcpy( ((BYTE *)BmpBuff + sizeof(BITMAPFILEHEADER)), &Form1->DefaultBmpInfo, sizeof(BITMAPINFOHEADER) );
memcpy( ((BYTE *)BmpBuff + sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER)), lpVHdr->lpData, 320*240*3 );
myStream->Position = 0;
myStream->Write(BmpBuff, sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 320*240*3);
myStream->Position = 0;
myBIT->LoadFromStream(myStream);
Form1->Image1->Picture->Assign(myBIT);
Form1->Canvas->Draw( 0, 0, Form1->Image1->Picture->Graphic)
Form1->NMUDP1->LocalPort = 7000;
Form1->NMUDP1->RemoteHost = "33.33.113.83";
Form1->NMUDP1->RemotePort = 6000;
Form1->NMUDP2->LocalPort = 6000;
// 이 부분에서 에러가 납니다. access violation error.....
Form1->NMUDP1->SendStream(myStream);
delete myStream;
delete myBIT;
free(BmpBuff);
return (LRESULT) TRUE;
}
UDP는 TCP와는 다르게 그 크기가 제한되어 있습니다.
정확한 사이즈는 네트워크의 성격과 관련되기 때문에 잘 모르겠지만
암튼 320x240x3 바이트도 넘는 것을 한번에 보낸 수는 없습니다.
잘라서 보내 보시기 바랍니다.
Applekiss wrote:
> 안녕하세요?
> C++빌더 프로그램을 짜는데 델파이소스의 도움을 많이 받고 있습니다. ^^
>
> 화상이미지데이터를 스트림과 UDP를 이용해서 전달하려고 하는데요,
> UDP의 SendStream부분에서 에러가 납니다.
> 컴파일에는 문제가 없고, Access violation에러가 나네여...
> 도움 부탁드릴께여~
>
> LRESULT CALLBACK VideoCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
> {
> //스트림을 사용해서 비트맵을 전송하기위해 비트맵을 구성하는 부분..
> BYTE * BmpBuff = (BYTE *) malloc( sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 320*240*3 );
> TMemoryStream* myStream = new TMemoryStream();
> Graphics::TBitmap* myBIT = new Graphics::TBitmap();
>
> memcpy( BmpBuff, &Form1->DefaultBmpFileHeader, sizeof(BITMAPFILEHEADER) );
> memcpy( ((BYTE *)BmpBuff + sizeof(BITMAPFILEHEADER)), &Form1->DefaultBmpInfo, sizeof(BITMAPINFOHEADER) );
> memcpy( ((BYTE *)BmpBuff + sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER)), lpVHdr->lpData, 320*240*3 );
>
> myStream->Position = 0;
> myStream->Write(BmpBuff, sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 320*240*3);
>
> myStream->Position = 0;
> myBIT->LoadFromStream(myStream);
> Form1->Image1->Picture->Assign(myBIT);
> Form1->Canvas->Draw( 0, 0, Form1->Image1->Picture->Graphic)
>
> Form1->NMUDP1->LocalPort = 7000;
> Form1->NMUDP1->RemoteHost = "33.33.113.83";
> Form1->NMUDP1->RemotePort = 6000;
> Form1->NMUDP2->LocalPort = 6000;
> // 이 부분에서 에러가 납니다. access violation error.....
> Form1->NMUDP1->SendStream(myStream);
>
> delete myStream;
> delete myBIT;
> free(BmpBuff);
>
> return (LRESULT) TRUE;
> }