2013-03-04 58 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

相關問題