1、C++调用C#类库

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

1.1.创建C#类库:

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

右击项目类库生成即可,

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

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

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

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

 

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

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

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

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

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

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

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

代码分别:

mydll.h:

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

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

 mydll.cpp:

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

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

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

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

此路径

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

 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目录下

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

 

相关文章:

  • 2021-04-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-26
  • 2022-02-13
猜你喜欢
  • 2022-12-23
  • 2021-12-29
  • 2021-05-12
  • 2022-12-23
  • 2021-07-24
相关资源
相似解决方案