雪花

一、C++类库与C#类库相互调用

1、C++调用C#类库

1.准备C#类库(dll文件)

1.1.创建C#类库:

右击项目类库生成即可,

出现.dll(类库)与.pdb(pdb文件包含了编译后程序指向源代码的位置信息,

用于调试的时候定位到源代码,主要是用来方便调试的)两个文件。

 设置仅仅生成.dll类库,可以删除.pdb文件

 

1.准备C++类库(dll文件)

在VS2017中新建->项目->Visual C++->Windows桌面->动态链接库;

在项目属性中->常规中选择无公共语言支持,即不创建托管C++类库;

右键头文件---》添加---》新建项(添加.h头文件)
右键源文件---》添加---》新建项(添加.cpp源文件)

代码分别:

mydll.h:

#pragma once
extern "C" _declspec(dllexport) int _stdcall add(int a,int b);

 mydll.cpp:

#include "stdafx.h"
#include "mydll.h"
int _stdcall add(int a, int b)
{
    return (a+b);
}

然后右键解决方案---》重新生成解决方案(先选择Release)(已经生成动态库了)

此路径

 c#调用

using System;
using System.Runtime.InteropServices;

namespace ConsoleAppTemp
{
    class Program
    {
        [DllImport("DllTest.dll")] //DllImport 必须引用using System.Runtime.InteropServices;
        public static extern int add(int a, int b);

        //可以通过EntryPoint特性指定函数入口,然后为函数定义别名
        [DllImport("HelloWorldLib.dll", EntryPoint = "add")]
        public static extern int CustomName(int a, int b);
        static void Main(string[] args)
        {
            int a = add(1, 2);
            Console.WriteLine("输出结果为:" + a.ToString());
            //跟上面是一样的
            int b = add(1, 2);
            Console.WriteLine("输出结果为:" + b.ToString());
            Console.ReadKey();
        }
    }
}

 打开前面C++库生成的目录,将HelloWorldLib.dll复制到C#工程的Debug目录下。

也可以不复制,只需在引用dll的时候写上完整路径就行了。这里我是直接复制到Debug目录下

 

posted @ 2019-08-20 21:43  十色  阅读(4674)  评论(0编辑  收藏  举报