지금 업무 프로그래밍을 위해서 프레임워크를 만들고 있죠.
kbmMW 미들웨어 서버를 만들고 서버와 클라이언트 모두 각 폼 단위로 bpl로 나누었습니다.
그리고 클라이언트 쪽 폼과 서버쪽 서비스를 모두 자동 생성하도록 Tools API로 BDS에 플러그인되는 위저드를 만들었구요.
팀 내에 개발자가 델파이를 쓰는 사람과 C++빌더를 쓰는 사람이 모두 있어서 물론 양쪽 모두 코드가 생성되도록 했습니다.
거의 다 끝나고 마무리중인데...
이 빌어먹을 것이, 델파이 bpl은 아무 이상없이 bpl이 로드되고 실행되는데, C++쪽만 문제가 생기는 겁니다.
bpl을 로드하고 실행도 잘 해놓고, 로드한 함수를 빠져나올 때 Invalid pointer 에러가 나더군요.
bpl을 일단 로드하기만 하면 에러가 나는데, 로드한 시점에서 에러가 나는 것도 아니고 bpl의 기능을 호출하고 나서
에러가 나는 것도 아니고, 해당 함수를 빠져나온 직후에 에러가 나는 겁니다. bpl의 기능을 사용하건 말건 로드하기만 하면
말이죠. 그것도 델파이로 똑같이 구현한 bpl에서는 문제가 안생기고 말입니다.
혹시 bds2006의 버그일까, 생각해도 아무래도 이해가 안되고... 이래저래 너댓시간동안 별 쑈를 다 해봤습니다.
분명히 뭔가 꼬이긴 꼬였는데, bpl에서 의존하는 다른 bpl의 문제일까 싶기도 해서 디펜던시 워커로 뒤져보기도 하고,
머리를 마구 쥐어뜯으면서 괴로와했는데...
결국 찾은 문제의 원인... PATH 환경변수의 문제였습니다.
제가 만든 bpl이 다른 bpl도 동적으로 읽어들이게 되어있지만(당연히 이렇게 해야 함), C++빌더용의 런타임 dll들도
동적으로 읽어들이게 되어있었거든요. 그런데 시스템의 PATH 설정을 보니 델파이7의 bin 디렉토리가 BDS2006의 bin보다
앞에 가 있는 겁니다. 결국 C++빌더2006로 만든 bpl에서 델파이7의 borlndmm.dll이 호출된 겁니다.
borlndmm이 메모리 매니저인데 버전이 다른 넘이 호출되었으니 당근 메모리가 뒤죽박죽 꼬이겠죠.
아... 이렇게 허무한 문제를 만나 몇시간 동안 낭비하고 나니...
정말 미티겠슴다...
|
전 전에 얘기했던 GDI+ 문제 결국 해결 못하고... BCB6로 다시 돌아왔슴다.
이번 업데이트2 나오면 다시 한 번 도전할 예정...