无效的令牌命名空间,未找到的类型或命名空间,无效的令牌“{”

时间:2015-06-02 08:25:35

标签: c# namespaces pinvoke dllimport tapi

我想从我的应用程序中调用任何人并找到此方法,但它不起作用..

    namespace SysWin32
    { 
        class programm
        {
            [DllImport("Tapi32.dll")]
            public static extern long tapiRequestMakeCall(string Number, string AppName, string CalledParty, string Comment);
        }

    }

1 个答案:

答案 0 :(得分:0)

假设您将代码放在正确的位置,您问题中的代码会完美编译。您报告的编译器错误与问题中不存在的代码有关。

也许您已将问题中的代码嵌套在另一个类中。例如这段代码:

namespace ConsoleApplication1
{
    class Program
    {
        namespace SysWin32
        {
            class programm
            {
                [DllImport("Tapi32.dll")]
                public static extern long tapiRequestMakeCall(string Number, 
                    string AppName, string CalledParty, string Comment);
            }

        }

        static void Main(string[] args)
        {
        }
    }
}

导致与您报告的错误类似的错误。当然,我不得不猜测你的真实代码是什么。也许这是一个变种。无论如何,关键是问题中的代码是正常的,但问题在于它周围的代码,我们看不到的代码。

我还要指出函数返回类型是错误的。在Windows上的C和C ++中,long是32位有符号整数。在C#中,long是64位有符号整数。所以tapiRequestMakeCall的返回值类型应该在C#p / invoke声明中声明为int

以下代码将编译:

namespace ConsoleApplication1
{
    class programm
    {
        [DllImport("Tapi32.dll")]
        public static extern int tapiRequestMakeCall(string Number, 
            string AppName, string CalledParty, string Comment);

        static void Main(string[] args)
        {
        }
    }
}