我有一个C#结构,用于与某些本机代码接口。假设它看起来像这样,并且dll中有一个入口点,可用于检索该结构的值:
public struct MyNativeStruct
{
public double ExampleField;
}
[DllImport("SomeDll")]
public static extern MyNativeStruct GetMyNativeStruct();
该结构用于从本机dll中获取结构化值,即它在dll中镜像了一个结构。这一切都正确地进行了编组,因此我可以在.NET应用程序中很好地使用这些值。
后来,我遇到一种情况,我真的需要一个具有属性而不是字段的结构(或对象),所以我真正想要的是看起来更像这样的东西: / p>
struct MyNativeStruct
{
public double ExampleField { get; set; }
}
现在,我当然可以包装extern
方法,该方法从dll中获取结构,然后将其转换为具有如下属性的对象:
public sealed class MyNativeclass
{
public double ExampleField { get; set; }
}
// Some quick and dirty function to get values from MyNativeStruct.
public static MyNativeclass GetMyNativeclass()
{
var nativeStruct = GetMyNativeStruct();
return new MyNativeclass { ExampleField = nativeStruct.ExampleField };
}
但这意味着我将必须为要从dll中检索的每个本机结构创建2种类型,因此我希望可以通过某种不错的方法将本机结构编组为具有属性的.NET结构。字段。
我想也有可能先创建具有公共字段的结构,该结构由结构中的属性支持。
无论如何,我想知道是否存在某种标准的,惯用的或内置的方法来将本机结构类型编组为具有属性而不是公共字段的C#结构类型。