【问题标题】:How to know that function in Tapi32.dll is executing from the c# code如何知道 Tapi32.dll 中的函数是从 c# 代码执行的
【发布时间】:2013-03-04 11:28:07
【问题描述】:

大家好!!! 我是电话应用程序的新手,并尝试使用 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");

 }

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

【问题讨论】:

    标签: c#-3.0 telephony tapi


    【解决方案1】:

    lineDevSpecific() 通过其返回值而不是SetLastError() 暴露错误条件,所以:

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

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

      int result = lineDevSpecific(hline, add, call, userRec, size);
      if (result < 0) {
          // Handle error, depending on the value of 'result'.
      }
      

    【讨论】:

    • @Frederick Thanx 先生您的回复...先生,我按照您的建议更改了代码,它给出的错误将您告诉我如何解决这个错误..
    • @Frederick Plz 先生指导我如何在这种情况下捕捉错误,因为“结果”给出负值..
    • @vikas,好吧,正如我所说,您必须将 result 的值与文档中列出的常量进行比较。您可能必须从头文件 (tapi.h) 中获取每个常量的值,以便在托管模块中重新定义它们。
    • @Frederick 感谢您先生的回复,因为我是新手,我不知道如何从头文件中获取值,先生,我正在使用 c#。如果您详细说明或指导我到正确的地方..将不胜感激先生。非常感谢您
    猜你喜欢
    • 2022-07-31
    • 1970-01-01
    • 2012-02-27
    • 2014-07-17
    • 1970-01-01
    • 2014-03-23
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多