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