extern 修饰符

extern(C# 参考)

extern 修饰符用于声明在外部实现的方法。 extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 特性一起使用。在这种情况下,还必须将方法声明为 static,如下面的示例所示:

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

extern 关键字还可以定义外部程序集别名,使得可以从单个程序集中引用同一组件的不同版本。

将 abstract 和 extern 修饰符一起使用来修改同一成员是错误的做法。使用 extern 修饰符意味着方法是在 C# 代码的外部实现的,而使用 abstract 修饰符意味着类中未提供方法实现。
extern 关键字用于 C# 中时会比用于 C++ 中时受到更多的限制。

示例 1. 在此示例中,程序接收来自用户的字符串并将该字符串显示在消息框中。程序使用从 User32.dll 库导入的 MessageBox 方法。

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ConsoleApp1
{
    class Program
    {
        [DllImport("User32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(IntPtr h, string m, string c, int type);

        static void Main(string[] args)
        {
            string myString;
            Console.Write("Enter your message:");
            myString = Console.ReadLine();
            MessageBox((IntPtr)0, myString, "my Message Box:", 0);

        }
    }
}

示例 2. 此示例阐释了调入 C 库(本机 DLL)的 C# 程序。
1.1 创建以下 C 文件并将其命名为 cmdll.c:

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

1.2 从 Visual Studio 安装目录打开 Visual Studio x64(或 x32)本机工具命令提示符窗口,并通过在命令提示符处键入 CL /LD cmdll.c 来编译 cmdll.c 文件。

2.1.在相同的目录中,创建以下 C# 文件并将其命名为 cm.cs:

// 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));
   }
}

2.2.从 Visual Studio 安装目录打开一个 Visual Studio x64(或 x32)本机工具命令提示符窗口,并通过键入以下内容来编译 cm.cs 文件:

csc cm.cs(针对 x64 命令提示符)
- 或 -
csc /platform:x86 cm.cs(针对 x32 命令提示符)
这将创建可执行文件 cm.exe。

3.运行 cm.exe。 SampleMethod 方法将值 5 传递到 DLL 文件,这将返回该值与 10 相乘后的结果。程序生成以下输出:

SampleMethod() returns 50.

时间: 2024-10-05 05:21:19

extern 修饰符的相关文章

c语言修饰符总结const、static、volatile、auto、extern、register

写在前面 今天下午一个同事问「register」关键字是什么作用?噢,你说的是「register」啊,它的作用是--脑袋突然断片儿,我擦,啥意思来着,这么熟悉的陌生感.做C语言开发时间也不短了,不过好像没有用到过「register」,但作用还是知道的,一下子想不起来了,一万个草泥马飞奔过来. 其实C语言中除了register外,还包含常见的const.static.volatile.auto.extern等修饰符,现在一起再总结一下好了. register 修饰符 register,寄存器变量,

C#语言中的修饰符汇总

1. 访问修饰符 指定声明的类型和类型成员的可访问性. (1) public:对任何类和成员都公开, 无限制访问;是类型和类型成员的访问修饰符.公共访问是允许的最高访问级别.对访问公共成员没有限制. (2) private:仅仅对该类公开;是一个成员访问修饰符.私有访问是允许的最低访问级别.私有成员只有在声明它们的类和结 构体中才是可访问的. (3) internal:只能值包含该类的程序集中访问该类(只是单独的项目,而不是整个解决方案);是类型和类型成员的访问修饰符.只有在同一程序集的文件中,

[.net 面向对象编程基础] (7) 基础中的基础——修饰符

[.net 面向对象编程基础] (7) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改符. 首先 修饰符是什么? 修饰符用于限定类型以及类型成员的申明 从定义可以看出按功能分为两类:访问修饰符和声明修饰符 1.访问修饰符 (5个) 访问修饰符 说明 public 公有访问.不受任何限制. private 私有访问.只限于本类成员访问,子类,实例都不能访问. protected 保护访

C# 中4个访问符和8个修饰符详解

4个访问修饰符(是添加到类.结构或成员声明的关键字) Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. Internal:内部的,是类型和类型成员的访问修饰符.同一个程序集中的所有类都可以访问 Private:私有的,是一个成员访问修饰符.只有在声明它们的类和结构中才可以访问. Protected::受保护的,是一个成员访问修饰符.只能在它的类和它的派生类中访问. protected internal:访问级别为 internal 或 protected.即,“同一个程序集

【转】C# 中访问修饰符

用通过代码:  类内部 using System;class Mod{    void defaultMethod()    {        Console.WriteLine("this is a default method");    }    public void publicMethod()    {        Console.WriteLine("this is a public method");    }    private void pr

修饰符 extern/static/const/UIKIT_EXTERN(OC版extern) 的使用

先逐个分析每个修饰符单独代表的含义,然后再分析某些修饰符组合在一起的时候所代表的含义. const const 相对最好理解,就是修饰的东西不能再被修改. 没有 const 修饰的指针,指针 p 和 *p 都能被修改: 1 // // 定义一个指针 2 int *p = NULL; 3 // // 定义2 个int 类型的变量 4 5 int a = 10; 6 int b = 30; 7 8 // p 指向 a 9 NSLog(@"p = %p, a = %d, b = %d", p

C++变量内存分配及类型修饰符

前言 了解C++程序内存分配,有助于深刻理解变量的初始化值以及其生存周期.另外,变量类型修饰符也会影响到变量的初始化值及其生存周期.掌握了不同类型变量的初始化值及其生存周期,能够让我们设计程序时定义变量时更准确. 内存分配 1.     C++程序的内存布局 现代电脑都是遵循冯诺依曼体系结构,所以C++程序的内存布局也是遵循该体系的.主要包括5个部分,即代码段.数据段.BSS段.堆和栈.. 1.     代码段 代码段(code segment/text segment),通常是指用来存放程序执

C#编程(二十四)----------修饰符

修饰符 修饰符即应用于类型或成员的关键字.修饰符可以指定方法的可见性,如public或private,还可以指定一项的本质,如刚发的vritual或abstract. 可见性的修饰符 修饰符 应用于 说明 public 所有类型或成员 任何代码均可以访问该项 protected 类型和内嵌类型的所有成员 只有派生的类型能访问该项 internal 所有类型或成员 只能包含它的程序集中访问该项 private 类型和内嵌类型的所有成员 只能在它所属的类型中访问该项 protected intern

C语言学习笔记(2):volatile与register类型修饰符

1.volatile volatile是易变的,不稳定的意思,volatile是关键字,是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统.硬件或者其他线程等,遇到这个关键字声明的变量,编译器对访问该变量的代码不在进行优化,从而可以提供对特殊地址的稳定访问.那么什么是编译器优化呢? 为了提高运行效率,攻城湿们可是费尽心机地把代码优化,把程序运行时存取速度优化.一般,分为硬件优化和软件优化.硬件优化,流水线工作,详细可以参考<计算机组成原理>.软件优化,一部分是程序