summaryrefslogtreecommitdiff
path: root/wrapper/wrapper.cpp
diff options
context:
space:
mode:
authora1xd <[email protected]>2020-09-29 07:26:05 -0400
committera1xd <[email protected]>2020-09-29 07:26:05 -0400
commite10e5a26d3d3576174285414ea805e5177742821 (patch)
treea6506f5bfe7cc01f4416785eb4c5b8c716e5e9a3 /wrapper/wrapper.cpp
parentadd interaccel converter (diff)
downloadrawaccel-e10e5a26d3d3576174285414ea805e5177742821.tar.xz
rawaccel-e10e5a26d3d3576174285414ea805e5177742821.zip
add wrapper optimization
Diffstat (limited to 'wrapper/wrapper.cpp')
-rw-r--r--wrapper/wrapper.cpp9
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()