In C#, I defined a struct:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MyObject
{
[MarshalAs(UnmanagedType.LPWStr)]
publ
You probably mean:
struct MyUnmanagedStruct {
LPWSTR var1, var2;
};
Then you can use Marshal.StructureToPtr
as suggested by Botz3000. Otherwise C#'s
public struct MyObject {
public String var1;
public String var2;
}
and C++/CLI's
public struct value MyObject {
public String^ var1;
public String^ var2;
}
are completely equivalent, assuming your're you're using the same System.String
on both sides.
Marshal::PtrToStructure
does the opposite of what you want, it converts an unmanaged pointer to a managed object. You want Marshal::StructureToPtr.
Also, you would need to define an unmanaged class, because MyObject is a Managed Type. Assuming you have done that, you could do it like this (just converted this from the C# sample):
IntPtr pnt = Marshal::AllocHGlobal(Marshal::SizeOf(configObject));
Marshal.StructureToPtr(configObject, pnt, false);
You then have a pointer to the data, which you can memcpy
or whatever into your native struct.
But MyObject
is and will stay a managed type. If you want a truly unmanaged type, you have to define one that matches the managed struct.
Just wondering, why are you using unmanaged LPWSTR in a managed struct?