zoukankan      html  css  js  c++  java
  • 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 返回。

  • 相关阅读:
    weblogic静默安装指导
    简单说一下 servlet的生命周期?
    简单讲一下 SpringMVC的执行流程?
    讲一下 Spring的事务传播特性
    Spring事务的隔离级别
    面试资料
    ArrayList 和 HashMap 的默认大小是多数?
    spring-mvc里的 <mvc:resources> 及静态资源访问
    说说Java中的资源文件的读取
    JVM-String常量池与运行时常量池
  • 原文地址:https://www.cnblogs.com/bedfly/p/12103130.html
Copyright © 2011-2022 走看看