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

时间:2013-03-04 08:14:20

标签: c# c++

我正在开发简单的电话应用程序,我正在改变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);
}

1 个答案:

答案 0 :(得分:2)

[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);
}

看一下这个问题的答案

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

相关问题