C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[26355] [질문] Active X 관련 이상한 현상
계동원 [] 1847 읽음    2003-07-17 16:43

C++ Builder 5 와 Visual C++ 6 을 사용중입니다만,
아주 이상한 문제에 봉착했습니다.


Macromedia Director 의 OCX  (ShockwaveCtl.ocx)  를 이용해서 프로젝트를 진행중인데,
C++ Builder 에서는 Import ActiveX Component  를 사용해서 ShockwaveCtl 을
추가한 후,  컴파일해서 실행하면 에러가 뜹니다. (엑세스 바이얼런스)

(Flash 가 아닌 Shockwave 입니다. Flash 컨트롤은 아주 잘 됩니다)


다행이도 VC++ 에서는 Import 해서 실행해도 문제 없고,
파일 불러와서, 플레이까지 아무런 문제가 없습니다.

그런데, 디렉터 파일을 불러와서 플레이 하는 것에서 끝이 아니고,
디렉터의 External Event 를 받아서 처리해야 합니다.

C++ Builder 에서는 디렉터가 실행은 안되지만,
그래도 변수에 -> 찍어보면  OnExternalEvent() 메소드가 있습니다만,

VC++ 에는 익스터널 이벤트 메소드가 없습니다.

그래서 각각의 헤더를 확인해보니, 


C++ Builder 의 경우에는 OleControl 로 부터 상속을 받으며,

TShockwaveCtlExternalEvent 부분이 있습니다만...

// *********************************************************************//
// Definition of closures to allow VCL handlers to catch OCX events.     
// *********************************************************************//

typedef void __fastcall (__closure * TShockwaveCtlExternalEvent)(System::TObject * Sender,
                                                                 BSTR bstrEvent/*[in]*/);

typedef void __fastcall (__closure * TShockwaveCtlProgress)(System::TObject * Sender,
                                                            long percentComplete/*[in]*/);

typedef void __fastcall (__closure * TShockwaveCtlReadyStateChange)(System::TObject * Sender,
                                                                    long newState/*[in]*/);

//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
// Proxy class to host Shockwave ActiveX Control in CBuilder IDE/Applications.
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

class PACKAGE TShockwaveCtl : public TOleControl
{
  OVERLOADED_PROP_METHODS;
  static TNoParam  OptParam;
  static GUID      DEF_CTL_INTF;

  // Instance of Closures to expose OCX Events as VCL ones
  //
  TShockwaveCtlExternalEvent     FOnExternalEvent;
  TShockwaveCtlProgress          FOnProgress;
  TShockwaveCtlReadyStateChange  FOnReadyStateChange;



VC++ 의 경우에는,

class CShockwaveCtl : public CWnd
{
protected:
    DECLARE_DYNCREATE(CShockwaveCtl)
public:
    CLSID const& GetClsid()
    {
        static CLSID const clsid
            = { 0x166b1bca, 0x3f9c, 0x11cf, { 0x80, 0x75, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0 } };
        return clsid;
    }
// Attributes
public:

// Operations
public:

CWnd 로 부터 상속 받으며 익스터널 이벤트 받는 부분이 전혀 없습니다.



이거 같은 ActiveX(OCX) 를 import 했는데,
왜 VC++ 에는 저렇게 나오는걸까요?


C++ Builder 는 물론이고, Delphi, 심지어는 C# 에서도 External Event 가 있거든요...
아 미치겠습니다.


C++ Builder 에서 쇼크웨이프 컨트롤이 작동되던가,
아니면 VC++ 에서 External Event 가 되어야 하는데...

양쪽이 한쪽씩만 됩니다.-_-;;;;;;;;;;;;;;;;;;;;;


혹시 어느쪽이든 해결 방법 좀 부탁드립니다.

(빌더 6 에서도 테스트 해봤으나 쇼크웨이브 컨트롤은 에러가 뜹니다)


이왕이면 Builder 에서 쇼크웨이브 ActiveX 컨트롤이 작동되면 좋겠습니다.

이미 Flash 버젼은 C++ Builder 로 만들었기 때문에...;;;


Visible 을 false 로 해놓으면 Form 이 뜨기는 뜨는데,
Visible 을 true 로 바꾸면 작동이 안되고,


shockwave = TShockwaveCtl(this) 를 해주면,
작동시 에러는 안뜨는데 아무것도 작동이 안됩니다.
(SetBounds, Play 등등 모조리)


빌더에서 쇼크웨이브 컨트롤 어떻게 써야될지 정말 모르겠네요.




+ -

관련 글 리스트
26355 [질문] Active X 관련 이상한 현상 계동원 1847 2003/07/17
32849     Re:[질문] Active X 관련 이상한 현상 계동원 931 2003/07/18
32848     Re:[질문] Active X 관련 이상한 현상 계동원 807 2003/07/18
32847     Re:[질문] Active X 관련 이상한 현상 김상구.패패루 831 2003/07/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.