1

大家好!!!我是电话应用程序的新手,并尝试使用 Windows Tapi32.dll 和松下 TSP 制作一个非常简单的松下电话应用程序来更改服务等级 (COS)。我已经制作了一个功能,它将改变 PBX 中的服务等级..但是在运行应用程序服务类在 PBX 中没有改变我的代码也没有给我任何类型的错误......下面是我的代码......

[DllImport("Tapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
   internal static extern int lineDevSpecific(IntPtr hLine,uint dwAddressID,uint hCall, IntPtr lpParams,uint dwSize);

    [StructLayout(LayoutKind.Sequential)]
    public struct UserRec
    {
        public int dwMode
        {
            get
            {
                return dwMode;
            }
            set
            {
                dwMode = 4;
            }
        }

        public int dwParam1
        {
            get
            {
                return dwParam1;
            }
            set
            {
                dwParam1 = 18;
            }
        }
    }

   public static void Main(string[] args)
    {
        uint add = 0;
        uint call = 0;
        uint size = 0;

        string vline = "125";
        //IntPtr hline = &vline;
        IntPtr hline = Marshal.StringToHGlobalUni(vline);

        var sizeUserRec = Marshal.SizeOf(typeof(UserRec));
        var userRec = Marshal.AllocHGlobal(sizeUserRec);
        lineDevSpecific(hline, add, call, userRec, size);
        var x = (UserRec)Marshal.PtrToStructure(userRec, typeof(UserRec));
        Marshal.FreeHGlobal(userRec);
        Console.WriteLine("Hii");

 }

请帮助我或指导我在写作方向上完成工作。提前谢谢...

4

1 回答 1

1

lineDevSpecific()通过其返回值 not 暴露错误条件SetLastError(),因此:

  • 您可能应该SetLastError=true[DllImport]属性中删除,

  • 您应该根据文档中列出的错误常量测试函数的返回值:

    int result = lineDevSpecific(hline, add, call, userRec, size);
    if (result < 0) {
        // Handle error, depending on the value of 'result'.
    }
    
于 2013-03-04T11:34:28.837 回答