C# 中[DllImport("user32.dll")]和extern用法和示例----转载
原文:https://blog.csdn.net/michellehsiao/article/details/7629746
extern 修饰符用于声明在外部实现的方法。extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与DllImport 特性一起使用。在这种情况下,还必须将方法声明为static,如下示例所示:
- [DllImport("user32.dll.dll")]
- 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 返回。
C# 中[DllImport("user32.dll")]和extern用法和示例----转载的更多相关文章
- Win32 API中的user32.dll中的ShowWindow方法参数整理
在使用ShowWindow方法来设置窗体的状态时,由于不知道参数值,用起来非常容易混乱,所以整理了以下其参数的枚举值,方便以后的的使用. public class User32API { #reg ...
- C#中调用user32.dll库的keybd_Event函数,操作键盘
keybd_event()的函数原型是: void keybd_event( byte bVk, //虚拟键码 byte bScan, //该键的硬件扫描码 dword ...
- C#中可直接调用WIN32的API函数--USER32.DLL
Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...
- Winform API "user32.dll"中的函数
命名空间:System.Runtime.InteropServices /// <summary> /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在G ...
- 【转】c# 调用windows API(user32.dll)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- user32.dll
user32.dll中的所有函数 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- [DllImport("kernel32.dll")]是什么意思??
转载自:http://blog.csdn.net/sp6645597/article/details/8683737 1.简单说明 这叫引入kernel32.dll这个动态连接库(顾名思义就是一个链接 ...
- C#中DllImport用法和路径问题
DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息. DllImport属性应用于方法,要 ...
- 【WinAPI】User32.dll注释
#region User32.dll 函数 /// <summary> /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备 ...
随机推荐
- 腾讯云Windows Server下nodejs websocket ssl配置
1.从腾讯云申请SSL证书,下载解压,得到如下文件: 2.nodejs代码: // wss.js const fs = require('fs'); // 一些配置信息 const cfg = { p ...
- 批量导出存储在msdb库的SSIS包
http://blog.51cto.com/ultrasql/1924464 use msdb go IF OBJECT_ID('msdb.dbo.usp_ExportSSISPkgs') IS NO ...
- 《Web安全攻防 渗透测试实战指南 》 学习笔记 (三)
Web安全攻防 渗透测试实战指南 学习笔记 (三) burp suite详解 是一款集成化渗透测试工 ...
- Golang 函数以及函数和方法的区别
在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西.官方的解释是,方法是包含了接 ...
- Golang redis 学习指南
安装 我使用的是 https://github.com/go-redis/r... 这个 golang 客户端, 因此安装方式如下: go get gopkg.in/redis.v4 接着在代码中导入 ...
- JS线程及回调函数执行
JS是单线程的程序,在某些方面来讲并不是十分准确.在浏览器的内核里面有很多的模块,比如js的解释执行的模块,html.css的处理模块,渲染模块等,多数模块是单线程执行的,但是有几个模块是多线程的,比 ...
- 【Python】【Django】用户注册功能
GET方法前置步骤做完 stu.models.py 再其中创建需要用到的字段及对应数据库的表 # -*- coding: utf-8 -*- from __future__ import unicod ...
- 关于Android发送邮件
Google 在发表 Android 手机平台时,强调的是超强大的网络支持能力,因此,无论通过 GPRS.3G的电信网络或者是Wifi的无线WLAN网络,都能够发EMAIL. 发送邮件中使用的Inte ...
- vue.js ③
1.组件使用的细节点 H5编码中的规范是tr必须在tbody里所以不能直接套用<row></row>的写法,<ul>标签下支持<li>,select标签 ...
- mysql之指定为definer的用户不存在
问题描述: java.sql.SQLException: The user specified as a definer ('tsingsoft'@'%') does not exist 解决: 1. ...