C#调用C++创建的动态库

系统:Win10
开发工具:VS2015

编译DLL

  1. 启动VS2015->文件->新建->项目,按下图进行选择填写,选择Win32控制台应用程序或Win32项目都可以,这两相都会弹出相同的创建窗口。
    在这里插入图片描述
  2. 在Win32应用程序向导对话框中选择【下一步】 在这里插入图片描述
  3. 按下图进行勾选
    导出符号作用:
    生成的代码中会自动包含一个导出变量、一个导出函数和一个导出类的示例,并且对应的.h文件中也会创建相应的导出操作,可加快程序开发。
    预编译头作用:
    VS 默认情况下会创建并使用预编译头文件(也就是自动创建 StdAfx.h 和 StdAfx.cpp 这两个文件),以便在编译时加快编译速度,预编译器将它编译后,会生成一个 Pre-compiled header ,也就是 pch 文件,这样下次就可以直接使用这里已经编译好了的代码了。
    在这里插入图片描述
  4. 整个测试项目创建后,整体效果如下图: 在这里插入图片描述
  5. 将MyDLL.cpp中红色框内VS自动创建的示例代码删除掉
    在这里插入图片描述
  6. 将MyDLL.h中红色框内VS自动创建的示例代码删除掉
    在这里插入图片描述
  7. MyDLL.h中添加函数Add导出形式,注意是EXTERN_C,以C语言函数名导出可以保证导出的函数名不变 在这里插入图片描述
EXTERN_C MYDLL_API int Add(int a, int b);
  1. MyDLL.cpp中添加如下图红色框中的函数Add的实现代码 在这里插入图片描述
MYDLL_API int Add(int a, int b)
{
	return a + b;
}
  1. 生成解决方案,此时在项目的目录的Debug文件夹下会看到生成的DLL。
    生成时注意,选择Release还是Debug,还有选择X86,还是X64.
    一般选择Release,因为Release快。这里选择Release,x86. 在这里插入图片描述

C#调用编译的DLL

  1. 创建C#窗体应用程序,调用C++创建的DLL
    在这里插入图片描述
  2. 创建后的整体效果如下图:注意这里的Debug,x86.
    在这里插入图片描述
  3. 生成该项目,然后将编译好的dll拷贝到Debug文件夹下
  4. 往窗体上拖入一个Label控件,用于显示计算结果,然后双击窗体进入代码,添加如下
    在这里插入图片描述
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace WinMyDLL
{
    public partial class Form1 : Form
    {
        [DllImport("MyDLL.dll", EntryPoint = "Add", CallingConvention = CallingConvention.Cdecl)]
        extern static int Add(int a, int b);

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            int v = Add(2, 4);
            label1.Text = v.ToString();
        }
    }
}
  1. 在WinMyDLL项目上右击选择【设为启动项目】,然后运行程序,结果如下图所示: 在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值