Как в Borland C++ Builder 6 разместить код в заголовочном файле(например, WebBrowserEventHandler.h) и как затем подключить его к проекту

Гобелен - кликните для возврата на главную

Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.

Так почему бы не начать использовать обход блокировки YouTube при том что техническая возможность используя расширение nikolaevevge для браузера Mozilla Firefox уже появилась, а объем полезной(и не очень) информации на видеохостинге YouTube, по мнению некоторых диванных экспертов, меньше не стал.

Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Владимира Вольфовича Жириновского.

Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.

На очередном конкурсе танцев, школьница отлично выступила.

Что использовать вместо Юбуст

Вот та самая информация: программа для продвижения канала YouTube, эта информация выложена уже несколько лет, при этом просмотров не много, а метод который описан в данном видео действительно помогает продвигать видео в YouTube.

Начал разбираться с информацией которая находится в HTTPS клиентском запросе рукопожатия.

Обратите внимание! Объект изображённый на гобилене может отличаться от общепринятого вида описанного объекта. Тут дело в том что художник видит именно так!

104 549 руб.

Описание товара

Вы пишите " В заголовочном файле (например, WebBrowserEventHandler.h)", как именно это делать в IDE Borland C++ Buildet 6 и нужно ли как то затем подключать написанное к проекту.

Подключение обработчика событий WebBrowser в Borland C++ Builder 6

Создание нового заголовочного файла

  • В IDE нажмите File → New → Header File (или Ctrl+N)
  • Сохраните файл как WebBrowserEventHandler.h (File → Save)
  • Вставьте код класса (из предыдущего ответа) в этот файл

Подключение к проекту

Откройте ваш модуль формы (например, Unit1.cpp)

В самом верху, после других #include, добавьте:

C++
    
#include "WebBrowserEventHandler.h"

  

Полная пошаговая реализация:

Создаем класс обработчика:

C++
    
// WebBrowserEventHandler.h
#ifndef WEBBROWSEREVENTHANDLER_H
#define WEBBROWSEREVENTHANDLER_H
      
#include <ocidl.h>  // Для IDispatch
      
class TWebBrowserEventHandler : public TObject, public IDispatch
{
public:
    // IDispatch methods
    STDMETHOD(GetTypeInfoCount)(unsigned int* pctinfo) { return E_NOTIMPL; }
    STDMETHOD(GetTypeInfo)(unsigned int iTInfo, LCID lcid, ITypeInfo** ppTInfo) { return E_NOTIMPL; }
    STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR* rgszNames, unsigned int cNames, LCID lcid, DISPID* rgDispId);
    STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
                      DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr);
    
    // IUnknown methods
    STDMETHOD_(ULONG, AddRef)() { return 1; }
    STDMETHOD_(ULONG, Release)() { return 1; }
    STDMETHOD(QueryInterface)(REFIID riid, void** ppv);
};
      
#endif

  

Реализация методов (в Unit1.cpp)

C++
    
// Добавьте после #include, но до кода формы
STDMETHODIMP TWebBrowserEventHandler::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, 
    unsigned int cNames, LCID lcid, DISPID* rgDispId)
{
    if (cNames == 1 && wcscmp(rgszNames[0], L"OnButtonClick") == 0)
    {
        *rgDispId = 1;
        return S_OK;
    }
    return DISP_E_UNKNOWNNAME;
}
      
STDMETHODIMP TWebBrowserEventHandler::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
    DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr)
{
    if (dispIdMember == 1) // OnButtonClick
    {
        if (pDispParams->cArgs > 0 && pDispParams->rgvarg[0].vt == VT_BSTR)
        {
            WideString param = pDispParams->rgvarg[0].bstrVal;
            Form1->Label1->Caption = "Получен параметр: " + param;
        }
        return S_OK;
    }
    return DISP_E_MEMBERNOTFOUND;
}
      
STDMETHODIMP TWebBrowserEventHandler::QueryInterface(REFIID riid, void** ppv)
{
    if (riid == IID_IDispatch || riid == IID_IUnknown)
    {
        *ppv = static_cast<IDispatch*>(this);
        return S_OK;
    }
    return E_NOINTERFACE;
}

  

Инициализация в форме:

В заголовочном файле формы (Unit1.h):

C++
    
private: // Добавьте в private-секцию класса формы
    TWebBrowserEventHandler* handler;
      
    В обработчике FormCreate:
      
cpp
      
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    handler = new TWebBrowserEventHandler();
    CppWebBrowser1->RegisterAsBrowser = true;
    
    IWebBrowser2* wb = CppWebBrowser1->DefaultInterface;
    IDispatchPtr docDispatch = wb->GetDocument();
    
    if (docDispatch != NULL)
    {
        IDispatchEx* docEx;
        if (docDispatch->QueryInterface(IID_IDispatchEx, (void**)&docEx) == S_OK)
        {
            VARIANT var;
            VariantInit(&var);
            var.vt = VT_DISPATCH;
            var.pdispVal = handler;
            docEx->SetPropertyByName(L"external", &var);
            docEx->Release();
        }
    }
}

  

В деструкторе формы

C++
    
__fastcall TForm1::~TForm1()
{
    delete handler;
}

  

Настройка проекта

Убедитесь, что в настройках проекта (Project → Options):

  • в разделе "Directories/Conditionals" указаны пути к Windows SDK;
  • в "Packages" подключен "Internet Components".

Для работы COM необходимо инициализировать библиотеку

C++
    
// В начале WinMain (в файле проекта)
CoInitialize(NULL);
// В конце WinMain
CoUninitialize();

  

Важно