zoukankan      html  css  js  c++  java
  • 一、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目录下

  • 相关阅读:
    springboot2 + prometheus + grafana 监控整合
    vs code 快捷键总结
    java8 concurrecy
    java8 localdatetime timestamp 转换
    有意思的网站
    评价搜索引擎质量
    转载一篇文章
    csdn 站点使用
    百度站点平台
    好的文章聚合站点
  • 原文地址:https://www.cnblogs.com/fger/p/11385855.html
Copyright © 2011-2022 走看看