Initial commit: Complete open-source Decal rebuild

All 5 phases of the open-source Decal rebuild:

Phase 1: 14 decompiled .NET projects (Interop.*, Adapter, FileService, DecalUtil)
Phase 2: 10 native DLLs rewritten as C# COM servers with matching GUIDs
  - DecalDat, DHS, SpellFilter, DecalInput, DecalNet, DecalFilters
  - Decal.Core, DecalControls, DecalRender, D3DService
Phase 3: C++ shims for Inject.DLL (D3D9 hooking) and LauncherHook.DLL
Phase 4: DenAgent WinForms tray application
Phase 5: WiX installer and build script

25 C# projects building with 0 errors.
Native C++ projects require VS 2022 + Windows SDK (x86).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
erik 2026-02-08 18:27:56 +01:00
commit d1442e3747
1382 changed files with 170725 additions and 0 deletions

View file

@ -0,0 +1,125 @@
#include "stdafx.h"
#include "DownloadDlg.h"
#include "BindStatusCallback.h"
#include <shlwapi.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
STDMETHODIMP CCallback::OnProgress ( ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR wszStatusText )
{
static CString sIEStatusMsg;
static TCHAR szCustomStatusMsg [256];
static TCHAR szAmtDownloaded [256], szTotalSize [256];
UNREFERENCED_PARAMETER(ulStatusCode);
if ( 0 != g_fAbortDownload )
return E_ABORT;
if ( m_bUseTimeout && CTime::GetCurrentTime() > m_timeToStop )
return E_ABORT;
if ( NULL != wszStatusText )
sIEStatusMsg = wszStatusText;
else
sIEStatusMsg.Empty();
StrFormatByteSize ( ulProgress, szAmtDownloaded, 256 );
StrFormatByteSize ( ulProgressMax, szTotalSize, 256 );
if ( 0 != ulProgressMax )
wsprintf ( szCustomStatusMsg, _T("Downloaded %s of %s"), szAmtDownloaded, szTotalSize );
else
wsprintf ( szCustomStatusMsg, _T("Downloaded %s (total size unknown)"), szAmtDownloaded );
if ( 0 != ulProgressMax )
m_pDlg->ProgressUpdate ( sIEStatusMsg, szCustomStatusMsg, int( 100.0 * ulProgress / ulProgressMax) );
else
m_pDlg->ProgressUpdate ( sIEStatusMsg, szCustomStatusMsg, 0 );
return(NOERROR);
}
CCallback::CCallback()
{
m_pbinding = NULL;
m_pstm = NULL;
m_cRef = 1;
m_cbOld = 0;
m_bUseTimeout = FALSE;
m_pDlg = NULL;
}
CCallback::~CCallback()
{
if (m_pstm)
m_pstm->Release();
if (m_pbinding)
m_pbinding->Release();
}
STDMETHODIMP CCallback::QueryInterface(REFIID riid, void** ppv)
{
*ppv = NULL;
if (riid==IID_IUnknown || riid==IID_IBindStatusCallback)
{
*ppv = this;
AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
STDMETHODIMP CCallback::OnStartBinding(DWORD grfBSCOption, IBinding* pbinding)
{
if(NULL != pbinding)
{
pbinding->AddRef();
m_pbinding = pbinding;
}
return(NOERROR);
}
STDMETHODIMP CCallback::OnStopBinding(HRESULT hrStatus, LPCWSTR pszError)
{
if(NULL != m_pbinding)
{
m_pbinding->Release();
m_pbinding = NULL;
}
return(NOERROR);
}
STDMETHODIMP CCallback::GetPriority(LONG* pnPriority)
{
return(NOERROR);
}
STDMETHODIMP CCallback::OnLowResource(DWORD dwReserved)
{
return(NOERROR);
}
STDMETHODIMP CCallback::GetBindInfo(DWORD* pgrfBINDF, BINDINFO* pbindInfo)
{
return (NOERROR);
}
STDMETHODIMP CCallback::OnDataAvailable(DWORD grfBSCF,
DWORD dwSize, FORMATETC* pfmtetc, STGMEDIUM* pstgmed)
{
return(NOERROR);
}
STDMETHODIMP CCallback::OnObjectAvailable(REFIID riid, IUnknown* punk)
{
return(NOERROR);
}