diff options
| author | a1xd <[email protected]> | 2020-09-29 07:26:05 -0400 |
|---|---|---|
| committer | a1xd <[email protected]> | 2020-09-29 07:26:05 -0400 |
| commit | e10e5a26d3d3576174285414ea805e5177742821 (patch) | |
| tree | a6506f5bfe7cc01f4416785eb4c5b8c716e5e9a3 /wrapper/wrapper.cpp | |
| parent | add interaccel converter (diff) | |
| download | rawaccel-e10e5a26d3d3576174285414ea805e5177742821.tar.xz rawaccel-e10e5a26d3d3576174285414ea805e5177742821.zip | |
add wrapper optimization
Diffstat (limited to 'wrapper/wrapper.cpp')
| -rw-r--r-- | wrapper/wrapper.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index 3d77fc1..ebc4a2e 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -82,13 +82,12 @@ void as_native(DriverSettings^ managed_args, NativeSettingsFunc fn) if (Marshal::SizeOf(managed_args) != sizeof(settings)) throw gcnew InvalidOperationException("setting sizes differ"); #endif - IntPtr unmanagedHandle = Marshal::AllocHGlobal(sizeof(settings)); - Marshal::StructureToPtr(managed_args, unmanagedHandle, false); - fn(*reinterpret_cast<settings*>(unmanagedHandle.ToPointer())); + settings args; + Marshal::StructureToPtr(managed_args, (IntPtr)&args, false); + fn(args); if constexpr (!std::is_invocable_v<NativeSettingsFunc, const settings&>) { - Marshal::PtrToStructure(unmanagedHandle, managed_args); + Marshal::PtrToStructure((IntPtr)&args, managed_args); } - Marshal::FreeHGlobal(unmanagedHandle); } DriverSettings^ get_default() |