如何从C#中将结构作为指针传递给C dll

我正在研究简单的电话应用,我正在改变panasonic pbx扩展的服务等级。 为此,我使用的是“Tapi32.dll”,其中包含c ++中的方法。 现在根据我的需要,我必须传递两个参数,两个整数指针类型。 一个参数正确传递,但我无法传递结构类型的第二个argumnet。

这是我的代码……

[DllImport("Tapi32.dll", CharSet=CharSet.Auto, SetLastError=true)] unsafe private static extern int lineDevSpecific(int* hLine, int* lpParams); [StructLayout(LayoutKind.Sequential)] public struct UserRec { [MarshalAs(UnmanagedType.I4)] public int dwMode=4; public int dwParam1=8; } unsafe static void Main(string[] args) { int vline=int.Parse("Ext101"); int* hline = &vline; lineDevSpecific(hline, ref UserRec userrec); } 

 [DllImport("Tapi32.dll", SetLastError=true)] unsafe private static extern int lineDevSpecific(int* hLine, IntPtr lpParams); unsafe static void Main(string[] args) { int vline=int.Parse("Ext101"); int* hline=&vline; var sizeUserRec=Marshal.SizeOf(typeof(UserRec)); var userRec=Marshal.AllocHGlobal(sizeUserRec); lineDevSpecific(hline, userRec); var x=(UserRec)Marshal.PtrToStructure(userRec, typeof(UserRec)); Marshal.FreeHGlobal(userRec); } 

看看这个问题的答案

  • 物理磁盘大小不正确(IoCtlDiskGetDriveGeometry)

您可以找到更多,以使编组更容易,更可重用。