如何调用非托管dll(托管与非托管)

如何调用非托管dll,托管与非托管内容导航:如何使用C调用非托管DLL函数怎样在非托管环境里调用托管DLL解决办法C#中提到的非托管的dll和托管的dll,两者有什么不同吗DllImport引用非托管dll一、如何使用C调用非托管DLL函数引用:用C#来捕获屏幕的源程序代码()#regionC#捕获当前屏幕的例子using

如何调用非托管dll,托管与非托管

内容导航:

  • 如何使用C调用非托管DLL函数
  • 怎样在非托管环境里调用托管DLL解决办法
  • C#中提到的非托管的dll和托管的dll,两者有什么不同吗
  • DllImport 引用非托管dll
  • 一、如何使用C调用非托管DLL函数

    引用: 用C#来捕获屏幕的源程序代码()#region C#捕获当前屏幕的例子using System ; using ; using ns ; using
    Model ; using ; using ; using ; public class Form1 : Form { private Button
    button1 ; private components = null ; public Form1 ( ) { //初始化窗体中的各个组件
    InitializeComponent ( ) ; } // 清除程序中使用过的资源 protected override void Dispose (
    bool disposing ) { if ( disposing ) { if ( components != null ) { ( ) ; } } (
    disposing ) ; } private void InitializeComponent ( ) { button1 = new Button (
    ); SuspendLayout ( ) ; = new ( 64 , 40 ) ; = “button1” ; = new ( 80 , 32 ) ; =
    0 ; = “捕获” ; += new ler ( button1_Click ) ; AutoScaleBaseSize = new ( 6 , 14 )
    ; ClientSize = new ( 216 , 125 ) ; ( button1 ) ; MaximizeBox = false ;
    MinimizeBox = false ; Name = “Form1” ; Text = “C#捕获当前屏幕!” ; ResumeLayout (
    false ) ; } //声明一个API函数 [ Attribute ( “” ) ] private static extern bool BitBlt
    ( IntPtr hdcDest , // 目标 DC的句柄 int nXDest , int nYDest , int nWidth , int
    nHeight , IntPtr hdcSrc , // 源DC的句柄 int nXSrc , int nYSrc , 32 dwRop //
    光栅的处理数值 ) ; static void Main ( ) { ( new Form1 ( ) ) ; } private void
    button1_Click ( object sender , e ) { //获得当前屏幕的大小 Rectangle rect = new
    Rectangle ( ) ; rect = gArea ( this ) ; //创建一个以当前屏幕为模板的图象 Graphics g1 = phics
    ( ) ; //创建以屏幕大小为标准的位图 Image MyImage = new Bitmap ( , , g1 ) ; Graphics g2 = (
    MyImage ) ; //得到屏幕的DC IntPtr dc1 = ( ) ; //得到Bitmap的DC IntPtr dc2 = ( ) ;
    //调用此API函数,实现屏幕捕获 BitBlt ( dc2 , 0 , 0 , , , dc1 , 0 , 0 , ) ; //释放掉屏幕的DC c (
    dc1 ) ; //释放掉Bitmap的DC c ( dc2 ) ; //以JPG文件格式来保存 ( @”c:\” , ); (
    “当前屏幕已经保存为C盘的文件!” ) ; } }#endregion上面的例子中,应用C#调用非托管DLL的函数如下://声明一个API函数 [
    Attribute ( “” ) ] private static extern bool BitBlt ( IntPtr hdcDest , // 目标
    DC的句柄 int nXDest , int nYDest , int nWidth , int nHeight , IntPtr hdcSrc , //
    源DC的句柄 int nXSrc , int nYSrc , 32 dwRop // 光栅的处理数值 ) ;在上面这段代码中,我将以分别介绍
    DllImportAttribute属性、extern关键字 、IntPtr类型 这三个方面,向大家介绍如何应用C#调用非托管DLL函数。C# 如何使用
    DllImport Attribute(属性) 标识 DLL 和函数Attribute从托管代码中访问非托管 DLL 函数之前,需要知道该函数的名称以及该
    DLL 的名称,然后为 DLL 的非托管函数 编写 托管定义。它将用到 static 和 extern 修饰符,此类型的公共静态成员对于多线程操作是安全的。

    二、怎样在非托管环境里调用托管DLL解决办法

    1、打开腾讯电脑管家找到工具箱;2、打开工具箱找到“电脑诊所”3、打开电脑诊所后在右上角的搜索内输入dlL找到需要修复的文件后点击一键修复或者可以点击详情查看原因并点击立即修复。
    楼主别试了。
    对于非托管代码,非托管的和托管的都可以访问的。
    就象这个库一样,loadlibrary或者dllimport分别在两种地方就可以直接调用了。
    但对于托管代码,非托管代码是无法调用的。
    理由,托管代码是运行在dotnetfx的解释容器里的。
    这点有点象java的东西是运行在java虚拟机里一样。
    而调用方如果是非托管的话,怎么能搞这个他怎么没办法读得懂,看得懂的东西呢? 其实你mfc可以弄成托管的代码的。
    呵呵

    三、C#中提到的非托管的dll和托管的dll,两者有什么不同吗

    答:托管DLL,说白了,就是完全由.NET托管代码实现的DLL,完全依赖于.NET平台的CLR运行。托管DLL,受.NETCLR管控,支持内存自动回收等的,对于.NET平台是安全DLL非托管DLL,是指完全或者部分不是用.NET代码实现,不依赖于.NET平台即可运行,例如COM方式的DLL,不支持自动回收内存,对于.NET平台而言,也是非安全可控的。

    四、DllImport 引用非托管dll

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

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/102364.html

    (0)
    robot
    上一篇 2022-04-14
    下一篇 2022-04-14

    相关推荐

    • 建站的软件有什么区别(建站方式有哪些)

      建站的软件有什么区别,建站方式有哪些 内容导航: 建站软件之间有什么区别呢选择哪个好呢 快速建站的软件是什么 传统建站跟现在建站有什么区别吗 建站之星和智能建站,有什么区别和优势 …

      2022-05-17
      0
    • python的re库怎么使用

      re库是Python中用于正则表达式操作的标准库之一,可以用来进行字符串的模式匹配、查找、替换等操作。要使用re库,首先需要导入该库:import re接下来,可以使用re库中的函数来进行各种正则表达式操作。re.match():尝试从字符串的起始位置匹配一个模式,如果匹配成功,则返回匹配对象,否则返回None。match_obj = re.match(pattern, string)re.s

      2024-01-24
      0
    • php中elseif语句的特点有哪些

      elseif语句用于在if条件不满足时继续判断另一个条件。elseif语句可以帮助简化多个条件判断的代码结构,避免使用多个嵌套的if语句。elseif语句可以用来处理多个条件下的逻辑判断,提高代码的可读性和可维护性。elseif语句的执行顺序是按照代码中的顺序依次判断条件,并在找到第一个满足条件的分支后执行对应的代码块。

      2024-03-26
      0
    • java如何删除文件夹及所有文件

      在Java中,可以使用递归的方法来删除文件夹及其所有文件。以下是一个示例代码:import java.io.File;public class DeleteFolder {public static void main(String[] args) {String folderPath = “path/to/folder”;File folder = new File(folderPath);i

      2024-04-16
      0
    • CDN服务器租用有什么优势

      CDN服务器租用具有以下优势:提高网站性能:CDN服务器可以帮助加速网站的加载速度,减少页面加载时间,提升用户体验。提高网站稳定性:CDN服务器可以分担网站服务器的负载,减轻原始服务器的压力,提高网站的稳定性和可靠性。全球覆盖:CDN服务器分布在全球各地,可以提供全球范围内的内容分发服务,使用户可以更快速地访问网站内容,不受地理位置的限制。提高安全性:CDN服务器可以提供安全防护,保护网站免受DD

      2024-04-30
      0
    • php怎么实时更新指定的内容

      要实现php实时更新指定的内容,可以使用Ajax技术。具体步骤如下:在前端页面中使用Ajax发送请求到后端的php文件。可以使用jQuery库来简化Ajax的操作。$.ajax({url: 'update_content.php',type: 'POST',data: {content: '要更新的内容'},success: functi

      2024-04-22
      0