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

  • 相关阅读:
    项目设计之---------- 模版模式利用
    项目设计之一------简单工厂模式利用
    项目设计之----命令模式的利用
    项目设计之一---------- 代码重构
    项目设计之---------- 类的设计原则
    项目设计之一-------------项目包的设计原则(原)
    模式经验/理解
    Java常量定义需要注意事项及static作用(复习)
    H2数据库使用 详解
    开源数据库 H2, HSQLDB, DERBY, PostgreSQL, MySQL区别/对比图表( 附加翻译) h2数据库
  • 原文地址:https://www.cnblogs.com/fger/p/11385855.html
Copyright © 2011-2022 走看看