zoukankan      html  css  js  c++  java
  • 在.net C#里怎样调用非托管动态库函数dll?

    这里讲述的是C#调用标准动态库的问题, 在我以前的文件中讲到过, C#调用Win32API, 原理是一样的. 这里我详细讲解用C写一个标准的动态库, 然后让C#调用. (本篇适合初学者, 中间没有任何冗余代码, 简洁明了)
    软件环境: VC6.0(当然其他版本的VC5也可以)
    1.制作标准动态库
    __declspec(dllexport) int __cdecl add(int, int);//这一句是声明动态库输出一个可供外不调用的函数原型.
    int add(int a,int b) {//实现这个函数
    return a+b;
    }
    以上简单3行代码,声明一个add的方法, 输入参数是两个int参数,返回这两个数之和. 保存为MyLib.c
    然后执行编译命令.
    H:\XSchool\C#-School\HowTo>cl /LD MyLib.c
    Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
    Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

    MyLib.c
    Microsoft (R) Incremental Linker Version 6.00.8447
    Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

    /out:MyLib.dll
    /dll
    /implib:MyLib.lib
    MyLib.obj
      Creating library MyLib.lib and object MyLib.exp

    确信有以上输出, 说明编译成功生成了动态库.

    2.编写C-Sharp程序调用该动态库
    using System;
    using System.Runtime.InteropServices;//这是用到DllImport时候要引入的包

    public class InvokeDll {
    [DllImport("MyLib.dll", CharSet=CharSet.Auto)]
    static extern int add(int a,int b);//声明外部的标准动态库, 跟Win32API是一样的.

    public static void Main() {
    Console.WriteLine(add(10,30));
    }
    }
    保存为InvokeDll.cs文件, 与MyLib.dll置于同一目录, 编译该文件.
    H:\XSchool\C#-School\HowTo>csc invokedll.cs
    将生成Invokedll.exe, 可以执行该文件.
  • 相关阅读:
    pycharm调试时出现十分缓慢,变量数据没法预览的解决办法
    gitignore设置失效的问题
    存储过程计算两个时间段的请假天数
    Vue 多层级目录拖动排序
    vue 动态插入渲染html
    Vue:eliment-ui el-tree动态加载更新
    Angular2+ iframe跨域调用父页面js
    Angular2.0+动态绑定html文本
    Angular2.0+开发 -实现部门树形结构
    Angular2.0+开发(1)-WebStorm配置及第一个Hello World
  • 原文地址:https://www.cnblogs.com/wzyexf/p/563737.html
Copyright © 2011-2022 走看看