gpt4 book ai didi

c# - 如何正确处理 C# - C++ 项目交互?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:19 25 4
gpt4 key购买 nike

我真的需要更深入地了解如何正确设置,以便在我的 C++ 和 C# 代码库之间实现优雅的交互。我想要实现的是一个用 C# 为我的游戏引擎 (C++/DX) 编写的游戏内编辑器。为此,我让 VS 将我的引擎构建为带有一些附加功能(非托管代码)的 C++ dll,以便从 C# 编辑器代码库访问我的引擎所需的功能。到目前为止一切顺利。

困扰我的第一件事是我必须构建支持 CLR 的 dll。否则 C# 出于某种原因不接受 dll。它甚至不允许我将它添加到资源中(“无法添加对‘C:\Users...\frame_work\Test\frame_workd.dll’的引用。请确保该文件可访问,并且它是一个有效的程序集或 COM 组件。”)。

当我构建具有 CLR 支持的 dll 并将其添加到 C# 中的引用时,在没有 CLR 支持的情况下重新构建,启动我的编辑器并从 dll 进行函数调用,然后我得到一个异常 HRESULT:0x8007007E。我搜索了它,但我发现的唯一一件事与依赖关系有关,但这与我在将 dll 添加到资源时收到的警报不符。

另一点是我总是必须在应用程序 (.exe) 和 dll 之间切换配置类型。在 VS C++ 中,具体取决于我是想直接运行我的引擎还是从编辑器运行我的引擎,并且每次完整的项目都是全新构建的。

那么,有人可以向我解释如何以正确的方式组织这个吗? C# 希望在 CLR 支持下编译 dll 的可能原因是什么?

谢谢你们。

最佳答案

有两种方法可以解决这个问题。

要么让您的 C++ 代码提供一个具有完全兼容的 COM 对象的 API。如果对象是 COM,那么 C# 可以直接与它互操作。 (这就是为什么你不能直接将其添加为引用的原因)

但是我认为您真正想要做的将涉及 P/Invoke(从 C# 调用 C/C++ native 代码)。这是完全可能的,但并不总是那么容易。您需要处理 C++ API 和 C# 指针之间的转换,并且需要非常小心地将 C++ 代码写入的任何引用固定到 C# 应用程序中。

关于c# - 如何正确处理 C# - C++ 项目交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8101261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com