• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#调用C动态库

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            /* 我的第一个 C# 程序*/
            Console.WriteLine("Hello World");
            Console.ReadKey();
        }
    }
}

添加命名空间

using System.Runtime.InteropServices;

添加调用声明

在命名空间ConsoleApplication1中添加一个类,用于声明待调用的外部的C库函数

class MathCall
{
    [DllImport(@"libmath.dll")]
    public static extern int sub(int a, int b);
}

添加调用

Main函数中通过引用类成员的方法来调用函数

int n = MathCall.sub(9,1);

编译

使用Visual Studio的命令提示工具环境,编译语句如下:

//编译64位
csc.exe helloworld.cs

//编译32位
csc.exe /platform:x86 helloworld.cs

要注意的地方

并不是用C#为开发语言,写C#的目的也是为例演示如何调用自己的C库,因此这里不说明C#语法,只是记录与C/C++差异与调用C库用到的一些细节。

  1. 在类里写函数需要像Main函数一样加static声明。
  2. 把库函数声明写到一个类里,并加上[DllImport(@"libmath.dll")]public static extern声明,后续函数通过类调用。
  3. 把C库放到可执行程序路径下。
  4. 可以使用byte[]代替unsigned char *,类似的指针类的参数都转换为数组。
  5. 可以使用Array.Copy(src, des, len);代替memory(des, src, len)
  6. 二维数组与一维数组。
//当作有10个64字节一维数组的二维数组
byte[] src = new byte[10*64];
byte[] des = new byte[64];

//源、源起始、目标、目标起始、拷贝长度
Array.Copy(src, 2*64, des, 0, 64);
  1. 分配空间不需要手动释放
  2. while(1)要写成while(true)

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
在C#中画同心圆发布时间:2022-07-13
下一篇:
C#判断一个字符串是否为url发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap