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

标签: dll C#
发布时间: 2013/12/2 22:01:19
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我在哪里我会改变的松下 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:

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

看看这个问题的答案

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

赞助商