VS2019 创建dll并在C# 中调用

使用VS2019创建一个简单的dll并在C# 中调用它,在此记录一下使用过程。

一 创建dll

创建一个windows C++ 库
在这里插入图片描述
项目名称是add
在这里插入图片描述
添加add.h 和 add.cpp文件
在头文件处,鼠标右键,弹出菜单选择【添加】-》【类】
在这里插入图片描述

填写类名【add】,点击确定,会自动添加了add.h 和 add.cpp文件
在这里插入图片描述

在这里插入图片描述

DllMain函数 是dll的入口函数,具体介绍可参考百度百科的介绍:https://baike.baidu.com/item/DllMain?fromModule=lemma_inlink
在这里插入图片描述

add.h头文件,删除自动生成的类,我们写简单的加减乘除函数。
在这里插入图片描述
在这里插入图片描述

add.h 代码如下

#pragma once
#ifndef _ADD_H
#define _ADD_H
extern "C" _declspec(dllexport) long DemoAdd(long a, long b);
extern "C" _declspec(dllexport)  long DemoSub(long a, long b);
extern "C" _declspec(dllexport)  long DemoMul(long a, long b);
extern "C" _declspec(dllexport)  long DemoDiv(long a, long b);
#endif

add.cpp 如下,写函数的实现
在这里插入图片描述
add.cpp具体代码如下:

#include "pch.h"
#include "add.h"

long DemoAdd(long a, long b)
{
	return a + b;
}

long DemoSub(long a, long b)
{
	return a - b;
}

long DemoMul(long a, long b)
{
	return a * b;
}

long DemoDiv(long a, long b)
{
	return a / b;
}

设置项目的属性

鼠标右键【add】项目,选择【属性】。在【配置属性------> C/C+±------>预编译头】,选择【不使用预编译头
在这里插入图片描述

生成dll
鼠标右击项目【add】,选择【生成】,在项目目录下可以看到dll已经生成了
在这里插入图片描述

二 调用dll

在这里,新一个windform的工程,来测试一下调用add.dll中的函数。
创建测试工程
在这里插入图片描述
在这里插入图片描述

工程创建完毕后,运行一下。将前面生成的add.dll复制到测试工程的exe运行程序目录下
在这里插入图片描述

简单设计一下布局
在这里插入图片描述

具体代码如下:
DllImport 的命名空间using System.Runtime.InteropServices

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;


namespace testAdd
{
    public partial class Form1 : Form
    {
                   //dll名称     //dll中入口点的名称   //入口点的调用约定
        [DllImport("add.dll", EntryPoint = "DemoAdd", CallingConvention = CallingConvention.Cdecl)]
        //CallingConvention = CallingConvention.Cdecl 意味着参数可变长
        public static extern int Add(int lA, int lB);


        [DllImport("add.dll", EntryPoint = "DemoSub", CallingConvention = CallingConvention.Cdecl)]
        public static extern int Sub(int lA, int lB);


        [DllImport("add.dll", EntryPoint = "DemoMul", CallingConvention = CallingConvention.Cdecl)]
        public static extern int Mul(int lA, int lB);


        [DllImport("add.dll", EntryPoint = "DemoDiv", CallingConvention = CallingConvention.Cdecl)]
        public static extern int Div(int lA, int lB);



        public Form1()
        {
            InitializeComponent();
        }

        private void BtnCalculate_Click(object sender, EventArgs e)
        {
            int a = (int)numericUpDown1.Value;
            int b = (int)numericUpDown2.Value;
            int c = Add(a, b);
            textBox1.Text = c.ToString();

            textBox2.Text = Sub(a, b).ToString();

            textBox3.Text = Mul(a, b).ToString();

            textBox4.Text = Div(a, b).ToString();
        }
    }
}

运行结果如下:
在这里插入图片描述

注意:
调用的dll生成的是x86还是x64的,被调用者testAdd也需要注意一下运行的平台是否一致哈。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值