2016/11/03

Using CEF(Chromium Embedded Framework) with MFC Part2

이전 글(http://neodreamer-dev.blogspot.kr/2016/11/UsingCEFwithMFCPart1.html)에 기록한대로 만든 libcef_dll_warpper.dll 을 테스트하여 보았다.
테스트에 사용된 코드는 인터넷에서 CEF 사용 방법을 찾아 돌아다니다 얻은 여러 코드를 조합하여 작성한 코드인데 출처가 기억이 나지 않는다.
단순히 CEF를 올리고 구글 페이지로 접속을 하는 코드이다.
프로젝트는 다이얼로그 기반으로 기본 컨트롤을 모두 삭제하고 브라우저를 생성하기 위해 Static  컨트롤 하나만 올린 상태이다.


//////////////////////////////////////////////////////////////////////////
// CEF
//#define CEF_USING_SANDBOX
#include "include/cef_app.h"
#include "include/cef_client.h"

//* CEF_3.2840.1511
 #ifdef _WIN64
  #ifdef _DEBUG
    #pragma comment(lib, "../CEF_3.2840.1511/bin_x64/Debug/libcef.lib")
    #ifdef CEF_USING_SANDBOX
      // MT Only
      #pragma comment(lib, "../CEF_3.2840.1511/lib_x64/Sandbox/Debug/libcef_dll_wrapper.lib")
    #else
      #ifdef _DLL
        // MD
        #pragma comment(lib, "../CEF_3.2840.1511/lib_x64/Debug/libcef_dll_wrapper_mdd.lib")
      #else
        // MT
        #pragma comment(lib, "../CEF_3.2840.1511/lib_x64/Debug/libcef_dll_wrapper_mtd.lib")
      #endif
    #endif
  #else // Release
    #pragma comment(lib, "../CEF_3.2840.1511/bin_x64/Release/libcef.lib")
    #ifdef CEF_USING_SANDBOX
      // MT Only
      #pragma comment(lib, "../CEF_3.2840.1511/lib_x64/Sandbox/Release/libcef_dll_wrapper.lib")
    #else
      #ifdef _DLL
        // MD
        #pragma comment(lib, "../CEF_3.2840.1511/lib_x64/Release/libcef_dll_wrapper_md.lib")
      #else
        // MT
        #pragma comment(lib, "../CEF_3.2840.1511/lib_x64/Release/libcef_dll_wrapper_mt.lib")
      #endif
    #endif
  #endif
#else
  #ifdef _DEBUG
    #pragma comment(lib, "../CEF_3.2840.1511/bin_x86/Debug/libcef.lib")
    #ifdef CEF_USING_SANDBOX
      // MT Only
      #pragma comment(lib, "../CEF_3.2840.1511/lib_x86/Sandbox/Debug/libcef_dll_wrapper.lib")
    #else
      #ifdef _DLL
        // MD
        #pragma comment(lib, "../CEF_3.2840.1511/lib_x86/Debug/libcef_dll_wrapper_mdd.lib")
      #else
        // MT
        #pragma comment(lib, "../CEF_3.2840.1511/lib_x86/Debug/libcef_dll_wrapper_mtd.lib")
      #endif
    #endif
  #else // Release
    #pragma comment(lib, "../CEF_3.2840.1511/bin_x86/Release/libcef.lib")
    #ifdef CEF_USING_SANDBOX
      // MT Only
      #pragma comment(lib, "../CEF_3.2840.1511/lib_x86/Sandbox/Release/libcef_dll_wrapper.lib")
    #else
      #ifdef _DLL
        // MD
        #pragma comment(lib, "../CEF_3.2840.1511/lib_x86/Release/libcef_dll_wrapper_md.lib")
      #else
        // MT
        #pragma comment(lib, "../CEF_3.2840.1511/lib_x86/Release/libcef_dll_wrapper_mt.lib")
      #endif
    #endif
  #endif
#endif
//*/
//////////////////////////////////////////////////////////////////////////

BOOL CTestCEFinMFCDlg::DestroyWindow()
{
  CefShutdown();

  return CDialogEx::DestroyWindow();
}

BOOL CTestCEFinMFCDlg::OnInitDialog()
{
  :
  CRect rcBrowser;
  GetDlgItem(IDC_STATIC_BROWSER)->GetClientRect(&rcBrowser);

  //Create the necessary objects needed to initialize CEF 
  CefMainArgs cefMainArgs(theApp.m_hInstance);

  CefSettings cefSettings;
  CefBrowserSettings cefBrowserSettings;
  CefRefPtr<CefApp> cefApplication;
  CefWindowInfo cefWindowinfo;

  cefSettings.multi_threaded_message_loop = true; //needed for MFC projects (unless we want to implement custom message-loop)
  cefWindowinfo.SetAsChild(GetDlgItem(IDC_STATIC_BROWSER)->GetSafeHwnd(), rcBrowser);

  //   CefRefPtr<CefClient> client(new ClientHandler());
  //   m_Handler = (ClientHandler*)client.get();

  //Initialize CEF 
  bool bSucceeded = CefInitialize(cefMainArgs, cefSettings, cefApplication, nullptr);
  CefRefPtr<CefRequestContext> request_context;

  CefRefPtr<CefClient> client;
  if (bSucceeded)
  {
    CefBrowserHost::CreateBrowser(cefWindowinfo, client, L"http://www.google.com/", cefBrowserSettings, request_context);
  }  
  :
}


2 comments :

  1. 도움 부탁드립니다.
    작성해 주신 예제를 따라서 테스트 하던 중 CefInitialize 부분에서 Exception이 발생하는데 원인을 모르겠습니다.
    제가 사용한 환경은 : CEF 3.3112.1659 / VisualStudio 2015(MFC) / MD(D) 환경입니다.

    도움 부탁드립니다.

    ReplyDelete
    Replies
    1. 스스로 해결하는 습관을 기릅시다.

      Delete