Delphi로 ActiveX 제작시 DAX 에러나는 문제 해결법
델파이2008. 8. 7. 09:12
델파이 옛날 버전 부터 있었던 버그라네요;
5부터... 제가 쓰고 있는 2007 까지...
원인에 대해서 한델 이광수님의 글을 퍼왔습니다.
자료가 D7에서 ActiveX를 제작하시는 분들이 많아서 2007용 수정된 파일은 못찿겠네요;
그래서 그냥 D7에 수정된 내용을 D2007파일에 붙여 넣어 만들었습니다.
필요하신 분들 사용하세요. 원본파일은 백업 해놓으세요.
...
문제의 원인은 axctrls.pas의 ParkingWindow펑션에서 일어납니다.
소스 코드를 보시면 파킹윈도우를 만들기 위해서 registerclass를 하게 됩니다.
보통 윈도우 클래스는 윈도우를 처리하기 위한 프로시져를 가지는데요.
이게 처음 메모리에 로딩되는 ocx의 것을 사용하게 됩니다.
그런데 ie와 같이 프로세스는 하나이고 빈번하게 ocx가 로딩되고
언로드 되는 과정에서 등록한 클래스의 처리 루틴이 메모리에 로딩되고
다시 떨어질때 문제가 생기는 것으로 보입니다.
즉 2개 이상의 delphi ocx를 사용하는 경우에
ie상에서 새창에 ocx를 띄울 때
1번 ocx가 올라 갈때 는 문제가 없다가
2번 ocx가 올라 갈때 문제가 생깁니다. 이때 1번 ocx가 언로드 중이라면
2번 ocx는 클래스는 레지스트 된것으로 생각하고, 윈도우 proc을 1번
ocx것을 사용하게 되는데 1번 ocx는 메모리에서 언로드 된 상황이라
access violation을 일으키게 됩니다. (에러의 정확한 위치는 CreateWindowEx에서 생기게 됩니다.)
...
'델파이' 카테고리의 다른 글
동적 IP, DNS 변경 함수 (0) | 2008.11.12 |
---|---|
IE Band에서 탭키, 엔터키, 델리트키(VK_TAB, VK_RETURN, VK_DELETE) 입력가능하도록 하기 (0) | 2008.10.17 |
소수점 이하 제거하는 함수 (0) | 2008.10.06 |
Delphi 2007에서 DSPack 설치하기 (0) | 2008.09.24 |
Internet Explorer7 에서 현재 활성화 되있는 탭윈도우 핸들 얻기 (0) | 2008.08.28 |
인터넷에서 파일 다운로드 하기 (0) | 2008.07.17 |
ActiveX에서 IWebBrowser2(브라우저 포인터) 얻기 (0) | 2008.07.16 |
URL 인코딩(Encoding) 함수 (0) | 2008.06.25 |
문자열을 MD5로 변환하는 유닛 (0) | 2008.06.09 |
문자가 한글이지 확인하는 법 (0) | 2008.05.28 |