在C#,我所定义的结构:转换结构手柄从托管到非托管C++/CLI
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MyObject
{
[MarshalAs(UnmanagedType.LPWStr)]
public string var1;
[MarshalAs(UnmanagedType.LPWStr)]
public string var2;
};
我有这样的结构在C++:
public value struct MyObject
{
LPWSTR var1;
LPWSTR var2;
};
而在C的方法++这是从C#调用公共类:
TestingObject(MyObject^ configObject)
{
// convert configObject from managed to unmanaged.
}
对象调试正确,我可以看到两个字符串var1和var2。但是,现在的问题是,我需要将对象编号为:configObject
放入非托管对象中。
我想到的是做这样的事情:
TestingObject(MyObject^ configObject)
{
// convert configObject from managed to unmanaged.
MyObject unmanagedObj = (MyObject)Marshal::PtrToStructure(configObject, MyObject);
}
这是我能想到的不过关过程中,我得到这个错误:
Error 2 error C2275: 'MyObject' : illegal use of this type as an expression
是转换是正确的托管对象变为非托管对象?如果是这样,那么我怎样才能正确地确定Marshal::PtrToStructure
?如果不是,我该怎么办?
除非您定义名为'LPWSTR'的别名(或实际类型),否则您的C#将不会编译。 – svick 2012-03-23 16:14:37
这是我的错误。我只是更新了它 – olidev 2012-03-23 16:16:04
像他的回答中提到的@Botz一样,这里没有非托管类型。你想做什么? – 2012-03-23 16:18:57