page contents

c# 调用c动态库

本文讲述了c# 调用c动态库!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-07-wRf6jYnI62be53b310201.png

本文讲述了c# 调用c动态库!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

使用C#程序模版

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库函数

classMathCall
{
    [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)

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2022-07-01 09:54
  • 阅读 ( 477 )
  • 分类:C/C++开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章