c# - 在同一解决方案中从 c# 项目到 c++ 项目的 DllImport
问题描述
我有两个项目的解决方案:
- C# 控制台应用程序 (.NET Core 3.1)
- 和 C++ 动态库 (.dll)
我需要从 C# 项目中调用 C++ DLL,使用DllImport
. 当我提供 DLL 的完整路径时,应用程序会找到它。但是我想用相对路径替换路径,我不知道该怎么做。
解决方案
首先,使 C++ 项目成为 C# 项目的依赖项。如果 C# 项目过时,这可确保 C++ 项目将在 C# 项目之前构建。您可以在解决方案设置中设置项目依赖项。
现在我们确保了 dll 始终是最新的,我们必须以某种方式将它与 C# 可执行文件放在同一个目录中。我们有两个选择:
- 将 dll 复制到 C# 项目的输出目录的构建后命令,或
- 我们将两个项目的输出目录设置为同一目录。
构建后事件
我们可以简单地使用复制命令。转到C++ 项目设置 > 构建事件 > 构建后事件并将以下命令复制到命令行字段:
xcopy /y "$(OutDir)*.dll" "$(SolutionDir)MY_CSHARP_PROJECT_NAME\bin\$(Platform)\$(Configuration)"
替换MY_CSHARP_PROJECT_NAME
为您的 C# 项目的名称。我在这里使用默认路径,根据您的解决方案,您可能需要稍微调整路径。
共享构建目录
我不会推荐这个,因为你可能会遇到麻烦。
- 转到C# 项目的项目设置中的Build选项卡。
- 在页面顶部选择调试作为配置。
- 在页面底部更改输出路径以匹配调试版本的 C++ 输出目录(此目录通常与解决方案文件位于同一文件夹中)。
- 重复 2 和 3,但这次使用Release而不是Debug。
推荐阅读
- android-studio - 打开特定的 Kotlin 文件后,Android Studio 速度变慢
- python - Tkinter 拖放标签信息到数据库
- laravel - Laravel 的视频库
- laravel - 迁移创建期间的 Laravel 8 问题
- c++ - C++:使用 Blackmagic DeckLink SDK 读取访问冲突(this-> x was nullptr)
- google-bigquery - 在给定日期范围(日历)内具有开始日期和结束日期的活跃工单的每日计数
- angular - 我如何访问角度服务的数据?
- node.js - 向电报机器人 inline_keyboard 添加回调以计算按钮点击次数
- graphql - graphql - 使用 apollo 客户端挂钩停止挂起的请求
- xamarin.ios - Xamarin.iOS 上的 SFSpeechRecognitionRequest 需要 OnDeviceRecognition。是可用的么?