C#调用C++代码完整实例

本文代码下载地址:http://download.csdn.net/detail/rickywong_/8530201


【本文目的】

在进行C++/C#开发时,有时会遇到“给C++项目加C#界面”、“用C++实现C#基础功能”等问题而无从下手。本文将介绍一个非常简单的例子:C#调用C++的一个加法函数,再调用类内的减法函数,以此来介绍如何C#通过dll调用C++代码


【创建一个C++程序】

1.新建一个C++ Win32控制台应用程序工程,命名为CppDLL,点击“确定”

技术分享


2.弹出的框框中点“下一步”,然后选中“dll”,点击“完成”

技术分享


3.程序自动创建了CppDLL.cpp,打开并输入以下内容:

<span style="font-size:14px;">#include "stdafx.h"
extern "C" __declspec(dllexport) int Add(int a, int b)
{
	return a + b;
}
</span>
技术分享


4.按一下F5编译代码。自动在Debug目录下生成了dll和lib文件。等下C#程序就是通过这2个文件来调用Add()函数

技术分享



【创建一个C#程序】

1.新建一个C# 控制台应用程序(Windows窗体应用程序一样简单,后面的步骤变通下即可),并命名为“InvokeCpp”

技术分享


2.把刚才的dll和lib文件拷贝到这个C#工程的Debug目录下

技术分享


3.新建一个类,并命名为“InvokeAdd”。这个类用来调用dll

技术分享


4. InvokeAdd的代码如下。 主要是 添加了预处理命令using System.Runtime.InteropServices;和 函数内的两行代码

<span style="font-size:14px;">using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace InvokeCpp
{
    class InvokeAdd
    {
        [DllImport("CppDLL.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
        public static extern int Add(int x, int y);
    }
}
</span>
技术分享


5.打开Program.cs。在其main函数中调用此类,代码如下。运行结果1+2=3,成功在控制台显示。

<span style="font-size:14px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InvokeCpp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(InvokeAdd.Add(1, 2).ToString());
            Console.ReadLine();
        }
    }
}
</span>
技术分享



【C#调用C++类内的函数】

到目前为止已经能调用C++一些基本函数,但是如果函数是封装在类当中呢?简单的方法调用其实一样简单,以下内容介绍如何通过对象调用类内的函数实现减法运算。

1.  打开刚才的C++项目,添加头文件MinusOperation.h

技术分享


2.头文件输入内容:

<span style="font-size:14px;">class MinusOperation
{
public:
	int minus(int a, int b);
};
</span>
技术分享


3新建MinusOperation.cpp并输入内容:

<span style="font-size:14px;">#include"stdafx.h"
#include"MinusOperation.h"
extern "C" __declspec(dllexport) int minus(int a, int b)
{
	return a - b;
}
</span>
技术分享


4.按F5编译,并把dll和 lib复制到C#工程的Debug文件夹下


5. InvokeAdd.cs的代码修改如下:

<span style="font-size:14px;">using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace InvokeCpp
{
    class InvokeAdd
    {
        [DllImport("CppDLL.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
        public static extern int Add(int x, int y);

        [DllImport("CppDLL.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
        public static extern int minus(int x, int y);
    }
}
</span>
技术分享


6. Program.cs的代码修改如下:

<span style="font-size:14px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InvokeCpp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(InvokeAdd.Add(1, 2).ToString());
            Console.WriteLine(InvokeAdd.minus(1, 2).ToString());
            Console.ReadLine();
        }
    }
}
</span>
技术分享


7.运行结果1-2=-1,正确

技术分享








郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。