<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">外部(C#参考) | </font><font style="vertical-align: inherit;">微软

外部(C#参考)

  • 07/11/2012
  • 2分钟阅读

外部调用方法用于声明在实现的方法。当您使用互操作服务调用非属性方法时,外部调用必须的一个常见用途是与DllImport一起使用。在这种情况下,该还声明为静态,如以下示例所示:

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

笔记

extern 关键字还可以定义外部程序集别名,这可以从单个程序集中引用不同的版本。有关详细信息,请参阅外部程序集名称(C#参考)

使用abstract(C#)和extern一起方法是错误的一起来修改同一个实例的。使用extern 调用符说明方法应该在C#代码之外实现,而使用抽象方法说明实现不在类中提供。

笔记

与 C++ 相比,extern 关键字的用途更为有限。要与 C++ 关键字进行比较,请参阅C++ 语言参考中的使用 extern 指定链接

例子

在此示例中,程序从用户接收一个字符串并使其显示在消息位置。该程序使用从 User32.dll 库导入的 MessageBox 方法。

C#
//using System.Runtime.InteropServices;
    class ExternTest
    {
        [DllImport("User32.dll", CharSet=CharSet.Unicode)]
        public static extern int MessageBox(IntPtr h, string m, string c, int type);

        static int Main()
        {
            string myString;
            Console.Write("Enter your message: ");
            myString = Console.ReadLine();
            return MessageBox((IntPtr)0, myString, "My Message Box", 0);
        }

    }

此示例从在下一个示例中从 C# 程序中调用的 C 程序创建一个 DLL。

// cmdll.c
// Compile with: /LD
int __declspec(dllexport) SampleMethod(int i)
{
   return i*10;
}

本示例使用两个文件 CM.cs 和 Cmdll.c 来演示外部程序。C 文件是在示例 2 中创建的外部 DLL,它是从 C# 中调用的。

// cm.cs
using System;
using System.Runtime.InteropServices;
public class MainClass
{
   [DllImport("Cmdll.dll")]
   public static extern int SampleMethod(int x);

   static void Main()
   {
      Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));
   }
}
SampleMethod() 返回 50。

评论

要构建项目:

  • 使用 Visual C++ 命令行将 Cmdll.c 编译为 DLL:

    cl /LD Cmdll.c

  • 使用命令行编译CM.cs:

    csc CM.cs

这将创建可执行文件 CM.exe。运行此时,SampleMethod 程序值值 5 传递给 DLL 文件,之后返回乘以 10 的值。

C#语言规范

有关详细信息,请参阅C# 语言规范。语言规范是 C# 语法和用法的权威来源。

也可以看看

参考

C# 关键字

中文符(C#参考)

System.Runtime.InteropServices.DllImportAttribute

概念

C#编程指南

其他资源

C# 参考

(0)

相关推荐