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

  • 相关阅读:
    剑指offer十二之数值的整数次方
    剑指offer十一之二进制中1的个数
    剑指offer十之矩形覆盖
    剑指offer九之变态跳台阶
    剑指offer八之跳台阶
    程序员的生活观
    程序员,如何远离你的电脑
    生活管理实用技能
    分享共筑 : 伟大的理念
    技术人员,要学会关心别人
  • 原文地址:https://www.cnblogs.com/fger/p/11385855.html
Copyright © 2011-2022 走看看