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
[47305] BCB프로젝트내에서 델파이 소스와 C++ 소스간 구조체 전달 관련...
공부맨 [] 1184 읽음    2006-12-05 10:43
제가 필요에 의해 BCB 프로젝트에 델파이 소스 유닛을 몇몇 추가해서 사용하고 있습니다.
사용하다 모르는 부분이 좀 있어서요.

예를 들면...
델파이 DataModule에 다음과 같이 코딩해놨습니다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
const
  MaxCount = 1024;

type
  TMyInfo = packed record
    A: String;
    B: Integer;
    C: String;
    D: String;
  end;

  TDMComm = class(TDataModule)
  private
    FMyInfos: array[0..Pred(MaxCount)] of TMyInfo;
    function GetMyInfo(Index: Integer): TMyInfo;
    procedure SetMyInfo(Index: Integer; NewInfo: TMyInfo);
  public
    property MyInfos[Index: Integer]: TMyInfo read GetMyInfo write SetMyInfo;
  end;

function TDMComm.GetMyInfo(Index: Integer): TMyInfo;
begin
  //범위체크 코드...

  Result := FMyInfos[Index];
end;

procedure TDMComm.SetMyInfo(Index: Integer; NewInfo: TMyInfo);
begin
  //범위체크 코드...

  FMyInfos[Index] := NewInfo;
end;
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
그담에 C++ 코드에서 TDMComm::MyInfos property에 접근하죠.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
void __fastcall TFormMain::Button1Click(TObject* Sender)
{
    TMyInfo MI;
    for (int i = 0; i < MaxCount; ++i)
    {
        MI = DMComm->MyInfos[i];

        //MI 내용 변경 작업.

        DMComm->MyInfos[i] = MI;
    }
}

void __fastcall TFormMain::Button2Click(TObject* Sender)
{
    TMyInfo MI;
    AnsiString Str;
    for (int i = 0; i < MaxCount; ++i)
    {
        MI = DMComm->MyInfos[i];
//        Str = MI.A + "\t" + IntToStr(MI.B) + "\t" +
//              MI.C + "\t" + MI.D;
//        Memo1->Lines->Add(Str);
    }
}

이렇게 하면 먼저 Button1 클릭시는 문제가 없는데
Button2 클릭시 for 문 진입해서 첫 MI = DMComm->MyInfos[i]; 에서 곧바로 오류가 발생(엑세스 바이얼레이션)하더군요.
이것저것 테스트 해보다 보니 어떤 순간엔 (Call Stack 에서 확인한)_CopyRecord 에서 문제가 생기는 경우도 있고...
델파이랑 C++간에 구조체를 서로 주고 받는 과정에서 무언가 차이가 있는건지 궁금하네요.

p.s.  구조체 선언시 packed record 로도 해보고 그냥 record 로도 해봤는데 차이가 없는거 같습니다.;;

+ -

관련 글 리스트
47305 BCB프로젝트내에서 델파이 소스와 C++ 소스간 구조체 전달 관련... 공부맨 1184 2006/12/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.