Windows Programming

regsvr32 를 하다가 죽을 때

오즈마스터 2008. 1. 31. 19:39
ocx 가 메인이고, dll 들을 곁가지로 같이 갖고 있는 솔루션이 있다.

어느 순간 갑자기 빌드 마지막에 Debug Assert 가 일어나 버렸다.

황당했다. 프로그램 실행시도 아니고 빌드후에 regsvr32 를 하는 도중에 저런게 뜨다니...


이런 상황은 이전에도 많이 경험했다.
주로, dll 내의 DllRegisterServer 쪽의 코드가 잘못됐을 때, 혹은 ocx 의 InitInstance() 함수가 잘못 됐을 때 일어난다.

그런데, 오늘 겪은 상황은 모두 해당 사항 없음이다.

결국 문제를 발견했는데 원인은 잘 모르겠다.

문제는 dll 의 헤더에 멤버변수 하나를 추가한 것 뿐이다.

이상하다. 멤버변수를 추가해서 다시 컴파일 하고 lib 도 링크되고, dll 도 복사되고 하는데 왜 이런일이...

더 이상한건, 멤버변수를 커멘트 처리하고 컴파일해서 잘 됐는데, 다시 원래대로 돌리면 에러가 나야 하는데 나질 않는다.
알 수 없다.



추가 :
한가지 추측이 가능한 것 : ocx 가 regsvr32 로 등록 될 때 인스턴스가 한번 생성되면서 실행이 된다는 것으로 미루어 보아, 역시 실행중에 에러가 난 것은 맞다고 본다.
즉, 관련 dll 들 역시 그때 인스턴스화 된다는 것.

결론은 한가지다. dll 의 멤버 변수 정보가 동기화 되지 않은 것이다!
ocx 측은 헤더를 참조하므로, 컴파일 에러도, 링크 에러도 나지 않았지만, 실제 dll 은 이 멤버변수를 익스포트 시키지 못했던 것 밖에 생각 할 수 밖에 없겠다.

불행히도 여전히 해결은 못 했지만.............