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

  • 相关阅读:
    volatile 和 mutable 关键字
    字符串第一个只出现一次的字符
    学一下HDFS,很不错(大数据技术原理及应用)
    把数组排成最小的数
    求第K大的数字
    数组中超过一半的数字
    打印字符的任意排列
    实时推荐系统架构
    带有任意指向指针的链表进行复制
    surfaceflinger中各个layer的排序
  • 原文地址:https://www.cnblogs.com/fger/p/11385855.html
Copyright © 2011-2022 走看看