std::vector 从本机库到 C++/CLI
std::vector from native library to C++/CLI
现在我需要为本机 C++ 库中的相同代码创建一个 C++ -> C++/CLI -> C# 包装器。
这个库有类似的方法
std::vector<float>& Foo(std::vector<float>& vec, std::vector<std::vector<float>>& matrix)
我有 2 个问题。
1) 如何在 C++/CLI 中从本机库加载函数?
2) 如何将 std::vector<float>& / std::vector<std::vector<float>>&
传递给函数并返回 std::vector<float>&
?
我知道如何为我需要作为输入数据传递给函数的 IEnumerable 数据创建包装器,我只需要解决这 2 个问题。(((
谢谢。
要加载您的 C++ 本机库,无论您通常从 C++ 执行什么,都可以从 C++/CLI 执行。不管是静态库还是DLL,过程都是一样的。
对于您的 parameters/return 类型,您将希望 C++/CLI 公开具有良好和普通 .Net 类型的方法。您需要将数据复制到本机 C++ 库想要使用的任何位置。
对于参数,您需要使用在 .Net 中有意义的任何集合对象(可能是 IEnumerable<float>^
、IList<float>^
或 array<float,2>^
),并将数据复制到a std::vector
手动(使用简单的 for 循环,不要试图变得花哨)。对于 return 值,在相反的方向做同样的事情:创建一个新的 List<float>^
,从向量中复制数据,然后 return 新列表。
现在我需要为本机 C++ 库中的相同代码创建一个 C++ -> C++/CLI -> C# 包装器。
这个库有类似的方法
std::vector<float>& Foo(std::vector<float>& vec, std::vector<std::vector<float>>& matrix)
我有 2 个问题。
1) 如何在 C++/CLI 中从本机库加载函数?
2) 如何将 std::vector<float>& / std::vector<std::vector<float>>&
传递给函数并返回 std::vector<float>&
?
我知道如何为我需要作为输入数据传递给函数的 IEnumerable 数据创建包装器,我只需要解决这 2 个问题。(((
谢谢。
要加载您的 C++ 本机库,无论您通常从 C++ 执行什么,都可以从 C++/CLI 执行。不管是静态库还是DLL,过程都是一样的。
对于您的 parameters/return 类型,您将希望 C++/CLI 公开具有良好和普通 .Net 类型的方法。您需要将数据复制到本机 C++ 库想要使用的任何位置。
对于参数,您需要使用在 .Net 中有意义的任何集合对象(可能是 IEnumerable<float>^
、IList<float>^
或 array<float,2>^
),并将数据复制到a std::vector
手动(使用简单的 for 循环,不要试图变得花哨)。对于 return 值,在相反的方向做同样的事情:创建一个新的 List<float>^
,从向量中复制数据,然后 return 新列表。