我正在开发简单的电话应用程序,我正在更改松下 pbx 分机的服务类别。为此,我使用“Tapi32.dll”,它具有 C++ 中的方法。现在根据我的需要,我必须传递两个整数指针类型的参数。一个参数已正确传递,但我无法传递第二个参数,即结构类型。
这是我的代码...
[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);
}
看看这个问题的答案
您可以找到更多内容来使编码更容易且更可重用。
关于c# - 如何从 C# 将结构作为 C dll 中的指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15197195/