• C# 中[DllImport("user32.dll")]和extern用法和示例----转载


          原文:https://blog.csdn.net/michellehsiao/article/details/7629746
            extern 修饰符用于声明在外部实现的方法。extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与DllImport 特性一起使用。在这种情况下,还必须将方法声明为static,如下示例所示:
    1. [DllImport("user32.dll.dll")]
    2. private static extern void IsWindowVisible();

            extern 关键字还可以定义外部程序集别名,使得可以从单个程序集中引用同一组件的不同版本。将 abstract和 extern 修饰符一起使用来修改同一成员是错误的,使用 extern 修饰符意味着方法在 C# 代码外部实现,而使用 abstract 修饰符意味着在类中未提供方法实现。这里定义声名动态链接库user32.dll作为静态入口点。

            在VS项目中通过DllImport引入一个DLL和添加引用方式添加一个DLL区别在于:DllImpor针对非托管的,非托管的指的是不利用.net 生成的DLL;引用是针对托管的。

            static extern int IsWindowVisible(); 表示声明一个外部实现方法IsWindowVisible(), 自己的dll里必须有这个方法才行。你的IsWindowVisible方法必须在dll中存在还有dll不必须注册,注册就是让系统知道它在哪里以及一些信息,你自己指明位置跟注册一个效果。DLLimport支持的是非.net框架下面的DLL如C++ 这类编写的  用.net框架编写出来的dll 就可以直接引用啦。

    应用举例:

    示例使用 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() 返回 50。

    生成项目:

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

      cl /LD Cmdll.c

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

      csc CM.cs

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

  • 相关阅读:
    ZooKeeper 相关知识
    zookeeper 启动和停止脚本
    es 6.4.3 版本的es的处理方式
    SpringBoot启动使用elasticsearch启动异常:Received message from unsupported version:[2.0.0] minimal compatible
    windows下安装elasticsearch-6.4.3和elasticsearch-head插件
    二项式公式
    计算公式
    大规模数据如何检索?
    设计数据服务:为报表服务提供服务接口
    win10 桌面快捷键技术
  • 原文地址:https://www.cnblogs.com/bedfly/p/12103130.html
Copyright © 2020-2023  润新知