首页 > 编程语言 >将C++ DLL文件输出设置到项目调试目录

将C++ DLL文件输出设置到项目调试目录

时间:2024-07-08 21:28:27浏览次数:19  
标签:int void C++ DLL API COM 调试

将C++ DLL文件输出设置到项目调试目录

在项目开发过程中,有时需要边开发DLL代码,边开发项目,将DLL文件输出设置到解决方案的项目调试目录,调试过程中可一键生成解决方案,省去重新更换DLL文件的过程。

前提:在同一解决方案下添加项目工程与DLL工程。
前文提示:关于C++ DLL的封装可参考: C++ 如何封装代码成DLL 动态链接库供其他项目或编程语言使用

本文将在C# 项目下进行调用C++ DLL,关于C# 调用C++ DLL 可参考: c# 如何调用C++ 动态链接库DLL文件

1 工程设置

1、获取项目exe目录:
本项目调试过程exe生成目录:D:\workspace\MySolutions\DLLSolution\ConsoleApp1\bin\Debug\net6.0
这里可根据自己的实际情况设置;
2、设置DLL生成目录至项目exe生成目录:
右击DLL工程,点击属性:
DLL输出设置
点击确认,完成设置。

2 测试设置效果

使用c# 如何调用C++ 动态链接库DLL文件中的代码,再添加测试代码进行测试:
DataTestDLL.h中添加// 同输出路径测试代码:COM_API void COM_PrintHelloS();

#pragma once

#ifdef COM_API
#else
#define COM_API __declspec(dllexport)
#endif // COM_API

#ifdef __cplusplus
extern "C" {
#endif
	COM_API void COM_PrintHello();
	// 返回值为int
	COM_API int COM_Add(int a, int b);
	// 同输出路径测试代码
	COM_API void COM_PrintHelloS();
#ifdef __cplusplus
}
#endif // __cplusplus

DataTestDLL.cpp中添加实现代码:

#include "DataTestDLL.h"
#include <iostream>

COM_API void COM_PrintHello()
{
	std::cout << "Hello World from DLL!\n";
}

COM_API int COM_Add(int a, int b)
{
	return a + b;
}

COM_API void COM_PrintHelloS()
{
	std::cout << "Hello World from DLL! Same OutDir with exe\n";
}

C# 代码中添加声明与实现调用:

using System.Runtime.InteropServices;

namespace ConsoleApp1
{
    internal class Program
    {

        [DllImport("DataTestDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern void COM_PrintHello();

        [DllImport("DataTestDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int COM_Add(int a, int b);

        [DllImport("DataTestDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern void COM_PrintHelloS();

        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World from C#!");

            COM_PrintHello();

            int sum = COM_Add(2, 3);
            Console.WriteLine("sum is {0}", sum);

            COM_PrintHelloS();
        }
    }
}

运行:右击解决方案,点击生成解决方案;完成后,直接运行项目,查看运行结果。
运行结果
查看结果,运行成功。

后记:

设置C++ DLL 输出目录与项目调试目录一致,可在边开发调试DLL的同时,边开发调试项目,对项目调试有很大帮助,记录下。水平有限,如有错漏或更好的方法,欢迎评论区留言。

标签:int,void,C++,DLL,API,COM,调试
From: https://blog.csdn.net/renburning/article/details/140278539

相关文章

  • C++基础入门语法--代码基础框架
    文章内容概括:了解学习导入头文件、使用usingnamespacestd简化代码、创建程序基础框架、学习使用return(如需要直接复制请到文章最末尾)正文:1.学习导入头文件:    在Dev-C++编辑器中新建文件,在文件的第一行中输入:#include<iostream>    以上代码为C++导入......
  • c++ primer plus 第15章友,异常和其他:异常,15.3.5 异常规范和 C++11
    c++primerplus第15章友,异常和其他:异常,15.3.5异常规范和C++1115.3.5异常规范和C++11文章目录c++primerplus第15章友,异常和其他:异常,15.3.5异常规范和C++1115.3.5异常规范和C++1115.3.5异常规范和C++11有时候,一种理念看似有前途,但实际的使用效果并......
  • c++ primer plus 第15章友,异常和其他:15.3.1 调用abort()02
    c++primerplus第15章友,异常和其他:15.3.1调用abort()02调用abort()02文章目录c++primerplus第15章友,异常和其他:15.3.1调用abort()0215.3.1调用abort()15.3.1调用abort()对于这种问题,处理方式之一是,如果其中一个参数是另一个参数的负值,则调用abort(......
  • c++ primer plus 第15章友,异常和其他:异常,15.3.3 异常机制
    #c++primerplus第15章友,异常和其他:异常,15.3.3异常机制异常,15.3.3异常机制文章目录15.3.3异常机制15.3.3异常机制程序清单15.9error3.cpp程序清单15.10excmean.h程序清单15.11error4.cpp15.3.3异常机制15.3.3异常机制下面介绍如何使用异常机制来处......
  • 自动驾驶感知项目-基于多线激光雷达的小目标锥桶空间位置检测算法(ROS,C++,滤波)
    一:序言想了解更多自动驾驶项目课程以及获取学习代码的可以参考这个链接无人车采用纯跟踪算法跟随离线路径感知锥桶项目中:滤波处理是进行激光雷达目标检测的常见步骤,对原始点云数据进行预处理达到减少噪声、无效点或者数据量的效果。常用的点云滤波方法包括体素滤波、法......
  • C++数据结构底层实现算法
    1.vector底层数据结构为数组,支持快速随机访问2.list底层数据结构为双向链表,支持快速增删3.deque底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问deque是一个双端队列(double-endedqueue),也是在堆中保存内容的.每个......
  • C++ 入门02:控制结构和循环
    往期回顾:C++入门01:初识C++一、前言在上一篇文章学习中,我们了解了C++程序的基本结构、注释、数据类型、变量以及输入输出的基本用法。这一篇,我们将继续深入学习C++的控制结构和循环。二、控制结构和循环2.1、条件语句条件语句是编程中非常重要的一部分,它们允许......
  • 01day C++初入学习
    这里写目录标题1.C++区别于C的输入输出2.什么是命名空间3.namespace的定义namespace的使用(1)namespace嵌套使用(2)多⽂件中可以定义同名namespace(3)4.命名空间的使用5.C++输⼊&输出6.缺省参数7.函数重载8.引用8.1引用的特性8.3引用的使用1.C++区别于C的输入输出......
  • csc.exe 是 Microsoft Visual C# 编译器的命令行工具。它用于编译 C# 源代码文件 (.cs
    csc.exe是MicrosoftVisualC#编译器的命令行工具。它用于编译C#源代码文件(.cs文件)到可执行文件或者库文件(例如.exe或.dll)。具体来说,csc.exe是用来将C#源代码编译成.NETFramework或.NETCore平台上的可执行文件或者库的工具。以下是一些常见用途和特点:......
  • C++ string基础用法
    基本操作构造与初始化默认构造:创建一个空字符串 std::strings;从C风格字符串构造:std::strings="Hello";从范围构造:std::strings(begin,end);从迭代器构造:std::strings(it_begin,it_end);从字符数组构造:std::strings(arr,arr+size);从重复字符构造:std::stri......