Bootstrap

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

将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的同时,边开发调试项目,对项目调试有很大帮助,记录下。水平有限,如有错漏或更好的方法,欢迎评论区留言。

;