ATL COM 안정성보장 하는 코드 확인좀.
글쓴이: domiisa / 작성시간: 금, 2012/06/08 - 3:25오후
안녕하세요
ActiveX 만들려고 하는데 VS6.0 으로 ATL을 사용하여 만들었습니다.
그래서 html과 연동하여 사용 하려니 엑박이 뜨더군요.
(살펴보니 객체들 연결이 안되서 안정성보장해주는 코드를 넣으라네요)
그래서 인터넷 참조한 cathelp.cpp cathelp.h 파일 추가하고
STDAPI DllRegisterServer(void) { // registers object, typelib and all interfaces in typelib if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE)) return ResultFromScode(SELFREG_E_CLASS); if (FAILED( CreateComponentCategory(CATID_SafeForScripting, L"Controls that are safely scriptable") )) return ResultFromScode(SELFREG_E_CLASS); if (FAILED( CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data") )) return ResultFromScode(SELFREG_E_CLASS); if (FAILED( RegisterCLSIDInCategory(_ctlid, CATID_SafeForScripting) )) return ResultFromScode(SELFREG_E_CLASS); if (FAILED( RegisterCLSIDInCategory(_ctlid, CATID_SafeForInitializing) )) return ResultFromScode(SELFREG_E_CLASS); return NOERROR; //plug }
위 코드 처럼 추가하라 하더군요.
여기서 문제가 ATL DllRegisterServer()함수에는 리턴값이 return _Module.RegisterServer(TRUE);
이렇게 나오는데.. 위 코드처럼 NOERROR 로하면 레지스터 등록이 제대로 되지않아요.(progID..등 안나옴)
그래서 여전히 엑박이 뜹니다.
현재는 각각 return 값 바꿔서 2개의 dll만든 후 2개다 레지스터 등록시켜서 사용하고 있긴한데
컴파일 매번 2번씩하고 할려니 답답하네요.
도와주세요.
요약하자면 return NOERROR 로 레제스터 등록하면 레지스터 등록이 제대로 안되서 엑박이 뜨고
return _Module.RegisterServer(TRUE); 이걸루 하면 안정성이 보장안대서 html과 객체 연결이 안되서 엑박이 떠요
Forums:
댓글 달기