C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 강좌/문서
C++Builder Programming Tutorial&Docments
[250] C++Builder에 최신 WebView2 COM 심어 일반 어플리케이션 인양 꾸미기.
김태선 [cppbuilder] 22 읽음    2026-04-03 21:02
요즘 앱의 대세는 웹앱이라고 할수 있습니다.
워낙 강력한 웹 브라우저 기능 때문에, 웹에서 앱을 구현하면
모든 종류의 기기에서 다 동작하기 때문에, 대세가 되었다고 봅니다.
그기다 옛날처럼 부분적인 기능이 아니라, 백엔드 까지 설정하면 거의 못하는 일이 없다고 볼 수 있습니다.

그런데 웹으로 앱을 만들면 아무래도 티가 많이 나게 마련입니다.
특히 요즘 웹브라우저는 주소줄이라던지 웹 컨트롤 아이콘을 다 숨기지 못하게 막고 있어서, 더 티가 납니다.
그래서 릴리즈를 위해 포장할 때
빌더로 외관 창을 만들고
웹앱이 표현될 윈도 컨트롤을 화면에 놓은 뒤, 윈도우 핸들을 통해 웹 브라우저 COM 객체와 매칭 시켜 주면
외관은 일반 어플리케이션 처럼 됩니다.

윈도 10, 11에서 최신  웹브라우저 객체는 WebView2 입니다.
이 COM을 제어하기 위해서는 헤더파일을 컴파일 해야 하는데, 최신 C++ 언어 규약을 사용하므로,
최신 C++Builder가 아니면 컴파일 할수 조차 없습니다.
그기다 최신 C++Builder는 유료에 좀 악명이 있어서..,

그냥 VC++ 최신버전인 VS 2026 Community 버전을 설치하고
컴파일해서 WebView2 COM을 이용할 수 있는 DLL을 얻었습니다.
저는 고전명작 빌더6에 붙여서 사용할 것이기 때문에, 32비트로 컴파일 했습니다.


extern "C" __declspec(dllexport) void __stdcall CreateYuriWebView2(HWND hWnd, wchar_t* url)

VC++ DLL에서는 이 함수 하나가 있습니다.
첨부한 파일에 WebView.dll이 직접 만든 것이고 위 함수가 노출 되어 있습니다.
WebView2Loader.dll은 자동 제공되는 따라오는 파일입니다.

빌더에서는 다음과 같이 쓸수 있습니다.
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// VC++ 2026으로 만든 x86 DLL 호출

// 1. 함수 포인터 타입 정의 (Calling Convention __stdcall 기준)
typedef void (__stdcall *PCreateYuriWebView2)(HWND, wchar_t *);

//  DLL 핸들과 함수 포인터
HINSTANCE hWebViewDll = NULL;
PCreateYuriWebView2 CreateYuriWebView2 = NULL;

void    TForm1::CallWebView2()
{
    hWebViewDll = LoadLibrary("WebView.dll");

    if (hWebViewDll) {
        CreateYuriWebView2 = (PCreateYuriWebView2)GetProcAddress(hWebViewDll, "CreateYuriWebView2");

        if (CreateYuriWebView2) {
            WideString url = L"https://dongbang7.github.io/PangPang/"; // 여기서 자신이 필요한 주소를 입력하면 됩니다.
            CreateYuriWebView2(Panel1->Handle, url.c_bstr());
        } else {
            ShowMessage("DLL에서 CreateYuriWebView2 함수를 찾을 수 없습니다.");
            FreeLibrary(hWebViewDll);
        }
    } else {
        ShowMessage("WebView.dll 파일을 찾을 수 없습니다.");
    }
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Timer1->Enabled = false;
    CallWebView2();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    ;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    if (hWebViewDll)
        FreeLibrary(hWebViewDll);

}
//---------------------------------------------------------------------------

화면에 TPanel 하나와 TTimer 하나 떨어뜨리고 다음과 같이 코딩하면 됩니다. Timer1->Interval = 100;
정도면 됩니다.

종료시는 그냥 DLL만 해제하시면 됩니다.
WebView2가 물고 있던 구동 프로세스 및 메모리는
TPanel의 핸들이 윈도 OS로 반환 되는 즉시  사라집니다.
그래서 따로 메모리 해제 같은 작업을 할 필요가 없습니다.
구동 프로세스는 작업관리자에서 확인 해 봤는데, 빌더 프로그램 종료시 같이 사라지는 것을 확인했습니다.

첨부한 예제는 필자가 깃허브 PangPang 레파지토리에 올린
웹앱 게임입니다.
Vue3 프레임워크에  TypeScript을 이용해 프로그램 했습니다.
명백히 웹앱이지만, 첨부한 프로그램을 실행해 보면 아시겠지만 일반 앱과 구분이 안됩니다.
윈도에서는 이렇게 웬앱임을 숨길 수 있습니다만,
다른 플렛폼에서는 그냥
그냥 깃허브 배포 주소로
https://dongbang7.github.io/PangPang/
로 이용하는게 낫겠죠.

첨부한 *,DLL 파일들은 각자 원하는 URL 주소만 함수 호출시 인자로 넣으면,
원하는 웹을 로딩할 수 있습니다.
빌더6에서도 붙으니, 어떤 버전도 다 이용할 수 있습니다.


요즘 강력한 웹 프로그래밍 환경 때문에 프로그램을 수월하게 만들 수 있는데,
C++빌더에서 같은 게임을 만들려면 생노가다를 한참 해야 합니다.
그래서 요즘은 여러가지 언어를 섞어서 쓸 수 밖에 없습니다.





+ -

관련 글 리스트
250 C++Builder에 최신 WebView2 COM 심어 일반 어플리케이션 인양 꾸미기. 김태선 22 2026/04/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.