お世話になります。
初めて質問させていただきます。
タグにwxWidgetsがありませんでしたので、C++とさせていただいております。
wxWidgetsでの開発が初心者のため、試行錯誤しております。
###前提・実現したいこと
AcrobatSDKプラグインからWxWidgetsを呼び出してウィンドウを表示します。
ウィンドウ内をさらにwxSashLayoutWindowで分割して、右ペインのウィンドウにファイルオープンダイアログで
選択されたPDFを表示します。
PDFを表示する方法として、ActiveX(wxAutomationObject、wxActiveXContainer)を使用して
AcroPDF.dllを呼び出します。
###発生している問題・エラーメッセージ
ファイルオープンダイアログでPDFを選択しても、AcroPDF.dllのLoadFileメソッドでなにかしらの
エラーが発生してしまい、失敗します。
エラーの取得方法も分からないため、原因追究もできていない状況です。
ソースコードの不備、エラーの取得方法をご存じの方がおりましたら、ご教示いただけませんでしょうか。
###ソースコード
●MyFrame.cpp
//ファイルオープン時 void MyFrame::OnFileOpen(wxCommandEvent& WXUNUSED(event)) { wxMediaCtrl* mymediactrl = new wxMediaCtrl(m_leftBottomWindow, wxID_ANY, wxT("C:\\test.pdf"), wxDefaultPosition, wxDefaultSize, 0, wxT("wxPDFMediaBackend")); }
※m_leftBottomWindowはPDFを表示するウィンドウです。
●wxPDFMediaBackend.hファイル
#pragma once #include "wx/mediactrl.h" // wxMediaBackendCommonBase #include "wx/msw/ole/activex.h" // wxActiveXContainer #include "wx/msw/ole/automtn.h" // wxAutomationObject #include "wx/variant.h" const IID DIID__DPdf = {0x3B813CE7,0x7C10,0x4F84,{0xAD,0x06,0x9D,0xF7,0x6D,0x97,0xA9,0xAA}}; const IID DIID__DPdfEvents = {0xE790E1D1,0x9DE8,0x4853,{0x8A,0xC6,0x93,0x3D,0x4F,0xD9,0xC9,0x27}}; const CLSID CLSID_Pdf = {0xCA8A9780,0x280D,0x11CF,{0xA2,0x4D,0x44,0x45,0x53,0x54,0x00,0x00}}; class WXDLLIMPEXP_MEDIA wxPDFMediaBackend : public wxMediaBackendCommonBase { public: wxPDFMediaBackend() : m_pAX(NULL) {} virtual ~wxPDFMediaBackend() { if(m_pAX) { m_pAX->DissociateHandle(); delete m_pAX; } } virtual bool CreateControl(wxControl* ctrl, wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { IDispatch* pDispatch=NULL; if( ::CoCreateInstance(CLSID_Pdf, NULL, CLSCTX_INPROC_SERVER, DIID__DPdf, (void**)&pDispatch) != 0 ){ return false; } m_PDF.SetDispatchPtr(pDispatch); // wxAutomationObject will release itself if ( !ctrl->wxControl::Create(parent, id, pos, size, (style & ~wxBORDER_MASK) | wxBORDER_NONE, validator, name) ){ return false; } m_ctrl = wxStaticCast(ctrl, wxMediaCtrl); m_pAX = new wxActiveXContainer(ctrl, DIID__DPdf, pDispatch); wxPDFMediaBackend::ShowPlayerControls(wxMEDIACTRLPLAYERCONTROLS_NONE); return true; } virtual bool Load(const wxString& fileName) { if(m_PDF.CallMethod(wxT("LoadFile"), fileName).GetBool()) //ここで必ずfalseが返ってきてしまう { m_PDF.CallMethod(wxT("setCurrentPage"), wxVariant((long)0)); NotifyMovieLoaded(); // initial refresh wxSizeEvent event; m_pAX->OnSize(event); return true; } return false; } wxActiveXContainer* m_pAX; wxAutomationObject m_PDF; wxDECLARE_DYNAMIC_CLASS(wxPDFMediaBackend); }; wxIMPLEMENT_DYNAMIC_CLASS(wxPDFMediaBackend, wxMediaBackend);
※wxWidgetsのリファレンスページで記載されていたサンプルを流用しています。
###補足情報(言語/FW/ツール等のバージョンなど)
言語:C++
Acrobatのバージョン:11
コンパイラ:VisualStudio 2010
情報の不備などがございましたら、ご指摘ください。
お手数をおかけいたしますが、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。