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,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>Decal.Interop.D3DService</AssemblyName>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,10 @@
using System.Runtime.InteropServices;
namespace Decal.Interop.D3DService;
[ComImport]
[Guid("68753CB9-267F-482F-9F6B-A932A70E0057")]
[CoClass(typeof(CD3DObjClass))]
public interface CD3DObj : ID3DObj
{
}

View file

@ -0,0 +1,252 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.D3DService;
[ComImport]
[ClassInterface(ClassInterfaceType.None)]
[SuppressUnmanagedCodeSecurity]
[Guid("81E79859-2783-4B9A-ADC4-308073F5BB3F")]
public class CD3DObjClass : ID3DObj, CD3DObj
{
[DispId(8)]
public virtual extern float scaleX
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
[param: In]
set;
}
[DispId(9)]
public virtual extern float scaleY
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
[param: In]
set;
}
[DispId(10)]
public virtual extern float scaleZ
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(10)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(10)]
[param: In]
set;
}
[DispId(11)]
public virtual extern bool autoscale
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(11)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(11)]
[param: In]
set;
}
[DispId(12)]
public virtual extern int color
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(12)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(12)]
[param: In]
set;
}
[DispId(13)]
public virtual extern int color2
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(13)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(13)]
[param: In]
set;
}
[DispId(14)]
public virtual extern float pFade
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(14)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(14)]
[param: In]
set;
}
[DispId(17)]
public virtual extern float pBounce
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(17)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(17)]
[param: In]
set;
}
[DispId(18)]
public virtual extern float hBounce
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(18)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(18)]
[param: In]
set;
}
[DispId(19)]
public virtual extern float pOrbit
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(19)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(19)]
[param: In]
set;
}
[DispId(20)]
public virtual extern float rOrbit
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(20)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(20)]
[param: In]
set;
}
[DispId(25)]
public virtual extern float pSpin
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(25)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(25)]
[param: In]
set;
}
[DispId(26)]
public virtual extern bool visible
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(26)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(26)]
[param: In]
set;
}
[DispId(27)]
public virtual extern bool drawBackface
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(27)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(27)]
[param: In]
set;
}
[DispId(30)]
public virtual extern float AnimationPhaseOffset
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(30)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(30)]
[param: In]
set;
}
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
public virtual extern void SetIcon([In] int icon);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
public virtual extern void SetIconFromResource([In] int hmodule, [In] int idr);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
public virtual extern void SetIconFromFile([In][MarshalAs(UnmanagedType.BStr)] string bstrFilename);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
public virtual extern void SetShape([In] eShape shape);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
public virtual extern void SetShapeFromResource([In] int hmodule, [In] int idr);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
public virtual extern void SetShapeFromFile([In][MarshalAs(UnmanagedType.BStr)] string bstrFilename);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(28)]
public virtual extern void Set2DText([In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(29)]
public virtual extern void Set3DText([In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
public virtual extern void SetScale([In] float scale);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(15)]
public virtual extern void AnchorToObject([In] int guid, [In] float fractHeight, [In] float dx, [In] float dy, [In] float dz);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(16)]
public virtual extern void AnchorToCoords([In] float lat, [In] float lng, [In] float alt);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(21)]
public virtual extern void OrientToCamera([In] bool fTilt = false);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(22)]
public virtual extern void OrientToPlayer([In] bool fTilt = false);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(23)]
public virtual extern void OrientToObject([In] int guid, [In] float fractHeight, [In] bool fTilt = false);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(24)]
public virtual extern void OrientToCoords([In] float lat, [In] float lng, [In] float alt, [In] bool fTilt = false);
}

View file

@ -0,0 +1,10 @@
using System.Runtime.InteropServices;
namespace Decal.Interop.D3DService;
[ComImport]
[Guid("0BB41679-549E-4916-8B70-6A7B3CA1A31C")]
[CoClass(typeof(CServiceClass))]
public interface CService : ID3DService
{
}

View file

@ -0,0 +1,92 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.D3DService;
[ComImport]
[SuppressUnmanagedCodeSecurity]
[ClassInterface(ClassInterfaceType.None)]
[Guid("F0CC07A0-2C89-4FA4-9356-714665BC2F8B")]
[TypeLibType(2)]
public class CServiceClass : ID3DService, CService
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj NewD3DObj();
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj PointToObject([In] int guid, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj PointToCoords([In] float lat, [In] float lng, [In] float alt, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkObjectWithIcon([In] int guid, [In] int icon);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkObjectWithIconFromFile([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkObjectWithShape([In] int guid, [In] eShape shape, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkObjectWithShapeFromFile([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(13)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkObjectWith2DText([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(14)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkObjectWith3DText([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkCoordsWithIcon([In] float lat, [In] float lng, [In] float alt, [In] int icon);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkCoordsWithIconFromFile([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(10)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkCoordsWithShape([In] float lat, [In] float lng, [In] float alt, [In] eShape shape, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(11)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkCoordsWithShapeFromFile([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(15)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkCoordsWith2DText([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(16)]
[return: MarshalAs(UnmanagedType.Interface)]
public virtual extern CD3DObj MarkCoordsWith3DText([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(12)]
public virtual extern void TraceOneFrame();
}

View file

@ -0,0 +1,252 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.D3DService;
[ComImport]
[Guid("68753CB9-267F-482F-9F6B-A932A70E0057")]
[SuppressUnmanagedCodeSecurity]
[TypeLibType(4160)]
public interface ID3DObj
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
void SetIcon([In] int icon);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
void SetIconFromResource([In] int hmodule, [In] int idr);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
void SetIconFromFile([In][MarshalAs(UnmanagedType.BStr)] string bstrFilename);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
void SetShape([In] eShape shape);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
void SetShapeFromResource([In] int hmodule, [In] int idr);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
void SetShapeFromFile([In][MarshalAs(UnmanagedType.BStr)] string bstrFilename);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(28)]
void Set2DText([In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(29)]
void Set3DText([In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
void SetScale([In] float scale);
[DispId(8)]
float scaleX
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
[param: In]
set;
}
[DispId(9)]
float scaleY
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
[param: In]
set;
}
[DispId(10)]
float scaleZ
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(10)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(10)]
[param: In]
set;
}
[DispId(11)]
bool autoscale
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(11)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(11)]
[param: In]
set;
}
[DispId(12)]
int color
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(12)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(12)]
[param: In]
set;
}
[DispId(13)]
int color2
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(13)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(13)]
[param: In]
set;
}
[DispId(14)]
float pFade
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(14)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(14)]
[param: In]
set;
}
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(15)]
void AnchorToObject([In] int guid, [In] float fractHeight, [In] float dx, [In] float dy, [In] float dz);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(16)]
void AnchorToCoords([In] float lat, [In] float lng, [In] float alt);
[DispId(17)]
float pBounce
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(17)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(17)]
[param: In]
set;
}
[DispId(18)]
float hBounce
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(18)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(18)]
[param: In]
set;
}
[DispId(19)]
float pOrbit
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(19)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(19)]
[param: In]
set;
}
[DispId(20)]
float rOrbit
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(20)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(20)]
[param: In]
set;
}
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(21)]
void OrientToCamera([In] bool fTilt = false);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(22)]
void OrientToPlayer([In] bool fTilt = false);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(23)]
void OrientToObject([In] int guid, [In] float fractHeight, [In] bool fTilt = false);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(24)]
void OrientToCoords([In] float lat, [In] float lng, [In] float alt, [In] bool fTilt = false);
[DispId(25)]
float pSpin
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(25)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(25)]
[param: In]
set;
}
[DispId(26)]
bool visible
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(26)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(26)]
[param: In]
set;
}
[DispId(27)]
bool drawBackface
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(27)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(27)]
[param: In]
set;
}
[DispId(30)]
float AnimationPhaseOffset
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(30)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(30)]
[param: In]
set;
}
}

View file

@ -0,0 +1,91 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.D3DService;
[ComImport]
[Guid("0BB41679-549E-4916-8B70-6A7B3CA1A31C")]
[SuppressUnmanagedCodeSecurity]
[TypeLibType(4160)]
public interface ID3DService
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj NewD3DObj();
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj PointToObject([In] int guid, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj PointToCoords([In] float lat, [In] float lng, [In] float alt, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkObjectWithIcon([In] int guid, [In] int icon);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkObjectWithIconFromFile([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkObjectWithShape([In] int guid, [In] eShape shape, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkObjectWithShapeFromFile([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(13)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkObjectWith2DText([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(14)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkObjectWith3DText([In] int guid, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkCoordsWithIcon([In] float lat, [In] float lng, [In] float alt, [In] int icon);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkCoordsWithIconFromFile([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(10)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkCoordsWithShape([In] float lat, [In] float lng, [In] float alt, [In] eShape shape, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(11)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkCoordsWithShapeFromFile([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string bstrFilename, [In] int color);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(15)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkCoordsWith2DText([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(16)]
[return: MarshalAs(UnmanagedType.Interface)]
CD3DObj MarkCoordsWith3DText([In] float lat, [In] float lng, [In] float alt, [In][MarshalAs(UnmanagedType.BStr)] string szText, [In][MarshalAs(UnmanagedType.BStr)] string szFont, [In] int options = 0);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(12)]
void TraceOneFrame();
}

View file

@ -0,0 +1,12 @@
namespace Decal.Interop.D3DService;
public enum eShape
{
eHArrow,
eVArrow,
eRing,
eCylinder,
eSphere,
eCube,
eTiltedCube
}

View file

@ -0,0 +1,10 @@
using System.Reflection;
using System.Runtime.InteropServices;
using System.Security;
[assembly: Guid("8f6ef6ad-e982-40a4-b6cc-79e80b77313b")]
[assembly: PrimaryInteropAssembly(1, 0)]
[assembly: SecurityRules(SecurityRuleSet.Level2)]
[assembly: ImportedFromTypeLib("D3DService")]
[assembly: TypeLibVersion(1, 0)]
[assembly: AssemblyVersion("2.9.8.3")]