<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# 语法和用法的权威来源。
也可以看看
参考
System.Runtime.InteropServices.DllImportAttribute
概念
其他资源
赞 (0)