C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[68630] 델파이 코드를 C++빌더에서 불러쓰기
박지훈.임프 [cbuilder] 2558 읽음    2012-11-20 20:35
코드를 델파이에서 C++ 컨버팅하는 것은 충분히 가능하지만, 책방전설님께 필요한 건 그보단 델파이 코드를 C++빌더에서 그대로 쓰는 쪽일 것 같습니다. 저도 일부 불가피할 경우엔 코드 포팅을 합니다만 꼭 C++ 소스가 필요한 경우가 아니라면 불필요한 노력이죠.

먼저 프로젝트에 델파이 소스를 추가하세요. 탐색기에서 해당 델파이 pas 파일을 프로젝트 매니저로 드래그&드랍하셔도 되고, 프로젝트 매니저의 프로젝트 이름 부분에서 오른쪽 클릭해서 메뉴에서 Add를 하셔도 됩니다.

그런 후에 F9를 눌러 컴파일을 한번 하세요. 그러면 pas 파일이 컴파일되고, 같은 파일 이름의 hpp 파일과 obj 파일이 생성되어 있을 겁니다. 이 두 파일만 생성되면 C++빌더에서 불러쓸 수 있습니다. 불러쓰시려는 것이 클래스든 아니면 독립 함수이든, hpp 파일을 보시면 델파이 코드의 선언 부분이 모두 C++ 코드로 변환되어 있습니다. 이걸 호출하시면 됩니다.

델파이와 C++빌더를 활용하는 데 있어서는 아주 기초적인 지식이랍니다.

그럼...



책방전설 님이 쓰신 글 :
: 답변감사합니다.
:
: 우선 말씀하신데로 변경해서 컴파일 하였는데
:
: [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;
: : : }

+ -

관련 글 리스트
68627 고수님들 한번만 도와주십쇼 책방전설 1329 2012/11/20
68628     Re:고수님들 한번만 도와주십쇼 박지훈.임프 1355 2012/11/20
68629         Re:Re:고수님들 한번만 도와주십쇼 책방전설 1346 2012/11/20
68630             델파이 코드를 C++빌더에서 불러쓰기 박지훈.임프 2558 2012/11/20
68631                 Re:델파이 코드를 C++빌더에서 불러쓰기 책방전설 1579 2012/11/20
68632                     Re:Re:델파이 코드를 C++빌더에서 불러쓰기 박지훈.임프 1504 2012/11/20
68633                         Re:Re:Re:델파이 코드를 C++빌더에서 불러쓰기 책방전설 1602 2012/11/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.