Полезная информация

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№130-06-2010 07:38:28

wellrus
Участник
 
Группа: Members
Зарегистрирован: 30-06-2010
Сообщений: 2
UA: Opera 10.5

Встраивание gecko в приложение c++

Здравствуйте.

Хочу написать кросплатформенное математическое приложение на Qt. Результат работы программы - MathML. Т.к. webkit (имеющийся в Qt) не поддерживает отображение mathml хочу использовать gecko.

Скачал с http://releases.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.2/source/
xulrunner-1.9.2.en-US.win32.sdk.zip
xulrunner-1.9.2.source.tar.bz2

И не могу разобраться что использовать. Нужно ли мне из исходников собирать SDK под mingw или сойдет уже скомпилированый? Поделитесь, пожалуйста, ссылкой на документацию с описанием интерфейсов - на сайте мозилы я просто заблудился и не могу найти нужной документации.

Отсутствует

 

№229-07-2010 12:11:29

wellrus
Участник
 
Группа: Members
Зарегистрирован: 30-06-2010
Сообщений: 2
UA: Opera 10.6

Re: Встраивание gecko в приложение c++

Написал программу:

Выделить код

Код:

#include "test.h"
#include <QApplication>

# ifndef XP_WIN 
    # define XP_WIN 
# endif

#include "nsComponentManagerUtils.h"
#include "nsEmbedCID.h"
#include "nsIBaseWindow.h"
#include "nsIWeakReference.h"
#include "nsIWebBrowser.h"
#include "nsIWebNavigation.h"
#include "nsEmbedAPI.h"
#include "nsEmbedString.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    test w;

    w.show();

    nsCOMPtr<nsILocalFile> mreAppDir;
    nsresult  rv;

    char* path;
    path = "C:\\xulrunner-sdk-1.9.2\\bin";

    rv = NS_NewNativeLocalFile(nsEmbedCString(path), TRUE, getter_AddRefs(mreAppDir));
    if(NS_FAILED(rv)) return 1; 

    rv = NS_InitEmbedding(mreAppDir, nsnull);
    if(NS_FAILED(rv)) return 1; 
    
    // ----- 2
    nsCOMPtr<nsIWebBrowser> mWebBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);
    if(NS_FAILED(rv)) return 1; 

    // ---- 3
    nsCOMPtr<nsIBaseWindow>  baseWindow(do_QueryInterface(mWebBrowser, &rv));
    if(NS_FAILED(rv)) return 1; 

    RECT rcLocation; 
    ::GetClientRect(w.winId(), &rcLocation);

    rv = baseWindow->InitWindow(w.winId(), nsnull, 0, 0, 
                                rcLocation.right - rcLocation.left, 
                                rcLocation.bottom - rcLocation.top);
    if(NS_FAILED(rv)) return 1; 

    rv = baseWindow->Create(); 
    if(NS_FAILED(rv)) return 1; 

    nsCOMPtr<nsIWebNavigation> 
    webNavigation(do_QueryInterface(mWebBrowser, &rv)); 
    if(NS_FAILED(rv)) return 1; 

    rv = webNavigation->LoadURI(NS_LITERAL_STRING("file://C:/Temp/browser.xml").get(), 
       nsIWebNavigation::LOAD_FLAGS_NONE, 
       nsnull, nsnull, nsnull);
    if(NS_FAILED(rv)) return 1; 

    rv = baseWindow->SetVisibility(PR_TRUE); 
    if(NS_FAILED(rv)) return 1; 
   
    return a.exec();
}

Запускается. Показывает страничку. Но при попытке прокрутить страничку вниз, программа вылетает. Ни как не могу разобраться в чем дело.
Можете помочь?

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]