将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工程,点击属性:
点击确认,完成设置。
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的同时,边开发调试项目,对项目调试有很大帮助,记录下。水平有限,如有错漏或更好的方法,欢迎评论区留言。