여기부터가 Cpp의 소스입니다.
long size;
long frame_rate;
long width;
long height;
long type;
char szCamName[24];
BSTR bstrCamName;
BYTE* data;
IFrameHeaderPtr pIFramePtr;
pIFramePtr = (IFrameHeaderPtr)pFrame;
bstrCamName = pIFramePtr->CamName;
ZeroMemory( szCamName, 24 );
WideCharToMultiByte( CP_ACP, 0, bstrCamName, -1, szCamName, 24, NULL, NULL);
if ( m_pRecFile != NULL )
{
size = pIFramePtr->DataSize;
data = (BYTE*)pIFramePtr->Data;
frame_rate = pIFramePtr->FrameRate;
width = pIFramePtr->Width;
height = pIFramePtr->Height;
type = pIFramePtr->FrameType;
m_pRecFile->Write(&frame_rate,4);
m_pRecFile->Write(&width,4);
m_pRecFile->Write(&height,4);
m_pRecFile->Write(&size,4);
m_pRecFile->Write(&type,4);
m_pRecFile->WriteHuge(data, size);
}
여기가 델파이의 소스입니다.
var
size1 : LongInt;
frame_rate1 : LongInt;
width1 : LongInt;
height1 : LongInt;
type1 : LongInt;
szCamName : array[1..24] of Char;
bstrCamName : WideString;
data1 : PByte;
pIFramePtr : IFrameHeader;
begin
pIFramePtr := pFrame;
bstrCamName := pIFramePtr.CamName;
ZeroMemory( @szCamName , SizeOf(szCamName));
WideCharToMultiByte(CP_ACP, 0, @bstrCamName, -1, @szCamName , SizeOf(szCamName), nil, nil);
if pIFramePtr.FrameType <> RGB24DATA then
begin
if m_RecFile <> nil then
begin
size1 := pIFramePtr.DataSize;
data1 := PByte(PChar(pIFramePtr.Data));
frame_rate1 := pIFramePtr.FrameRate;
width1 := pIFramePtr.Width;
height1 := pIFramePtr.Height;
type1 := pIFramePtr.FrameType;
m_RecFile.Write((@(frame_rate1))^,4);
m_RecFile.write((@(width1))^,4);
m_RecFile.write((@(height1))^,4);
m_RecFile.write((@(size1))^,4);
m_RecFile.write((@(type1))^,4);
m_RecFile.Write(data1, size1);
end;
end;
pIFramePtr := nil;
end;
저중에서.. 파란글씨 부분이 실질적으로 데이터를 파일에 써주는 부분인데요...
두개의 형이 일치해서 들어가야 할거 같은데...
그 위쪽의 파란색 글씨 부분인 Byte * 부분... 어떻게 해결해야 할런지 모르겟습니다. 형변환이 안되요..ㅠㅠ
델파이로 컨버팅한 부분은 제대로된 데이터가 나오지를 않습니다...
특히나 (BYTE *) 부분의 델파이 형변환과... C에서의 WriteHuge를 델파이에서는 어떻게 써야 할런지가 젤 고민입니다.
도움 부탁드리겠습니다.
m_RecFile.Write((@(frame_rate1))^,4);
==>
m_RecFile.Write(frame_rate1, SizeOf(frame_rate1));
포인터를 쓰시면 안되구 포인터가 가리키는 값을 쓰셔야죠.
m_RecFile.Write(data1, size1);
==>
m_RecFile.Write(data1^, size1);
WriteHuge는 그냥 파일입출력에서 파일출력함수/메소드(e.g. Write)를 쓰시면 됩니다.