在 C# 库和 C++ (CLR) 之间传递对象
Posted
技术标签:
【中文标题】在 C# 库和 C++ (CLR) 之间传递对象【英文标题】:Passing objects between C# library and C++ (CLR) 【发布时间】:2014-02-12 05:05:16 【问题描述】:如何将对象从 C# 库传递到 C++。
我可以调用返回void
或int
的函数,没有任何问题。
现在考虑 C# 中的以下函数,
List<CSharpClass> CSharpFunction(string Input)
我的 C# 类包含的位置,
public class CSharpClass
string mystring = string.Empty;
byte[] bytearray = null;
public byte[] bytearray
get return bytearray ;
set bytearray = value;
public string mystring
get return mystring ;
set mystring = value;
现在,我想在我的 C++ 中使用这个列表。所以我创造了,
typedef std::vector<class CSharpClass> MyDetailList;
这是正确的方法吗?如果不是我需要在 C++ 中使用什么?
【问题讨论】:
【参考方案1】:如果你想从 C++ 代码调用 C# dll,你可以关注this article。 简而言之,您将不得不: - 编写一个包含您的 CSharpClass 的托管 DLL - 注册托管 DLL 以用于 COM 或本机 C++ - 从本机 C++ 代码调用托管 DLL
This SO question 也是相关的,如果您想避免使用 COM,它包含替代解决方案
最初的错误答案:
您可以查看this article 以获得相当不错的教程。 简而言之,您将不得不: - 从您的 c++ 代码编译 dll - 在 C# 和 C++ 之间编组(“翻译”)您的课程 - 通过使用 DllImport 声明从 C# 加载 dll - 调用导入的方法
【讨论】:
我有 C# dll,想获取 C++ 项目中的 byte[]。正如我所提到的,我可以调用一个返回 void 或 int 的函数,而不会出现任何问题。 哦,我的错,我误读了这个问题。将相应地编辑答案 感谢更新的答案,但我找不到任何答案来获取 C++ 项目中的 byte[] :(以上是关于在 C# 库和 C++ (CLR) 之间传递对象的主要内容,如果未能解决你的问题,请参考以下文章