`

extern(C# 参考)

阅读更多
extern修饰符用于声明在外部实现的方法。
extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 属性一起使用;在这种情况下,该方法还必须声明为 static,如下面的示例所示:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

注意
extern 关键字还可以定义外部程序集别名,使得可以从单个程序集中引用同一组件的不同版本。
将 abstract 和 extern 修饰符一起使用来修改同一成员是错误的。

使用
extern 修饰符意味着方法在 C# 代码的外部实现,而使用 abstract 修饰符意味着在类中未提供方法实现。注意 extern 关键字在使用上比在 C++ 中有更多的限制。

示例
在该示例中,程序接收来自用户的字符串并将该字符串显示在消息框中。程序使用从 User32.dll库导入的 MessageBox 方法。
using System; using System.Runtime.InteropServices;
class MainClass
{
[DllImport("User32.dll")]
public static extern int MessageBox(int h, string m, string c, int type);
static int Main()
{
string myString;
Console.Write("Enter your message: ");
myString = Console.ReadLine();
return MessageBox(0, myString, "My Message Box", 0);
}
}
此示例使用 C 程序创建一个 DLL,在下一示例中将从 C# 程序调用该 DLL。
// cmdll.c // compile with:
/LD int __declspec(dllexport) SampleMethod(int i)
{
return i*10;
}
该示例使用两个文件 CM.cs 和 Cmdll.c 来说明 extern。
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() returns 50. 备注生成项目: 使用 Visual C++ 命令行将 Cmdll.c 编译为 DLL: cl /LD Cmdll.c 使用命令行编译 CM.cs: csc CM.cs 这将创建可执行文件 CM.exe。运行此程序时,SampleMethod 将值 5 传递到 DLL 文件,该文件将此值乘以 10 返回。
分享到:
评论

相关推荐

    C#语言参考 陈广1-5

    《C#语言参考 陈广1-5》是关于C#编程语言的深入学习资源,由专家陈广精心编著,旨在帮助读者掌握C#的基础和高级特性。本系列涵盖了从语言配置到数组、命名空间和方法等多个核心概念,通过一系列的SWF教学文件进行...

    C#_参考中文的.pdf

    - `extern`:用于声明外部方法。 - `object`:所有类的基类。 - `this`:表示当前实例的引用。 - `bool`:布尔类型,可以是`true`或`false`。 - `false`:布尔值,表示假。 - `operator`:用于定义或重载运算符。 - ...

    tsc打印机的代码(C#版) 仅供参考

    本篇文章将深入探讨如何在C#中实现TSC打印机的代码,以便为其他开发者提供参考和学习。 首先,`TSCLIB[1].DLL`是一个动态链接库(DLL)文件,通常包含一组函数或方法,供其他程序调用以执行特定任务。在这种情况下,`...

    C#如何模拟键盘输入

    本文将深入探讨如何使用C#实现这一功能,并提供实例代码以供参考。 首先,C#中模拟键盘输入主要依赖于Windows API(应用程序接口)调用,尤其是`user32.dll`库中的`SendInput`函数。这个函数允许程序模拟用户输入的...

    C# 程序员参考--平台调用教程

    在编程世界中,C# 是一种面向对象的、现代的编程语言,广泛应用于构建桌面应用、Web 应用以及游戏开发等。然而,有时我们可能需要与非托管代码交互,例如调用用C或C++编写的DLL动态链接库。这时,C# 的“平台调用”...

    C#API大全(doc)

    C# API大全涵盖了各种C#编程中可用的库和方法,对于初学者来说,它是一个宝贵的参考资料。本文将深入探讨如何使用C#直接调用Windows API,尤其是从DLL导出的函数。 调用非托管代码,如Windows API,通常是必要的,...

    在MFC下调用C#DLL库函数实例

    在MFC(Microsoft Foundation Classes)框架中调用C#编译的DLL库是跨语言编程的一个常见场景。本文将详细讲解如何实现这一过程,并提供一个实际...提供的"完整可运行实例"应包含所有这些步骤的详细实现,供学习和参考。

    C#调用非托管代码时参考(整理)

    ### C#调用非托管代码的关键知识点 #### 1. 不返回值的参数 当C#需要调用一个不返回值的非托管函数时,主要关注的是如何将参数正确地从C#传递到非托管环境中。 **C++ 原型:** ```cpp bool SendNewSms(char* szTel,...

    extern外部方法使用C#的实现方法

    本文实例讲述了extern外部方法使用C#的方法。分享给大家供大家参考。具体分析如下: 外部方法使用C#步骤如下: 1、增加引用using System.Runtime.InteropServices; 2、声明和实现的连接[DllImport(“kernel32”, ...

    加载好的海康SDK.zip_c# 海康_c#海康SDK_dsSDK.dll_hikvision c#_海康

    此外,海康威视通常也会提供详细的SDK文档,包括函数说明、参数解释和使用示例,这对于开发者来说是非常宝贵的参考资料。 总结来说,海康威视的C# SDK使得开发者能够利用P/Invoke在.NET环境中与海康设备进行交互。...

    简单的c#调用微软语音包

    通过参考nxu_stystem003在博客上的方法,你能够构建起一个简单的C#应用,实现文本到语音的转换。不断实践和学习,你将能够掌握更多关于语音合成的高级技巧,比如调整语速、音调,甚至实现更复杂的语音交互功能。

    C# 调用C++的dll

    在压缩包文件名称列表中的"CSharpCallDLL"可能包含了C#调用C++ DLL的示例代码,你可以参考其中的实现细节,进一步理解和实践这种跨语言调用的方法。 总的来说,C#调用C++ DLL是一项实用技术,它使得开发者能够利用...

    自动关机 C# 自动关机 C#

    在压缩包`AotuShutDown`中,可能包含了完整的C#自动关机程序源代码,供学习和参考。这个源代码会展示如何整合以上步骤,创建一个用户友好的界面,允许用户设置关机时间和自定义消息,然后调用相应的API执行关机操作...

    C#使用OpenCV C++接口读取视频

    在这个过程中,"NeuAviApp"可能是项目的源代码文件或者是一个已经实现的示例应用,你可以参考其代码来更好地理解和实现这个过程。 最后,OpenCV提供了丰富的图像处理和计算机视觉算法,如边缘检测、特征匹配、物体...

    C++调用C#生成的DLL

    如果遇到具体问题,可以参考这些资源,或者访问参考链接以获取更多帮助。 总之,C++调用C# DLL需要理解P/Invoke原理,正确地在C++中声明和调用DLL函数,并确保两边的数据类型和内存管理方式兼容。通过这样的方式,...

    C#的Spooler打印机相关API和Demo

    在提供的"Printer_API_C#"压缩包中,可能包含了实现这些功能的示例代码,供开发者参考和学习。 总的来说,C#结合Spooler API,使开发者能够深入操作系统内部,实现对打印机的精确控制,这对于开发企业级的打印解决...

    NET互操作 C#调用C++ dll 参考

    本参考将详细介绍这一过程的关键步骤和注意事项。 1. **基础知识** - **托管代码与非托管代码**:.NET Framework中的代码称为托管代码,它由CLR(Common Language Runtime)管理,遵循.NET规范。C++ DLL则属于非...

    TSC打印机C#调用代码

    需要注意的是,每个函数的使用都需要参考TSC提供的官方文档,了解其参数含义和返回值,以便正确调用和处理可能出现的错误。 此外,为了调试和优化,你可能需要了解如何处理打印机的错误代码和状态,以及如何使用...

    C# winform键盘钩子示例

    你可以参考这个项目来了解如何在你的WinForm应用中实现自定义的键盘管理功能,从而提高用户体验和交互效率。 总之,C# WinForm中的键盘钩子是一个强大的工具,它使得开发者能够对键盘事件进行全局监控和定制化处理...

    c#调用cpp的一个例子

    本示例将详细讲解如何在C#中调用C++(也称为CLI互操作)的过程,同时参考提供的VS2010工程。 首先,我们需要理解C#和C++之间的互操作主要依赖于.NET框架的COM互操作和托管C++(也称为CLI,Common Language ...

Global site tag (gtag.js) - Google Analytics