블로그는 귀차니즘

First Sensation
  • 공지
  • 지역로그
  • 태그
  • 방명록

RCW 에러의 원인 - ???

Small Talk 2008/04/10 11:59 귀차니스트

  오늘 회사에서 옆에서 저와 같이 일하는 형이 C#에서 프로젝트를 하는데 있어서 문제가 생기더군요. 그 원인은 바로 COM 개체를 C# UserControl 로 Wrapping 한 뒤, 그 프로젝트에서 UserControl을 등록하여 폼에 위지윅 배치를 할 경우 "RCW개체에서 분리된 COM개체는 사용할 수 없습니다" 와 비슷한 에러가 뜨는 것이었습니다.
  그래서 집에 와서 대충 한 번 살펴보긴 했는데. 테스트 대상은 Windows Media Player 이었죠. 이것은 문제가 없더군요. 그래서 제가 임의로 추측하기론 멀티쓰레드를 고려하지 않은 즉, Thread-Safe하지 않은 Com 개체에 있어서는 에러가 생긴다고 판단하였습니다.
  실제로 Com 개체의 코드를 보면 대충 이렇게 구현이 되어있죠.

ComExample.cpp (Language : cpp)
  1. #pragma once
  2. #include "resource.h"       // 주 기호입니다.
  3.  
  4. #include <boost/function.hpp>
  5. #include <string>
  6. #include <stack>
  7. #include <cmath>
  8. #include <map>
  9.  
  10. #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
  11. #error "단일 스레드 COM 개체는 전체 DCOM 지원을 포함하지 않는 Windows Mobile 플랫폼과 같은 Windows CE 플랫폼에서 제대로 지원되지 않습니다. ATL이 단일 스레드 COM 개체의 생성을 지원하고 단일 스레드 COM 개체 구현을 사용할 수 있도록 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA를 정의하십시오. rgs 파일의 스레딩 모델은 DCOM Windows CE가 아닌 플랫폼에서 지원되는 유일한 스레딩 모델이므로 'Free'로 설정되어 있습니다."
  12. #endif
  13.  
  14. // CCCalculator
  15.  
  16. class ATL_NO_VTABLE CCCalculator :
  17.     public CComObjectRootEx<CComSingleThreadModel>,
  18.     public CComCoClass<CCCalculator, &CLSID_CCalculator>,
  19.     public IDispatchImpl<ICCalculator, &IID_ICCalculator, &LIBID_IPangYaLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
  20. {
  21. public:
  22.     CCCalculator()
  23.     {
  24.     }
  25.  
  26. DECLARE_REGISTRY_RESOURCEID(IDR_CCALCULATOR)
  27.  
  28.  
  29. BEGIN_COM_MAP(CCCalculator)
  30.     COM_INTERFACE_ENTRY(ICCalculator)
  31.     COM_INTERFACE_ENTRY(IDispatch)
  32. END_COM_MAP()
  33.  
  34.  
  35.  
  36.     DECLARE_PROTECT_FINAL_CONSTRUCT()
  37.  
  38.     HRESULT FinalConstruct()
  39.     {
  40.         return S_OK;
  41.     }
  42.  
  43.     void FinalRelease()
  44.     {
  45.     }
  46. };
  47.  
  48. OBJECT_ENTRY_AUTO(__uuidof(CCalculator), CCCalculator)
  49.  

  위에서 보는 코드와 비슷한 Com Object Class 들에서 static 코드가 존재하는 Com 개체였기에 해당 에러가 발생하지 않았나 생각합니다.
  그런데 신기한건 VS.net 2003 에서는 또 별다른 문제가 없이 작동하는 Wrapping 방법이었다는 점이죠. 이 역시 아마 VS.net 2005 로 넘어가면서 IDE 자체의 큰 변화가 있었고, 작동방법이 다르게 구현이 되었기 때문이지 않을까 생각합니다.
  막연한 추측이긴 합니다만 공통된 주제를 가지고 다음에도 토론이 되었으면 하고 포스팅을 합니다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Small Talk" 분류의 다른 글

Gradient 작성중에 있습니다. (0)2008/12/18
게임&인터랙티브 애플리케이션을 위한 수학 (0)2008/11/27
또 오랜기간의 공백을... (0)2008/10/12
남의 소스를 보는 것은 어렵습니다. 그리고... (2)2008/09/27
음.. 바빠서 한 동안 신경을 못 쓰고 있다가... (2)2008/09/22
2008/04/10 11:59 2008/04/10 11:59
TAG C#, COM, RCW
받은 트랙백이 없고, 댓글 2개가 달렸습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/48

댓글을 달아 주세요

  1. kkamagui 2008/04/21 09:27  댓글주소  수정/삭제  댓글쓰기

    쿠아~ 그런 문제도 있구나~
    완전 어렵네... ㅜ_ㅜ... 천지 이래가되긋나 ㅜ_ㅜ

    • 귀차니스트 2008/04/22 01:17  댓글주소  수정/삭제

      ㅠㅠ 글게용 원인을 잘 모르겠네요 횽이 어떻게 좀 해결을 해줘욤

◀ 이전페이지 1 ... 60 61 62 63 64 65 66 67 68 ... 110 다음페이지 ▶

블로그 이미지
First Sensation 귀차니스트
rss
  • 관리자
  • 글쓰기

카테고리

  • 전체 (110)
    • Computer (3)
    • Language (14)
    • Reverse Engineering (1)
    • Algorithm (9)
    • TopCoder (3)
    • Library (2)
    • Programming (19)
    • Programming Tip (9)
    • PSP-Programming (10)
    • Program (5)
    • Small Talk (31)
    • Document (4)

최근에 올라온 글

  • Gradient 작성중에 있습.... (3)
  • 게임&인터랙티브 애플리....
  • 한게임 자동테트리스 Ve.... (24)
  • Intel 64 And IA32 Arch.... (2)
  • 한게임 자동테트리스 Ve.... (24)

최근에 달린 댓글

  • 다운어덯게 받아요. difl 2008
  • 멋있네요 ㅎㅎ. 준호씨 2008
  • ^^; 그러셨군요.. 사실 동영.... 귀차니스트 2008
  • ㅋㅋ 속도 튜닝의 무서움 ㅜ.... 귀차니스트 2008
  • 관리자만 볼 수 있는 댓글입.... 비밀방문자 2008

달력

«   2009/01   »
일 월 화 수 목 금 토
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

링크

  • kkamagui 프로그래밍 세상.
  • 류광의 번역 이야기.
  • 서광열의 프로그래밍 언....
  • 준호씨의 블로그.
  • 최익필의 이름없는 블로그.
  • 위키는 귀차니즘.

최근에 받은 트랙백

  • 궁극의 예외처리. 이름없는 블로그 2008
  • Maximum sum. 티스토리 지점 2008

글 보관함

  • 2008/12 (1)
  • 2008/11 (4)
  • 2008/10 (2)
  • 2008/09 (3)
  • 2008/08 (5)

태그목록

  • FTP
  • Dynamic Programming
  • 책
  • 타이틀
  • RF959
  • Mouse Message
  • Contest
  • 디자인
  • OTF
  • 개발일지
  • 재귀적합성
  • 파이널 데이터
  • 한글표현
  • boost::Tokenizer
  • DP
  • Library
  • C
  • TopCoder
  • spirit
  • GDI
  • multimap
  • Call By Reference
  • Try
  • Rest
  • 입양
  • 라이브러리
  • 프로토타입
  • 한국가상캠퍼스
  • GDI+
  • Linux

지역로그 : 태그 : 방명록 : 관리자 : 글쓰기
귀차니스트’s Blog is powered by Textcube 1.7.5 : Risoluto / Designed by DesignNia.net