ActiveX 코딩시 clsid로 인한 ocx 재설치 오류

00_Develop_whOLE/ActiveX 2007. 9. 9. 22:50

ActiveX사용을 종료한후,

OLE View(시작>프로그램>MS Visual Studio>Visual Studio의 도구들)를 열어서

All Objects에서 ActiveX의 Project Name, 혹은

GUID(Project Name이 지정되지 않았을 경우 GUID로 object가 연결됨)를 선택하면

참조하는 ocx파일의 경로가 나타난다.(대부분 project/release/projectname.ocx일거다)

이 경로를 탐색기등으로 복사한 후,(파일경로 .ocx까지)

시작>실행>regsvr32 /u '경로'>엔터

하면 '경로'의 DLLUnregisterServer 성공 이라고 뜬다.

그럼 이제 웹에서 받아서 테스트 ㄱㄱ

테스트 후 다시 Visual c++에서 릴리즈 하면 다시 경로가 로컬로 덮어씌워진다-_-

참조하는 ocx의 경로는 이미 지정되있는 경로가 웹일 경우엔 로컬로 덮어씌워지지만,

어째서인지 지정되있는 경로가 로컬일 경우에는

웹 경로가 덮어씌워 지지 않는다. 왜일까 -_-도대체 왜 -_-;

아무튼 그렇기 때문에, 필수로 거쳐야 한다.

설정

트랙백

댓글

MFC ActiveX 복제시 ocx GUID 변경방법

00_Develop_whOLE/ActiveX 2007. 9. 9. 22:48

같은 GUID를 쓰는 ocx가 두개이상 설치되어있을 경우엔, 

먼저 설치된 ocx파일만 실행되므로 변경해야함.

*웹 연결시 사용하는 GUID는 odl파일의 4번째 UUID임.(odl파일의 가장 마지막 UUID)*

작성환경 : ms vc++ 6.0 sp6

1. 시작>실행>guidgen.exe

2. 3.static const struct Guid == 를 선택, New Guid & Copy

3. 생성된 GUID를 4개로 복제.

  예) 생성된 GUID가 아래와 같을 경우

// {77293D66-B77E-4973-83C1-325286629E23}
static const GUID <<name>> =
{ 0x77293d66, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };

**가운데 static const...는 필요없으므로 삭제해도 무방**

원본.

// {77293D66-B77E-4973-83C1-325286629E23}
{ 0x77293d66, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };

복제1.
// {77293D67-B77E-4973-83C1-325286629E23}
{ 0x77293d67, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };

복제2.

// {77293D68-B77E-4973-83C1-325286629E23}
{ 0x77293d68, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };

복제3.

// {77293D69-B77E-4973-83C1-325286629E23}
{ 0x77293d69, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };

이런 식으로 첫 단락의 끝자리만 변경.
숫자가 아니라 알파벳일 경우 A,B,C의 순서대로 나간다.

4. 복제된 UID를 odl파일에 있는 4개의 uuid에 순서대로 붙여넣기

5. cpp파일의 GUID수정

   const GUID CDECL BASED_CODE _ctlid =

     의 밑에 존재하는 GUID를 '복제3'의 GUID로 변경

   const GUID CDECL BASED_CODE _tlid =

     의 밑에 존재하는 GUID를 '원본'의 GUID로 변경

  ** CATID를 변경하지 않음**

6. Ctl.cpp파일의 GUID 수정

   '복제3'의 GUID를 IMPLEMENT_OLECREATE형식으로 변경한 후

     (변경 예 { 0x77293d69, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };

                          ↓↓↓↓                          ↓↓↓↓                          ↓↓↓↓

                    0x77293d69, 0xb77e, 0x4973, 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23

      중괄호만 지워주면 됨 )

   Ctl.cpp의 IMPLEMENT_OLECREATE_EX(   안에 존재하는 GUID를

     수정한 '복제3'의 GUID로 변경

   const IID BASED_CODE 의 GUID를 '복제1'의 GUID로 변경

   const IID BASED_CODE *Events 의 GUID를 '복제2'의 GUID로 변경


***GUID중 cpp의 CATID와 Ppg.cpp의 GUID는 변경하지 않음***

사용자 삽입 이미지

설정

트랙백

댓글