diff --git a/dlangide.visualdproj b/dlangide.visualdproj
index 257eefd..5555eaf 100644
--- a/dlangide.visualdproj
+++ b/dlangide.visualdproj
@@ -66,7 +66,7 @@
0
DebugInfo DCD
0
- Unicode USE_FREETYPE USE_LIBDPARSE
+ Unicode USE_FREETYPE USE_LIBDPARSE USE_MAGO
0
3
0
@@ -201,6 +201,7 @@
+
diff --git a/src/ddebug/windows/mago.d b/src/ddebug/windows/mago.d
new file mode 100644
index 0000000..3f9070b
--- /dev/null
+++ b/src/ddebug/windows/mago.d
@@ -0,0 +1,102 @@
+module ddebug.windows.mago;
+version(USE_MAGO):
+
+import dlangui.core.logger;
+//import core.stdc.stdio;
+//import core.stdc.stdlib;
+import win32.windows;
+import win32.objbase;
+import win32.oaidl;
+import win32.wtypes;
+
+const GUID CLSID_MAGO = {0xE348A53A, 0x470A, 0x4A70, [0x9B, 0x55, 0x1E, 0x02, 0xF3, 0x52, 0x79, 0x0D]};
+const GUID IID_MAGO_NATIVE_ENGINE = {0x97348AC0, 0x2B6B, 0x4B99, [0xA2, 0x45, 0x4C, 0x7E, 0x2C, 0x09, 0xD4, 0x03]};
+const GUID IID_IDebugEngine2 = {0xba105b52, 0x12f1, 0x4038, [0xae, 0x64, 0xd9, 0x57, 0x85, 0x87, 0x4c, 0x47]};
+
+interface IEnumDebugPrograms2 : IUnknown {
+}
+
+interface IDebugProgram2 : IUnknown {
+}
+
+interface IDebugProgramNode2 : IUnknown {
+}
+
+interface IDebugEventCallback2 : IUnknown {
+}
+
+interface IDebugBreakpointRequest2 : IUnknown {
+}
+
+interface IDebugPendingBreakpoint2 : IUnknown {
+}
+
+interface IDebugEvent2 : IUnknown {
+}
+
+struct EXCEPTION_INFO {
+}
+
+alias ATTACH_REASON = uint;
+
+interface IDebugEngine2 : IUnknown {
+//extern(Windows):
+ HRESULT EnumPrograms(IEnumDebugPrograms2 ** p);
+ HRESULT Attach( IDebugProgram2 **rgpPrograms,
+ IDebugProgramNode2 **rgpProgramNodes,
+ DWORD celtPrograms,
+ IDebugEventCallback2 *pCallback,
+ ATTACH_REASON dwReason);
+
+ HRESULT CreatePendingBreakpoint(IDebugBreakpointRequest2 *pBPRequest,
+ IDebugPendingBreakpoint2 **ppPendingBP);
+
+ HRESULT SetException(EXCEPTION_INFO *pException);
+
+ HRESULT RemoveSetException( EXCEPTION_INFO *pException);
+
+ HRESULT RemoveAllSetExceptions(REFGUID guidType);
+
+ HRESULT GetEngineId(GUID *pguidEngine);
+
+ HRESULT DestroyProgram(IDebugProgram2 *pProgram);
+
+ HRESULT ContinueFromSynchronousEvent(IDebugEvent2 *pEvent);
+
+ HRESULT SetLocale(WORD wLangID);
+
+ HRESULT SetRegistryRoot(LPCOLESTR pszRegistryRoot);
+
+ HRESULT SetMetric(LPCOLESTR pszMetric, VARIANT varValue);
+
+ HRESULT CauseBreak();
+}
+
+void testMago() {
+ HRESULT hr;
+ IUnknown* piUnknown;
+ IDebugEngine2 debugEngine = null;
+ hr=CoInitialize(null); // Initialize OLE
+ if (FAILED(hr)) {
+ Log.e("OLE 2 failed to initialize");
+ return;
+ }
+ //hr = CoCreateInstance(&CLSID_MAGO, null, CLSCTX_ALL, &IID_IDebugEngine2, cast(void**)&piUnknown);
+ hr = CoCreateInstance(&IID_MAGO_NATIVE_ENGINE, //CLSID_MAGO,
+ null,
+ CLSCTX_INPROC, //CLSCTX_ALL,
+ &IID_IDebugEngine2, //IID_MAGO_NATIVE_ENGINE,
+ cast(void**)&debugEngine); //piUnknown);
+ if (debugEngine) {
+ Log.d("Debug interface is not null");
+ }
+ if (FAILED(hr) || !debugEngine) {
+ Log.e("Failed to create MAGO interface instance %x", hr);
+ return;
+ }
+
+ Log.d("Debug interface initialized ok");
+ GUID eid;
+ debugEngine.GetEngineId(&eid);
+ Log.d("Engine id: ", eid);
+}
diff --git a/src/dlangide.d b/src/dlangide.d
index 3a1b494..1532c56 100644
--- a/src/dlangide.d
+++ b/src/dlangide.d
@@ -43,10 +43,14 @@ extern (C) int UIAppMain(string[] args) {
//import ddc.lexer.tokenizer;
//runTokenizerTest();
debug(DebugInfo) {
+ version(USE_MAGO) {
+ import ddebug.windows.mago;
+ testMago();
+ }
version(Windows) {
import ddebug.windows.debuginfo;
import std.file;
- debugInfoTest(thisExePath);
+ //debugInfoTest(thisExePath);
}
}