C++/(MFC)COM dll 사용

작성일: 2012-04-06



1. COM 모듈만으로 COM 사용하기 #

1.1. IDL 파일 추출하기 #

1. Visual Studio 도구 OLE Viewer를 실행한다. (VS Command prompt>oleview)
2. (OLE/COM Object Viewer)File>TypeLib> COM dll 열기
3. File>Save As> xxx.IDL로 저장

1.2. IDL 파일로 TLB 파일 생성하기 #

1. VS Command prompt> midl /mktyplib203 xxx.idl

# 생성이 안 되거나 오류는 주로 경로 문제, 아니면 생성된 idl을 메모장으로 열어 오류가 없는지 확인 -> 관련 오류 찾아 제거)

1.3. TLB 파일 import #


  1. #import "xxx.tlb" named_guids
  2. using namespace XXXX;

1.4. MFC에서 COM 객체 생성 #


  1. CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

혹은

  1. if (!AfxOleInit())
  2. {
  3.     AfxMessageBox(_T("OLE_INIT_FAILED"));
  4.     return FALSE;
  5. }

가 호출되어 있어야 함.


예제코드)
  1. IWorkPackagerADK* objWorkPackager = NULL;
  2. HRESULT hr = CoCreateInstance(CLSID_WorkPackagerADK, NULL, CLSCTX_INPROC_SERVER, IID_IWorkPackagerADK, reinterpret_cast<LPVOID*>(&objWorkPackager));
  3. if (SUCCEEDED(hr))
  4. {
  5.     objWorkPackager->OverwriteFlag = 1;
  6.     objWorkPackager->IsTemp = 0;
  7.     if (objWorkPackager->GetFileType(_T("C:\\drmtest\\secure\\proxy20111005.txt")) == 103)
  8.     {
  9.         CString sOrgFilePath = theApp.m_arFileList.GetAt(i);
  10.         objWorkPackager->DoExtract(_T("C:\\Program Files\\Fasoo DRM\\CW-Packager\\fsdinit"),
  11.             _T("0000000000000000"),
  12.             sOrgFilePath.GetBuffer(0),
  13.             sFilePath.GetBuffer(0));
  14.             sFilePath = _T("(null)");
  15.     }
  16. }


이 글에는 0 개의 댓글이 있습니다.