1

こんにちは、みんな!!!私は電話アプリケーションの初心者であり、Windows Tapi32.dll と panasonic TSP を使用してサービス クラス (COS) を変更するための非常に単純な Panasonic 電話アプリケーションを作成しようとしています。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");

 }

Plzは私を助けてくれるか、物事を成し遂げるために私を書く方向に向けてください. 事前に感謝します...

4

1 に答える 1

1

lineDevSpecific()は、 ではなく戻り値を介してエラー状態を公開します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 に答える