|
답변감사합니다.
우선 말씀하신데로 변경해서 컴파일 하였는데
[BCC32 Error] Unit1.cpp(7621): E2094 'operator==' not implemented in type 'Sysutils::TByteArray' for arguments of type 'int'
Full parser context
Unit1.cpp(7610): parsing: int _fastcall TIEJpegAcquireStream::Write(const void *,int)
이렇게 에러가 발생하였습니다.
제가 아직 초보라서 말씀하신것 처럼 프로젝트에 포함하여 사용할 수 있다고 하셨는데 그럼 어떻게 해야되는지 방법좀 알려주실수 있으신지요?
박지훈.임프 님이 쓰신 글 :
: 말씀하신 라인만 보자면,
: if (buf[i] == "0xFF" && buf[i+1] == "0xD9")
:
: 문자열로 지정해버렸으니 당연히 계산이 안됩니다.
:
: if (buf[i] == 0xFF && buf[i+1] == 0xD9)
: 이렇게 해야 할 거 같구요.
:
: 그런데, 델파이 코드를 왜 C++ 코드로 바꾸고 계신지요.
: 델파이 코드는 99.00% C++빌더에서 그대로 프로젝트에 포함시켜서 컴파일해서 불러 쓸 수 있습니다만.
: 혹시 꼭 C++로 된 코드로만 만드셔야 할 이유라도 있으신지?
:
:
:
: 책방전설 님이 쓰신 글 :
: : 델파이 소스를 C빌더로 변환해서 쓰려고 하는데 좀 막혀버리네요
: :
: : 델파이 소스와 변환 소스롤 올려드리니 에러나는 부분좀 해결해 주세요.
: :
: : *델파이소스
: : function TIEJpegAcquireStream.Write(const Buffer; Count: Longint): Longint;
: : var
: : buf:pbytearray;
: : i:integer;
: : begin
: : result:=Count;
: : buf:=pbytearray(@Buffer);
: : case fStart of
: : false:
: : // look for begin of jpeg (FFD8)
: : for i:=0 to Count-2 do
: : if (buf[i]=$FF) and (buf[i+1]=$D8) then
: : begin
: : fData.Write( buf[i], Count-i);
: : fStart:=true;
: : exit;
: : end;
: : true:
: : begin
: : // look for end of jpeg (FFD9)
: : for i:=0 to Count-2 do
: : if (buf[i]=$FF) and (buf[i+1]=$D9) then
: : begin
: : fData.Write( buf[0], i);
: : fStart:=false;
: :
: : // acquire bitmap
: : fData.Position:=0;
: : Form1.ImageEnView1.IO.LoadFromStreamJpeg(fData);
: : Application.ProcessMessages;
: : fData.Clear;
: :
: : exit;
: : end;
: : // not found, write all
: : fData.Write( buf[0], Count );
: : end;
: : end;
: : end;
: :
: : *변환소스
: : int __fastcall TIEJpegAcquireStream::Write(const void *Buffer, int Count)
: : {
: : PByteArray buf;
: : int i;
: :
: : //long nCount = Count;
: : buf = PByteArray(Buffer);
: :
: : switch (fStart) {
: : // look for begin of jpeg (FFD8)
: : case false:
: : for (i = 0; i < Count-2; i++) {
: : if (buf[i] == "0xFF" && buf[i+1] == "0xD8") { <--- 이부분과
: : fData->Write(buf[i], Count-i);
: : fStart = true;
: : break;
: : }
: : }
: :
: : // look for end of jpeg (FFD9)
: : case true:
: : for (i = 0; i < Count-2; i++) {
: : if (buf[i] == "0xFF" && buf[i+1] == "0xD9") { <--- 이부분에서 제대로 IF문을 수행하지 못하네요 ㅠㅠ
: : fData->Write(buf[0], i);
: : fStart = false;
: :
: : // acquire bitmap
: : fData->Position = 0;
: : Form1->ImageEnView1->IO->LoadFromStreamJpeg(fData);
: : Application->ProcessMessages();
: : fData->Clear();
: :
: : break;
: : }
: :
: : // not found, write all
: : fData->Write(buf[0], Count);
: : }
: : }
: :
: : return Count;
: : }
|