C#调用C++ DLL 文件_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#调用C++ DLL 文件

C#调用C++ DLL 文件

 2014/10/27 23:02:50  kui1992  程序员俱乐部  我要评论(0)
  • 摘要:说来惭愧,都注册一年多了,却没有发表过一篇正式的博文,中间很多学习的过程也没有记录下来。如今到了一个新的环境,也有了学习的机会,一定要把每天的收获记录一下。要做的东西需要引用C++编写的DLL,刚开始从网上看到觉得挺麻烦的就没有仔细研究,如今看到别人写的文章,感觉也不是多难。下面分享一下:1、整一个DLL使用C++创建一个动态库项目,应用程序设置中选择“DLL”打开CPPDemo.cpp文件,添加如下代码#include"stdafx
  • 标签:

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

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

1、整一个DLL

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

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

  

class="brush:csharp;gutter:true;">#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++里面的函数,对我来说也足够了。暂时就写这些,坚持就是胜利。里面的代码参考了其他人的成果,没有找到作者也不方便说。只想说网络上大家都分享才能进步,如果我写的能帮到你我很高兴。如果你有好的意见,欢迎反馈。

  

  

上一篇: asp.net与C# path.GetFullPath 获取上级目录 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名