diff --git a/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/PluginMain.java b/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/PluginMain.java index 9d5ace5..a7b7806 100644 --- a/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/PluginMain.java +++ b/VirtualComputer-Core/src/main/java/sznp/virtualcomputer/PluginMain.java @@ -134,7 +134,9 @@ public class PluginMain extends JavaPlugin { private void error(String message) { getLogger().severe("A fatal error occured, disabling plugin!"); Bukkit.getPluginManager().disablePlugin(this); - throw new RuntimeException(message); + val ex = new RuntimeException(message); + ex.setStackTrace(new StackTraceElement[0]); + throw ex; } // Fired when plugin is disabled diff --git a/VirtualComputerMSCOM/src/main/java/com/jacob/com/COMConverter.java b/VirtualComputerMSCOM/src/main/java/com/jacob/com/COMConverter.java new file mode 100644 index 0000000..6ae3db1 --- /dev/null +++ b/VirtualComputerMSCOM/src/main/java/com/jacob/com/COMConverter.java @@ -0,0 +1,11 @@ +package com.jacob.com; + +public class COMConverter { + public static long GetVariantAddress(Variant variant) { + return variant.m_pVariant; + } + + public static void SetVariantAddress(Variant variant, long addr) { + variant.m_pVariant = addr; + } +} diff --git a/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMUtils.java b/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMUtils.java index a0d3744..7185698 100644 --- a/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMUtils.java +++ b/VirtualComputerMSCOM/src/main/java/sznp/virtualcomputer/util/COMUtils.java @@ -1,6 +1,8 @@ package sznp.virtualcomputer.util; +import com.jacob.com.COMConverter; import com.jacob.com.Dispatch; +import com.jacob.com.Variant; import lombok.SneakyThrows; import lombok.val; import lombok.var; @@ -14,10 +16,10 @@ public final class COMUtils { } public static IEventListener registerListener(IEventSource source, IEventHandler listener, List types) { - long handler = Exports.GetEventHandler(listener); - var dp = new Dispatch(); - dp.m_pDispatch = handler; - var ret = new IEventListener(dp); + var variant = new Variant(); + COMConverter.SetVariantAddress(variant, Exports.GetEventHandler(listener, COMConverter.GetVariantAddress(variant))); + System.out.println("Variant as int: "+variant.toInt()); + var ret = new IEventListener(variant.changeType((short) 9).getDispatch()); //Object variant to dispatch variant source.registerListener(ret, types, true); return ret; } @@ -28,9 +30,9 @@ public final class COMUtils { } public static IFramebuffer gimmeAFramebuffer(IMCFrameBuffer frameBuffer) { - var dp = new Dispatch(); - dp.m_pDispatch = Exports.GetFrameBuffer(frameBuffer); - return new IFramebuffer(dp); + var variant = new Variant(); + COMConverter.SetVariantAddress(variant, Exports.GetFrameBuffer(frameBuffer, COMConverter.GetVariantAddress(variant))); + return new IFramebuffer(variant.toDispatch()); //Object variant } public static void queryBitmapInfo(IDisplaySourceBitmap bitmap, long[] ptr, long[] w, long[] h, long[] bpp, long[] bpl, long[] pf) { diff --git a/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.dll b/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.dll index 305c13f..f143732 100644 Binary files a/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.dll and b/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.dll differ diff --git a/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.j4n.dll b/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.j4n.dll index 0725c9b..e369d4a 100644 Binary files a/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.j4n.dll and b/VirtualComputerMSCOM/src/main/resources/VirtualComputerWindows.j4n.dll differ diff --git a/VirtualComputerWindows/VirtualComputerWindows/EventHandler.cs b/VirtualComputerWindows/VirtualComputerWindows/EventHandler.cs index 72eddec..5b817f3 100644 --- a/VirtualComputerWindows/VirtualComputerWindows/EventHandler.cs +++ b/VirtualComputerWindows/VirtualComputerWindows/EventHandler.cs @@ -1,12 +1,14 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; +using VirtualBox; namespace VirtualComputerWindows { - public class EventHandler + public class EventHandler : IEventListener { private readonly IEventHandler handler; private bool enabled = true; @@ -21,16 +23,16 @@ namespace VirtualComputerWindows this.handler = handler; } - public void handleEvent(long iEvent) + public void HandleEvent(IEvent aEvent) { if (!enabled) return; - handler.handleEvent(iEvent); + handler.handleEvent((long)Marshal.GetIDispatchForObject(aEvent)); } public void disable() { enabled = false; } - } + } } diff --git a/VirtualComputerWindows/VirtualComputerWindows/Exports.cs b/VirtualComputerWindows/VirtualComputerWindows/Exports.cs index 5d59ee9..f24e924 100644 --- a/VirtualComputerWindows/VirtualComputerWindows/Exports.cs +++ b/VirtualComputerWindows/VirtualComputerWindows/Exports.cs @@ -49,22 +49,28 @@ namespace VirtualComputerWindows private static void Main() { //Init(); - long asd = GetEventHandler(null); - Console.WriteLine("Returned: " + asd); + GetEventHandler(null, 0L); Console.ReadLine(); } - public static long GetFrameBuffer(IMCFrameBuffer framebuffer) + private static WinFrameBuffer framebuffer; + public static long GetFrameBuffer(IMCFrameBuffer framebuffer, long addr) { - var fb = new WinFrameBuffer(framebuffer); - return (long) Marshal.GetIUnknownForObject(fb); + Exports.framebuffer = new WinFrameBuffer(framebuffer); + Marshal.GetNativeVariantForObject(Exports.framebuffer, (IntPtr)addr); + return (long)Marshal.GetIDispatchForObject(Exports.framebuffer); } - public static long GetEventHandler(IEventHandler handler) + private static EventHandler eventHandler; + private static DispatchWrapper handlerWrapper; + public static long GetEventHandler(IEventHandler handler, long addr) { - var han = new EventHandler(handler); - return (long)Marshal.GetIUnknownForObject(han); + eventHandler = new EventHandler(handler); + //handlerWrapper = new DispatchWrapper(eventHandler); + Marshal.GetNativeVariantForObject(eventHandler, (IntPtr)addr); + //return (long)Marshal.GetIDispatchForObject(eventHandler); + return addr; } } } diff --git a/VirtualComputerWindows/VirtualComputerWindows/WinFrameBuffer.cs b/VirtualComputerWindows/VirtualComputerWindows/WinFrameBuffer.cs index 1b4ffd8..a0f8d4f 100644 --- a/VirtualComputerWindows/VirtualComputerWindows/WinFrameBuffer.cs +++ b/VirtualComputerWindows/VirtualComputerWindows/WinFrameBuffer.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using VirtualBox; diff --git a/repo/io/github/NorbiPeti/VirtualComputer-Windows/3.0/VirtualComputer-Windows-3.0.jar b/repo/io/github/NorbiPeti/VirtualComputer-Windows/3.0/VirtualComputer-Windows-3.0.jar index 6edd735..71a8b0f 100644 Binary files a/repo/io/github/NorbiPeti/VirtualComputer-Windows/3.0/VirtualComputer-Windows-3.0.jar and b/repo/io/github/NorbiPeti/VirtualComputer-Windows/3.0/VirtualComputer-Windows-3.0.jar differ