zoukankan      html  css  js  c++  java
  • CS 调用 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库函数

        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)
  • 相关阅读:
    Gym 101606 F-Flipping Coins(概率dp)
    Gym101350 J Lazy Physics Cat
    Gym 101350G
    hdu6188 Duizi and Shunzi (贪心或者dp)
    Gym101350 FMonkeying Around
    codeforce 457DIV2 C题
    codeforce 457DIV2 B题
    codeforce 461DIV2 F题
    codeforce 461DIV2 E题
    PE文件RV转FOA及FOA转RVA
  • 原文地址:https://www.cnblogs.com/llil/p/13442459.html
Copyright © 2011-2022 走看看