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

576
Native/DenAgent/DenAgent.rc Normal file
View file

@ -0,0 +1,576 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#include "../Include/DecalVersion.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Neutral (Default) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEUD)
#ifdef _WIN32
LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_TRAYICON ICON "res\\idr_tray.ico"
#endif // Neutral (Default) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON "res\\DenAgent.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_DENAGENT_DIALOG DIALOGEX 0, 0, 265, 215
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Decal Agent"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "Close",IDOK,208,194,50,14
LTEXT "Choose the Plugins you'd like to run. Click update to download the latest Messages and MemLocs files from the web.",
IDC_STATIC,7,7,251,17
PUSHBUTTON "Refresh List",IDC_REFRESH,208,176,50,14
PUSHBUTTON "Add",IDC_ADDREMOVE,208,65,50,14
PUSHBUTTON "Update",IDC_UPDATE,208,30,50,14
PUSHBUTTON "Options",IDC_OPTIONS,208,48,50,14
LTEXT "messages",IDC_MESSAGES_TEXT,74,175,127,8
LTEXT "memlocs",IDC_MEMLOCS_TEXT,74,187,127,8
LTEXT "decalplugins",IDC_DECALPLUGINS_TEXT,74,200,127,8
LTEXT "Messages:",IDC_STATIC,7,175,35,8
LTEXT "Memory Locations:",IDC_STATIC,7,187,60,8
LTEXT "Decal Plugins List:",IDC_STATIC,7,200,59,8
CONTROL "List1",IDC_PLUGINS,"SysListView32",LVS_REPORT |
LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
LVS_NOCOLUMNHEADER | WS_TABSTOP,7,30,194,140,
WS_EX_CLIENTEDGE
PUSHBUTTON "Remove",IDC_DELETE,208,83,50,14
PUSHBUTTON "Export",IDC_EXPORT,208,128,50,16
END
IDD_ADDREMOVE DIALOGEX 0, 0, 301, 171
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Add/Remove Plugins"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "Close",IDOK,244,7,50,14
CONTROL "List1",IDC_PLUGINS,"SysListView32",LVS_REPORT |
LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_TABSTOP,7,7,230,
157,WS_EX_ACCEPTFILES | WS_EX_CLIENTEDGE
PUSHBUTTON "Visit Website",IDC_INSTALL,244,28,50,14
PUSHBUTTON "Upgrade",IDC_UPGRADE,245,150,50,14,NOT WS_VISIBLE |
WS_DISABLED
PUSHBUTTON "Browse",IDC_BROWSE,244,71,50,14
PUSHBUTTON "Refresh",IDC_REFRESH,244,50,50,14
END
IDD_DOWNLOAD DIALOG 0, 0, 203, 71
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Downloading Component"
FONT 8, "MS Sans Serif"
BEGIN
PUSHBUTTON "Cancel",IDC_STOPDOWNLOAD,146,50,50,14,WS_DISABLED
LTEXT "Status Text",IDC_STATUSTEXT,7,7,189,8
CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",0x0,7,18,
189,14
LTEXT "Status Text",IDC_CUSTOMSTATUS,7,35,189,8
END
IDD_CHANGEDIR DIALOG 0, 0, 236, 49
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Change Decal URL"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,179,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,179,28,50,14
EDITTEXT IDC_NEWURL,7,28,165,14,ES_AUTOHSCROLL
LTEXT "Type the full URL of the new Decal XML Directory",
IDC_STATIC,7,7,165,14,SS_CENTERIMAGE
END
IDD_OPTIONS DIALOGEX 0, 0, 271, 221
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Decal Options"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,155,200,50,14
PUSHBUTTON "Cancel",IDCANCEL,214,200,50,14
EDITTEXT IDC_BARALPHA,59,16,45,14,ES_CENTER | ES_AUTOHSCROLL |
ES_NUMBER | WS_GROUP
CONTROL "",IDC_BARALPHA_SPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,93,16,11,
14
EDITTEXT IDC_VIEWALPHA,59,31,45,14,ES_CENTER | ES_AUTOHSCROLL |
ES_NUMBER
CONTROL "Spin2",IDC_VIEWALPHA_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,93,31,11,14
GROUPBOX "View Options",IDC_STATIC,7,7,257,157
CTEXT "Bar Alpha",IDC_STATIC,17,20,35,8,SS_CENTERIMAGE | NOT
WS_GROUP
CTEXT "View Alpha",IDC_STATIC,19,34,35,8,SS_CENTERIMAGE | NOT
WS_GROUP
CTEXT "0 is Transparent - 255 is Opaque",IDC_STATIC,21,46,106,
9
CONTROL "Use Hardware Mode",IDC_BLENDINGGDIPLUS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,144,16,114,9
CONTROL "Multiple Views",IDC_VIEWMULTI,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,144,26,114,9
CONTROL "Adjust Bar for Radar",IDC_RADARYES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,144,36,114,9
CONTROL "Use Old Injection Method",IDC_OLDINJECT,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,144,46,114,10
GROUPBOX "Font Options",IDC_STATIC,14,66,244,28
CONTROL "Default",IDC_DEFAULT_FONT_RADIO,"Button",
BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,21,78,39,10
CONTROL "AC Client",IDC_CLIENT_FONT_RADIO,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,64,78,45,10
CONTROL "Custom",IDC_CUSTOM_FONT_RADIO,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,111,78,39,10
EDITTEXT IDC_CUSTOM_FONT_EDIT,151,76,98,12,ES_AUTOHSCROLL
GROUPBOX "Time Stamping",IDC_STATIC,14,95,244,27
CONTROL "Enabled",IDC_TIMESTAMPON,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,21,108,44,9,WS_EX_RIGHT | WS_EX_RTLREADING
LTEXT "Color",IDC_STATIC,71,108,19,11
COMBOBOX IDC_FORMATCLR,92,105,29,67,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Format",IDC_STATIC,123,108,25,9
EDITTEXT IDC_FORMATSTR,151,105,88,12,ES_AUTOHSCROLL
PUSHBUTTON "?",IDC_FORMATHELP,244,105,7,12
GROUPBOX "Client Patches",IDC_STATIC,14,122,139,35
CONTROL "Dual Log",IDC_DUALLOG,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,21,131,44,11
CONTROL "Windowed Mode",IDC_WINDOWED,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,21,143,71,11
CONTROL "No Movies",IDC_NOMOVIES,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,91,130,47,11
CONTROL "No Logos",IDC_NOLOGOS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,91,142,45,11
PUSHBUTTON "?",IDC_PATCHHELP,139,135,10,15
GROUPBOX "Decal Bar Docking Position",IDC_STATIC,155,122,103,35
COMBOBOX IDC_DOCKPOS,159,135,92,43,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
GROUPBOX "Decal Update URL",IDC_STATIC,7,166,257,28
LTEXT "http://decal.acdev.org",IDC_PLUGINDIR,14,178,169,8,
SS_CENTERIMAGE
PUSHBUTTON "Change",IDC_CHANGE_DIR,208,175,50,14
CONTROL "Start on Bootup",IDC_CHECK_AUTOSTART,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,14,202,63,12
PUSHBUTTON "Reset Bar Position",IDC_BTN_RESET,81,200,68,14
END
IDD_DOWNLOADER DIALOG 0, 0, 202, 86
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Downloading Components"
FONT 8, "MS Sans Serif"
BEGIN
PUSHBUTTON "Cancel",IDC_STOPDOWNLOAD,145,65,50,14
LTEXT "Status Text",IDC_STATUSTEXT,5,5,189,8
CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",0x0,5,16,
189,14
LTEXT "Status Text",IDC_CUSTOMSTATUS,5,33,189,8
CONTROL "Progress1",IDC_PROGRESSTOTAL,"msctls_progress32",0x0,5,
45,189,14
LTEXT "Dowloading File 1 of 3",IDC_STATUSTOTAL,55,67,80,8
LTEXT "Total Progress:",IDC_STATUST,5,67,50,8
END
IDD_EXPORT DIALOGEX 0, 0, 231, 186
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Export Decal List"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Export",IDC_STATIC,7,7,140,26
CONTROL "Enabled",IDC_CHKENABLED,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,17,17,41,8
CONTROL "Location",IDC_CHKLOC,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,61,17,41,8
CONTROL "CLSID",IDC_CHKCLSID,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,106,17,34,8
PUSHBUTTON "&Export",IDC_BTNEXPORT,151,11,69,20
EDITTEXT IDC_EDITEXPORT,7,37,217,142,ES_MULTILINE |
ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN |
WS_VSCROLL | WS_HSCROLL
END
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION DECAL_MAJOR, DECAL_MINOR, DECAL_BUGFIX, DECAL_RELEASE
PRODUCTVERSION DECAL_MAJOR, DECAL_MINOR, DECAL_BUGFIX, DECAL_RELEASE
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "DenAgent is the program that manages Decal settings"
VALUE "FileDescription", "DenAgent MFC Application"
VALUE "FileVersion", DECAL_VERSION_STRING
VALUE "InternalName", "DenAgent"
VALUE "LegalCopyright", "Copyright (C) 2000, 2001"
VALUE "OriginalFilename", "DenAgent.EXE"
VALUE "ProductName", "DenAgent Application"
VALUE "ProductVersion", DECAL_VERSION_STRING
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_DENAGENT_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 258
VERTGUIDE, 67
VERTGUIDE, 74
VERTGUIDE, 201
VERTGUIDE, 208
TOPMARGIN, 7
BOTTOMMARGIN, 208
HORZGUIDE, 24
HORZGUIDE, 30
HORZGUIDE, 44
HORZGUIDE, 48
HORZGUIDE, 90
HORZGUIDE, 113
HORZGUIDE, 144
HORZGUIDE, 170
HORZGUIDE, 175
END
IDD_ADDREMOVE, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 294
VERTGUIDE, 237
VERTGUIDE, 244
TOPMARGIN, 7
BOTTOMMARGIN, 164
HORZGUIDE, 21
HORZGUIDE, 28
END
IDD_DOWNLOAD, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 196
TOPMARGIN, 7
BOTTOMMARGIN, 64
HORZGUIDE, 43
HORZGUIDE, 50
END
IDD_CHANGEDIR, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 229
VERTGUIDE, 172
VERTGUIDE, 179
TOPMARGIN, 7
BOTTOMMARGIN, 42
HORZGUIDE, 21
HORZGUIDE, 28
END
IDD_OPTIONS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 264
VERTGUIDE, 14
VERTGUIDE, 258
TOPMARGIN, 7
BOTTOMMARGIN, 214
END
IDD_DOWNLOADER, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 195
TOPMARGIN, 7
BOTTOMMARGIN, 79
END
IDD_EXPORT, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 224
TOPMARGIN, 7
BOTTOMMARGIN, 179
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_POPUPS MENU
BEGIN
POPUP "SYSTRAY"
BEGIN
MENUITEM "Configure", ID_SYSTRAY_CONFIGURE
MENUITEM "Exit", ID_SYSTRAY_EXIT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Toolbar
//
IDR_VERSION_STATES TOOLBAR 21, 20
BEGIN
BUTTON IDC_STATIC
BUTTON IDC_STATIC
BUTTON IDC_STATIC
BUTTON IDC_STATIC
END
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDR_VERSION_STATES BITMAP "res\\version_.bmp"
IDB_IMAGES BITMAP "Images.bmp"
IDB_BITMAP1 BITMAP "res\\bitmap1.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog Info
//
IDD_OPTIONS DLGINIT
BEGIN
IDC_FORMATCLR, 0x403, 2, 0
0x002d,
IDC_FORMATCLR, 0x403, 2, 0
0x0030,
IDC_FORMATCLR, 0x403, 2, 0
0x0031,
IDC_FORMATCLR, 0x403, 2, 0
0x0032,
IDC_FORMATCLR, 0x403, 2, 0
0x0033,
IDC_FORMATCLR, 0x403, 2, 0
0x0034,
IDC_FORMATCLR, 0x403, 2, 0
0x0035,
IDC_FORMATCLR, 0x403, 2, 0
0x0036,
IDC_FORMATCLR, 0x403, 2, 0
0x0037,
IDC_FORMATCLR, 0x403, 2, 0
0x0038,
IDC_FORMATCLR, 0x403, 2, 0
0x0039,
IDC_FORMATCLR, 0x403, 3, 0
0x3031, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3131, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3231, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3331, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3431, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3531, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3631, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3731, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3831, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3931, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3032, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3132, "\000"
IDC_FORMATCLR, 0x403, 3, 0
0x3232, "\000"
IDC_DOCKPOS, 0x403, 4, 0
0x6f54, 0x0070,
IDC_DOCKPOS, 0x403, 5, 0
0x654c, 0x7466, "\000"
IDC_DOCKPOS, 0x403, 6, 0
0x6952, 0x6867, 0x0074,
0
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (Canada) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENC)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDB_GROUPS BITMAP "res\\groups.bmp"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
"#ifdef _WIN32\r\n"
"LANGUAGE 9, 1\r\n"
"#pragma code_page(1252)\r\n"
"#endif //_WIN32\r\n"
"#include ""res\\DenAgent.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
"#include ""afxres.rc"" // Standard components\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// REGISTRY
//
IDR_DENAGENT REGISTRY "DenAgent.rgs"
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDE_NOCLIENTEXE "Could not locate client.exe"
IDE_NOCLIENTVER "Could not extract version information from client.exe"
IDS_VERSIONTEMPLATE "%1!d!.%2!d!.%3!d!.%4!d!"
IDE_NOXMLDOC "Could not load the xml document: %1 - it may be missing or malformed."
IDE_NOXMLVER "Could not locate the version in the XML document.\r\n(xml doc=%1)"
IDE_XMLCLIENTVERSIONMISMATCH
"The client version does not match the XML version, this may cause some plugins to malfunction.\r\n(xmldoc=%1 client version=%2 xml version=%3)"
IDE_UPDATETEXT "\r\n\r\nUpdating your XML files will correct this problem. Would you like to update now?"
END
#endif // English (Canada) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif //_WIN32
#include "res\DenAgent.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED