C# 3.0 如何知道Tapi32.dll中的函数是从c代码执行的

C# 3.0 如何知道Tapi32.dll中的函数是从c代码执行的,c#-3.0,telephony,tapi,C# 3.0,Telephony,Tapi,大家好!!! 我是电话应用程序的新手,尝试制作一个非常简单的Panasonic电话应用程序来更改服务类别(COS)使用Windows Tapi32.dll和panasonic TSP。我制作了一个函数,可以更改PBX中的服务类。但是在运行应用程序时,PBX中的服务类没有更改,我的代码也没有给我任何类型的错误…下面是我的代码 [DllImport("Tapi32.dll", CharSet=CharSet.Auto, SetLastError=true)] internal static e

大家好!!! 我是电话应用程序的新手,尝试制作一个非常简单的Panasonic电话应用程序来更改服务类别(COS)使用Windows Tapi32.dll和panasonic TSP。我制作了一个函数,可以更改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");

 }
请帮助我或指导我写操作。Thanx提前…

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

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

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

    int result = lineDevSpecific(hline, add, call, userRec, size);
    if (result < 0) {
        // Handle error, depending on the value of 'result'.
    }
    
    int result=lineDevSpecific(hline、add、call、userRec、size);
    如果(结果<0){
    //根据“结果”的值处理错误。
    }
    
通过其返回值而不是
SetLastError()
公开错误条件,因此:

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

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

    int result = lineDevSpecific(hline, add, call, userRec, size);
    if (result < 0) {
        // Handle error, depending on the value of 'result'.
    }
    
    int result=lineDevSpecific(hline、add、call、userRec、size);
    如果(结果<0){
    //根据“结果”的值处理错误。
    }
    

@Frederick Thanx先生,您的回答是…先生,我按照您的建议更改了代码,其给出的错误将由您告诉我如何消除此错误。@Frederick plz先生指导我如何捕捉这种情况下的错误,因为“结果”给出的是负值。@vikas,正如我所说,您必须将
result
的值与文档中列出的常量进行比较。您可能需要从头文件中获取每个常量的值(
tapi.h
)为了在您的托管模块中重新定义它们。@Frederick感谢您的回复,先生,因为我是新手,我不知道如何从头文件获取值,先生,我使用的是c#。如果您详细说明或指示我到正确的位置,我将不胜感激,先生。非常感谢much@Frederick谢谢你的回复…先生我按照你的建议修改了密码它的给定错误将告诉我如何消除这个错误。@Frederick plz sir指导我如何捕捉这种情况下的错误,因为“result”给出的是负值。@vikas,正如我所说,您必须将
result
的值与文档中列出的常数进行比较。您可能需要从头文件中获取每个常量的值(
tapi.h
)为了在您的托管模块中重新定义它们。@Frederick感谢您的回复,先生,因为我是新手,我不知道如何从头文件获取值,先生,我使用的是c#。如果您详细说明或指示我到正确的位置,我将不胜感激,先生。非常感谢