Q&A

  • [질문] MFC를 델파이7로 컨버팅하는 중에.. 걸리는 부분...
여기부터가 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를 델파이에서는 어떻게 써야 할런지가 젤 고민입니다.

도움 부탁드리겠습니다.

7  COMMENTS
  • Profile
    최용일 2010.03.18 01:10
    제대로 하신것 같은데요. BYTE *는 PByte를 쓰시면 됩니다.

    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)를 쓰시면 됩니다.
  • Profile
    헤메는별 2010.03.18 01:51
    정말 감사드립니다...^^;;
  • Profile
    땅콩맨 2010.03.18 06:54
    오래간만에 C언어 소스를 보니깐 감회가 남다르네요...
    C <-> Delphi 포팅! 재미있겠어요... 헤매는별님은 어떤 프로젝트 진행중이세요?
  • Profile
    헤메는별 2010.03.18 22:32
    예... 지금 네트웍 카메라 관련된... ㄷㄷㄷㄷㄷㄷㄷㄷ ^^;;
  • Profile
    땅콩맨 2010.03.19 18:49
    와.. 네트웍 카메라라... 좀 자세히 알려주세욤... ^^
    회사기밀인가요? ㅋㅋㅋㅋ
  • Profile
    헤메는별 2010.03.19 19:55
    기밀은요.. 무슨.. ^^ 자동차 검사와 관련된 솔루션을 만들고 있는 회사구요... 검사시에 카메라로 사진이 필히 필요한데.. 이걸 네트웍 카메라로 대체하려고 구성중입니다 ^^
  • Profile
    땅콩맨 2010.03.20 07:57
    아. 그렇구나... 자동차검사라... 멋있으시네요!!! ^^
    • 땅콩맨
      2010.03.23 08:43
      제 생각에는 윈도우7에서 클래스가 호환이 안되서 그러는것 같은데요 새로운api가 있는지 살펴봐야될 것...
    • 홍성락
      2010.03.23 00:15
      Longint(A)로 하시면 되는데 이건 어떤 헤더의 주소라서 나중에 주소연산으로 구할때 많이 사용하는건데 ...
    • 땅콩맨
      2010.03.23 08:00
      Pbyte가 바이트를 포인터로 사용하는 거 맞나요?
    • 홍성락
      2010.03.23 21:54
      예 Pbyte는 byte값을가진 장소의 integer형 주소값만 있구요. 값을 참조시나 정렬등시 빠른 연산을 위해 ...
    • 땅콩맨
      2010.03.24 08:02
      아. 좋은 내용 감사드립니다. 위의 Comment중 일반 값을 넘기도 → 일반 값과 비교하여 아닌가요? ㅋ...
    • 홍성락
      2010.03.24 18:51
      ^^오타입니다. 일반 값을 (파라메터로)넘기거나, (값을) 복사하여 옮기는....
    • 땅콩맨
      2010.03.25 04:36
      일반 값과 비교하여 ㅋㅋ 제가 적은글을 다시 보니 웃음이... ^^;;
    • phono
      2010.03.22 21:37
      Active X가 있긴한데.., 하도 요즘 Active X를 까는 추세라..
    • 최진영
    • 2010.03.20 10:34
    • 4 COMMENTS
    • /
    • 0 LIKES
    • phono
      2010.03.21 02:26
      해당 데이터 셋의 프로퍼티에 보믄 AutoReflash 라는게 있을 겁니다. 사용해 보셨는지요?
    • 땅콩맨
      2010.03.21 05:13
      바로 업데이트가 이루어지는게 아니라면 타이머 컴포넌트를 이용하여 dbgrid의 refresh속성을 활성화 해...
    • 조용환
      2010.04.16 17:50
      UpdateSql을 사용해 보세요. tquery와 updatesql을 사용하여 디비그리드상에서 직접 데이타를 편집할...
    • 김용일
      2010.04.19 22:51
      이런 방법이 있었군요. 바쁘다보니 이런방법을 찾아보지도 못했는데 한 번 해 봐야겠네요.
    • 김동식
    • 2010.03.20 03:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2010.03.20 03:51
      같은 값입니다. 델파이에서 $20이하의 값은 표시안합니다. 실제적으로 아스키값 $20는 특수한 용도로 쓰...
    • 최용일
      2010.03.20 00:16
      Chr($1C) ShowMessage(Chr($1C));
    • 최용일
      2010.03.20 00:14
      콜백함수를 메소드에서 일반함수로 바꾸세요. procedure FrameDisplayProc(uID : UINT; uMessage : UI...
    • 헤메는별
      2010.03.22 21:54
      항상 감사드립니다. ^^
    • 땅콩맨
      2010.03.20 09:02
      delph 2010을 사용하지 않아서 자세한 답변은 힘들다고 생각이 들지만 그 아랫버저에서 다뤘던 subverso...
    • 치꼬
    • 2010.03.19 02:42
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.03.19 19:59
      에러가 발생되는 소스를 첨부해주세요. 그래야 에러가 발생되는 원인을 알수있을테니깐요... 아니면...
    • 치꼬
      2010.03.19 23:18
      오류내용은 아래와 같습니다. Error:130 Failed to Retrieve Error Message from Print Engine. ...
    • 땅콩맨
      2010.03.20 07:57
      에러를 해결할 생각이 있으시다면 서점쯤 가는것이야 일이 되서는 안되겠죠?
    • 치꼬
      2010.03.22 18:18
      뭐.. 서점에 가는것이 무슨일이겠습니까... 문제는 그렇게하지 않도록 해결할수있는 방법이 있다면 더 ...
    • 최용일
      2010.03.18 01:10
      제대로 하신것 같은데요. BYTE *는 PByte를 쓰시면 됩니다. m_RecFile.Write((@(frame_rate1))^,4); ...
    • 헤메는별
      2010.03.18 01:51
      정말 감사드립니다...^^;;
    • 땅콩맨
      2010.03.18 06:54
      오래간만에 C언어 소스를 보니깐 감회가 남다르네요... C <-> Delphi 포팅! 재미있겠어요... 헤매...
    • 헤메는별
      2010.03.18 22:32
      예... 지금 네트웍 카메라 관련된... ㄷㄷㄷㄷㄷㄷㄷㄷ ^^;;
    • 땅콩맨
      2010.03.19 18:49
      와.. 네트웍 카메라라... 좀 자세히 알려주세욤... ^^ 회사기밀인가요? ㅋㅋㅋㅋ
    • 헤메는별
      2010.03.19 19:55
      기밀은요.. 무슨.. ^^ 자동차 검사와 관련된 솔루션을 만들고 있는 회사구요... 검사시에 카메라로 사진...
    • 땅콩맨
      2010.03.20 07:57
      아. 그렇구나... 자동차검사라... 멋있으시네요!!! ^^
    • 땅콩맨
      2010.03.16 09:46
      http://bluexmas.tistory.com/20 [SOAP강좌] Java 서버 - Delphi 클라이언트 참고하세요!
    • 유옥난
      2010.03.23 03:18
      너무초보라 보고도 잘 몰겠어요 ㅡㅡㅋ 보내주신 소스를 책보고 연구해야 할라나봐요! 답변 너무 너무 ...
    • 땅콩맨
      2010.03.23 07:45
      쑥스럽게 ㄳ는요? ㅎㅎ 암튼 꼭 성공하시길 바랄께요. 성공하시면 또 알려주세요~
    • 유옥난
      2010.04.15 21:01
      성공했어요~ ^^ 닷넷쪽 서버에서 수정해야 하네요~ ㅋ 뭔지 잘 몰르지만 서버쪽에서 도큐먼트 방식으로...
    • 땅콩맨
      2010.04.16 10:04
      해결하셨다니 다행이네요. ^^
    • 조희정
    • 2010.03.13 03:37
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.03.13 10:12
      if ping_test < timeout query end if 하나마나한 답변이겠지만 몇자 끄저역 봅니다...
    • KDDG_Hit
      2010.03.15 20:37
      보통 서버 프로그램이 종료될 경우는 연결되어 있는 클라이언트 소켓을 끊지 않나요?? 이때 클라이언트에...
    • 땅콩맨
      2010.03.17 09:23
      아 그렇게 하면 되겠네요...
    • 낭낭
    • 2010.03.13 03:12
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.03.14 10:06
      제 생각에는 if length(Adata) < 1310 then exit; 이 부분이 의심이 가네요. 1310이 1310 byte를 의...
    • phono
      2010.03.19 02:01
      AData 타입이 TByte 네요.. 이러면 AData 타입이 일반 byte 형태는 아닐듯 하군요. AData.xxxx ...
    • 최용일
      2010.03.12 21:08
      그런 방법은 불가능합니다. 델파이의 폼객체와 C++의 윈도우객체가 근본적으로 다르기 때문이죠. MS Win...
    • KDDG_Hit
      2010.03.12 21:26
      답변 감사합니다.. 몇일동안 이것저것 다 찾아봤었는데. ㅠ.ㅠ 음.. 그러면 역시 Windows API 를 이용해...
    • KDDG_Hit
      2010.03.12 22:28
      SetWindowLong, SetWindowPos 함수로 해결했습니다~~
    • 땅콩맨
      2010.03.14 10:16
      오~ 이방법 알아두면 나중에 유용할때가 있겠는걸요? ^^
    • 송창열
    • 2010.03.12 20:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.03.17 09:32
      저같은 경우는 시작프로그램에 프로그램이 등록되어있다면 이를 최소화하고 또 리소스를 많이잡아먹는 ...
    • mook
    • 2010.03.11 02:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.03.12 09:47
      mook님의 문제를 함께 해결해보고 싶었는데 뭣미... 퀀텀그리드가 안깔려있다는... ^^;;