2013-03-04 60 views
1

大家好! 我是电话应用程序的新手,并试图使一个非常简单的松下电话应用程序,以改变使用Windows Tapi32.dll和松下TSP的服务等级(COS)。我做了一个功能,它将改变PBX的服务等级。但上运行的应用的服务等级未在PBX没有改变我的代码给我任何类型的错误......下面是我的代码...如何知道Tapi32.dll中的函数是从c#代码执行的

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

} 

plz帮助我或者直接我在写方向得到的东西。提前...提前...

回答

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'. 
    } 
    
+0

@Frederick Thanx先生为你的回应...先生,我改变了代码,因为你建议和它给错误将plz告诉我如何得到这个错误.. – vikas 2013-03-04 11:41:14

+0

@Frederick Plz先生指导我如何C atch在这种情况下的错误,因为'结果'给出了负值。 – vikas 2013-03-04 11:55:47

+0

@vikas,好吧,正如我所说的,你必须将'result'的值与文档中列出的常量进行比较。您可能需要从头文件('tapi.h')中获取每个常量的值,以便在托管模块中重新定义它们。 – 2013-03-04 12:03:30

相关问题