아... 이것 때문에 거의 이틀을 꼬박 날려버렸네요.
원래 진행중인 프로젝트가 C++Builder 6에서 GDI+를 이용하고 있었습니다.
프로젝트를 BDS2006으로 마이그레이션 하기 위해 그동안 써드파티 컴포넌트 이식작업을 준비해왔고, 이제 본 프로젝트 마이그레이션만 남아 있었는데...
생각치도 않은 GDI+가 발목을 잡아버리네요.
처음에는 GDI+의 초기화 문제일 것이라고 생각을 했지만... 결론은 그것과는 상관이 없는 것 같습니다. 정말 사람 헷갈리게 하는 것은... Matrix를 제외한 다른 기능은 별 이상 없이 되더라는 것이죠. GDI+의 Matrix를 사용하는 경우 문제가 시작되는군요.
클래스 멤버로
Gdiplus::Matrix VP;
뭐 이런식으로 선언을 할 경우 VP가 제대로 초기화 되지 않는 문제가 있습니다.
당연히 이 때문에
Gdiplus::Graphics gp(Canvas->Handle);
Gdiplus::Pen p(Gdiplus::Color::Red);
gp.DrawLine(&p, 0,0,100,100); // <- 여기까지는 잘 그려집니다.
Gdiplus::Matrix mt;
if (gp->GetTransform(&mt) != Gdiplus::Ok)
{
ShowMessage("Error!!");
}
이런 코드를 사용시... 바로 CPU모니터링 창이 뜨면서 에러발생... 에러가 나지 않는 경우도 있었고 간혹 될 때도 있었지만... 암튼 이상합니다. 데이터 얼라인먼트를 4byte로 바꿔도 마찬가지고...
아직까지 해결책을 찾지 못하고 있습니다. 프로젝트는 급하기 때문에 일단 다시 BCB6용으로 변환시켜놓기는 했습니다만... 그래도 성과가 전혀 없는것은 아니라서 마이그레이션 하는 동안 자잔한 버그들도 잡았고 패키지도 다시 정리하고... 그나마 다행입니다.
인터넷에서 관련 정보를 좀 수집해 보는데... 델파이 쪽에서는 별 문제 없는 것 같네요.
BDS2006 개발팀에 좀 이 문제가 알려지면 좋겠는데... 에효...
|
아 짱나...