Как связать и получить доступ к JavaScript в bho dll? - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть BHO (объект помощника браузера) для интеллектуального анализа данных. Множество низкоуровневых манипуляций с DOM делегировано javascript. До сих пор мое приложение брало его из каталога установки приложения; но теперь из-за некоторых требований клиента, я должен связать JS в самой библиотеке BHO.

Теперь моя проблема в том, что я не понял, как добавить JS-файл в мой файл ресурсов (a.k.a rc-файл). Я попытался добавить файл HTML (который поддерживается в Visual Studio 2008 IDE). Но я не могу найти ресурс HTML, когда я делаю что-то вроде этого (g_hInstance - это HINSTANCE моего BHO):

    if(!g_hInstance)
    {
        ::MessageBox(NULL, L"Fail 0", L"", MB_OK);
        return;
    }

    HRSRC   hRsrc = FindResource( g_hInstance, MAKEINTRESOURCE(IDR_JS), RT_HTML );
    if(!hRsrc)
    {
        ::MessageBox(NULL, L"no point", L"", MB_OK);
        return;
    }
    DWORD   dwFSz = SizeofResource( g_hInstance, hRsrc );
    HGLOBAL hHtml = LoadResource( g_hInstance, hRsrc );
    LPVOID  pHtml = LockResource( hHtml );
    HANDLE  hFHtm = CreateFile( L"c:\\temp\\Test1.htm", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL );
    DWORD dwWr;
    WriteFile( hFHtm, pHtml, dwFSz, &dwWr, NULL );
    CloseHandle( hFHtm );
    UnlockResource( hHtml );
    ShellExecute( NULL, L"open", L"c:\\temp\\Test1.htm", NULL, NULL, 0 );

My questions are:

  1. Можно ли добавить javascript в файл ресурсов Visual C ++ (т. Е. В любой Dll)? Если да, то как добавить и получить к нему доступ.
  2. Если html разрешен в .rc файле, то почему FindResource( g_hInstance, MAKEINTRESOURCE(IDR_JS), RT_HTML ); всегда дает мне NULL?

Спасибо

1 Ответ

1 голос
/ 10 февраля 2012

Получил это работает. Шаги:

  1. Щелкните правой кнопкой мыши ресурс вашего приложения и выберите Add Resource...
  2. Открывает красивый диалог. Там выбирают custom кнопку ресурса.
  3. Укажите простое и интуитивно понятное имя, например, RT_MYSCRIPT
  4. Откроется редактор. Скопируйте и вставьте туда свой код скрипта.
  5. Создайте свое решение, и все готово.

Code to access your resource

void CTest::ReadResource()
{
    if (NULL != g_hInstance) // g_hInstance is HINSTANCE of my DLL
    {
        HRSRC hRes = FindResource(g_hInstance, MAKEINTRESOURCE(IDR_SCRIPT), _T("RT_MYSCRIPT"));
        if (NULL != hRes)
        {
            HGLOBAL hgbl = LoadResource(g_hInstance, hRes);

            void *  pScript = LockResource(hgbl);
            UINT32  cbScript = SizeofResource(g_hInstance, hRes);

            if(pScript)
            {
                // Do something
            }

            // pScript now points to the contents of your your .script file
            // and cbScript is its size in bytes

        }else
        {
            ::MessageBox(NULL, L"Failed", L"", MB_OK);
        }

        /*
            Don't free the library until you are done. And do it only if you
            are loading the script from a resource dll or some other external 
            source !! Note: Also do a good amount of exception checking in your code!!
        */
        // FreeLibrary(hMod);
    }
}

Примечание:

Моя проблема заключалась в том, чтобы включить и получить доступ к моим файлам javascript из DLL. Который я решил. Проблема HTML все еще существует, но не связана с моей проблемой. Я сообщу об этом, если у меня будет возможность использовать его в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...