|
윈도우 API등에 대해서는 Windows 단에서 지원을 하는 것이기 때문에 VC와 Builder의
차이는 생기지 않습니다.
다만, 확인해주셔야할 문제는, 스트럭쳐에 동적인 객체들이 없는지 (스트링등의 여부)
스트럭쳐의 인코딩 단위가 기본 값인 4인지, 또한 아래 작업 스텝을 거치면서 핸들의 변화등을
하나씩 읽어보시는 것이 좋으실것 같습니다.
프로그램 자체가 다운 된다는 것은, 메모리 부분과 연관이 크다고 생각합니다. 아래
ZeroMemory 등의 부분에서 크기가 엉뚱하게 읽힌 BmpImage[i].InfoHD.biSizeImage이나
정확하지 않은 포인터의 BmpImage[i].Data 등에 데이터를 쓸때 발생할 수 있는 그런
문제라 생각됩니다.
cuperido
kallru 님이 쓰신 글 :
: bmp 포맷을 읽어서 제가 만든 포맷으로 변환하는 클래스를 C++빌더에서 툴로 만들려고
: 인크루드 시켜서 쓰려고 하는데요.
:
: shj 포맷(제가 만든 포맷)을 로드 할때 이상하게 무한 루프에 빠지는 건지
: 프로그램이 먹통이 되버리는 군요.
: mfc나 vc에서 사용하면 아무런 문제 없이 잘 돌아가는데 말이죠.
:
: void __fastcall TForm1::BitBtn2Click(TObject *Sender)
: {//shjLoad button
: OD->Filter="ShjFile(*.shj)|*.shj|All(*.*)|*.*";
: AnsiString Temp;
: if(OD->Execute())
: {
: shj.LoadingSHJ(OD->FileName.c_str());
:
: for(int i=0; i<15; i++)
: {
: Temp.sprintf(&shj.BmpImage[i].FileName[0]);
: ListBox1->Items->Add(Temp);
: }
: }
: }
:
: 버튼 부분의 소스 입니다.
: shj.LoadingSHJ(OD->FileName.c_str());
:
: LoadingSHJ() 함수가 char * 로 인자를 받기 때문에 저렇게 줬습니다.
:
:
:
: BmpImage[i].Data=new BYTE[ BmpImage[i].InfoHD.biSizeImage ];
: ZeroMemory(BmpImage[i].Data, BmpImage[i].InfoHD.biSizeImage);
:
: ReadFile(Rfpt,&BmpImage[i].Data[0], BmpImage[i].InfoHD.biSizeImage, &RWSize,NULL);
: }
: CloseHandle(Rfpt);
:
: 이 소스는 LoadingSHJ 함수 안에서 메모리를 확보하고 읽어들이는 부분인데
: 디버깅을 해보니까 이 부분에서 커서가 사라지고 먹통이 됩니다. -_-;;;
: 그림파일이라서 상당히 많은 메모리를 확보하는데...으음
:
: 뭐가 잘못 된건지 모르겠어요. C++빌더는 처음 써보는 거라 힘든게 여러가지 많군요 -_-;;
: 왜 잘 돌아가는 클래스를 그대로 가저다가 썼는데 먹통이 되버리는 걸까요-_-;;
|