[英]p/invoke C function that returns pointer to a struct
如何在C#中声明一个返回指向结构的指针的C函数?
我相信以下是一种方法,然后是Marshal.PtrToStructure来获得实际的结构价值。
// C-function
SimpleStruct * Function(void);
// C# import
[DllImport("MyDll.dll")]
public static extern IntPtr Function();
由于函数返回一个指针(希望不是本地分配的?),你最好的选择是手动封送它(通过Marshal.PtrToStructure )。
如果它是一个参数,您可以使用PInvoke Interop Assistant创建结构的托管版本,然后通过ref或out传递它。
警告:只有当返回的指针指向已由CLR管理的内存时,这才有效
我相信你在寻找的是
// C# import
[DllImport("MyDll.dll")]
[return : MarshalAs(UnmanagedType.LPStruct)]
public static extern StructureName Function();
[StructLayout(LayoutKind.Sequential)]
public class StructureName {}
这应该不需要任何手动Marshal.PtrToStructure
调用。 根据您的结构包含的内容,您可能需要根据需要使用MarshalAs
属性标记某些字段。 MSDN就是一个很好的例子。
我根本不是这里的专家,但我碰巧看到的是一段代码(我完全不明白你这么做)。
这是他们正在做的事情
[DllImport("")]
private static extern short MethodName([In,Out] ref StructureName variable);
然后在结构上他们有以下属性
[StructLayout(LayoutKind.Sequential, Size = #)]
public struct StructureName {}
我认为你要找的部分是[In,Out]部分,因为它是通过ref传递的,所以你应该得到相同的数据。
标记为社区维基,以便人们可以解决这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.