在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