MicroSoft Office Automation : PPT

00_Develop_whOLE/BASIC 2009. 2. 20. 01:20
Powerpoint Automation

 : powerpoint 2003 + VS2005 sp1 + mfc

도움 되는 사이트
1. http://support.microsoft.com/kb/169505
 - 파워포인트 오토메이션 개발에 기본적인 정보를 제공해주는 ms 페이지.
 - 위 사이트는 vs6.0을 기반으로 정보를 제공하고 있는듯.
    vs 2005에서 typelibrary를 가져오면 각 클래스별로 cpp와 .h파일을 생성한다.
    또한 에러도 작렬. 정보도 없고 시간도 부족해서 에러 잡을 생각은 못함 -_-;;
    typelibrary 가져오기만 6.0으로 하고 생성된 msppt.cpp와 msppt.h를 2005 프로젝트에 삽입해서 사용함.
 - 대부분의 파워포인트상의 UI메뉴는 _Presentation클래스 내에서 거의 동일한 이름으로 존재함. 그냥 가져다 쓰면됨.
 - 이 사이트에 있는 내용대로만 구현 할 수 있으면, 나머지는 olb에서 클래스 가져다 응용해서 쓰기만 하면 됨.

2. http://support.microsoft.com/kb/308336/
 - 파워포인트 오토메이션 개발에 꼭 필요한 레퍼런스!
 - 1번 사이트에서 실행, 저장 종료 같은걸 하고, 이 사이트에서 ppt 그리기(?)를 배운다.
    쉽게말하자면 1번은 이제 스킬책을 사서 더블클릭한거고 2번은 숙련도 올리기 랄까 -_-;
 - 이건 2005 기준인듯.

3. http://powerpoint.objectsdefined.com/Microsoft/PowerPoint/2003/default.htm
 - 파워포인트 오토메이션 개발 시에 사용할 함수와 각 옵션별 세팅값을 정리해둔 페이지.
 - 세팅값에 대한 것은 아주 세세하게 정리되있어서 편리하지만, 어디에 쓰이는 값인지에 대한 정보는 일일히 다 들어가봐야 알 수 있음 -_-
 - 또한 각 함수에 대한 reference도 없음. 구글신에게 물어봐야 함 -_-

사실 위 두개 페이지 외에는 어떤 오토메이션 기능을 넣을 것이냐에 따라 직접 찾아봐야 함.
그런데 너무도 정보가 부족하니 노가다가 필요 -_-
특히나 MFC에서의 오토메이션 개발에 대한 정보는 베이직이나 .net, #에 비해 너무나도 부족
(당연한걸지도...쩝 -_-)

설정

트랙백

댓글

'지원되지 않는 작업을 시도했습니다'

00_Develop_whOLE/debug_base 2008. 8. 11. 15:06

visual studio 2005 sp1. vc++ mfc80

릴리즈로 생성된 exe파일을 실행하려는데 갑자기 나타나는 쌩뚱맞은 메세지.

사용자 삽입 이미지

에러없이 컴파일 됐는데 쌩뚱맞은 메세지의 등장으로 인해

다시 디버그로 컴파일후 실행해보니 나타나는 개막장 메세지~!!!

사용자 삽입 이미지

ㅎㄷㄷㄷ 이게 뭐야 무서워

여기서 '무시'를 누르면 다시 '지원되지 않는 작업을 시도했습니다'라는 메세지와 함께

다른 곳에서 또 에러..에러..에러..._-;;

내가 무슨짓을 했지? 하고 가만히 생각해보니

다이알로그 위에 올려놨던 에디트박스 컨트롤을 지우고

에디트박스에 연결해놓은 멤버변수를 지우지 않았다.

2005정도 되면 그런건 알아서 지워줄줄 알았건만 -_-....

컨트롤과 연결된 멤버변수를 싹 다 지워주니, 문제 없이 실행~

2005 실망이야.

설정

트랙백

댓글

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는 변경하지 않음***

사용자 삽입 이미지

설정

트랙백

댓글