zoukankan      html  css  js  c++  java
  • C#调用C++ DLL 文件

      说来惭愧,都注册一年多了,却没有发表过一篇正式的博文,中间很多学习的过程也没有记录下来。如今到了一个新的环境,也有了学习的机会,一定要把每天的收获记录一下。

      要做的东西需要引用C++编写的DLL,刚开始从网上看到觉得挺麻烦的就没有仔细研究,如今看到别人写的文章,感觉也不是多难。下面分享一下:

    1、整一个DLL

      使用C++创建一个动态库项目,应用程序设置中选择“DLL”

      打开CPPDemo.cpp文件,添加如下代码

      

    #include "stdafx.h"
    extern "C" __declspec(dllexport) int Add(int x, int y) { return x + y; } extern "C" __declspec(dllexport) int Sub(int x, int y) { return x - y; } extern "C" __declspec(dllexport) int Multiply(int x, int y) { return x * y; } extern "C" __declspec(dllexport) int Divide(int x, int y) { return x / y; }

      

      在这里面:extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的(extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。);其次,被它修饰的目标是“C”的。而被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。

          __declspec(dllexport)的目的是为了将对应的函数放入到DLL动态库中。

          extern "C" __declspec(dllexport)加起来的目的是为了使用DllImport调用非托管C++的DLL文件。因为使用DllImport只能调用由C语言函数做成的DLL。

      编译项目,得到CPPDemo.dll

    2、使用C#调用这个DLL

      创建一个C#项目,新建一个CPPDLL类,在类中添加如下代码,就是把要用到的方法重新声明了一下,具体实现代码不用写了。

     public class CPPDLL
        {
            [DllImport("CSharpInvokeCPP.CPPDemo.dll")]
            public static extern int Add(int x, int y);
    
            [DllImport("CSharpInvokeCPP.CPPDemo.dll")]
            public static extern int Sub(int x, int y);
    
            [DllImport("CSharpInvokeCPP.CPPDemo.dll")]
            public static extern int Multiply(int x, int y);
    
            [DllImport("CSharpInvokeCPP.CPPDemo.dll")]
            public static extern int Divide(int x, int y);
    
           
        }
    

      注意1记得要使用DllImport,要引用“System.Runtime.InteropServices”,2、把CPPDemo中生成的DLL文件拷贝到CSharpDemo的bin目录下

      这样在项目中就可以使用DLL的方法了。

    int result = CPPDLL.Add(10, 20);
    

      这只是通过静态方法调用C++里面的函数,对我来说也足够了。暂时就写这些,坚持就是胜利。里面的代码参考了其他人的成果,没有找到作者也不方便说。只想说网络上大家都分享才能进步,如果我写的能帮到你我很高兴。如果你有好的意见,欢迎反馈。

      

      

  • 相关阅读:
    redis发布订阅
    redis学习笔记(面试题)
    redis安全 (error) NOAUTH Authentication required
    HDU3001 Travelling —— 状压DP(三进制)
    POJ3616 Milking Time —— DP
    POJ3186 Treats for the Cows —— DP
    HDU1074 Doing Homework —— 状压DP
    POJ1661 Help Jimmy —— DP
    HDU1260 Tickets —— DP
    HDU1176 免费馅饼 —— DP
  • 原文地址:https://www.cnblogs.com/kui0621/p/4055131.html
Copyright © 2011-2022 走看看