【问题标题】:Pass C++ jintArray to C# function将 C++ jintArray 传递给 C# 函数
【发布时间】:2014-04-06 19:54:35
【问题描述】:

我有 C# dll,它有一个函数

public static Int32[] remDup(Int32[] dArray){
   return dArray.Distinct().toArray();
}

我有这个的jni函数

JNIEXPORT remDup..... ( jintArray dupArray){
    // from java call i get dupArray
    CsharpDLL::CSharpClass::remDup(/*pass an int32 array */)
}

我有 java 函数,它使用 jni 调用下面的函数

  remDup (Int[] array)

我使用 C++ 包装器从 Java 调用 C# DLL...我已经花了半天的时间来找出将 jIntArray 传递给 C# dll 函数...但没有成功.. 尽我所能完成研发..

不同的技术

array<System::Int32^)^ array, Marshal techniques,但仍然无法将数组从 C++ (JintArray) 传递到 C# DLL .. 请帮助或指导

【问题讨论】:

  • @Bogdan thnx 老兄!但是它在 ERROR 之后给出 "cli::array<int,1>^" 类型的值不能用于初始化 "cli::array<System::Int32^,1>^ " 类型的实体
  • 对不起,不熟悉 jintArray,但最坏情况的解决方案是创建一个与 jintArray 大小相同的新 cli::array,然后使用 for 将所有元素设置为新数组并将其传递给 c# 函数 ...
  • @Bogdan thanx 老兄,你的链接对我很有帮助......如果你能正确回答上述评论作为答案..我可以将其标记为答案:)
  • 作为答案添加,我不追分,但有些人可能会在谷歌上搜索该问题,这对他们很有用;)

标签: c# java c++ arrays java-native-interface


【解决方案1】:

一种解决方案是创建一个与 jintArray 大小相同的新 cli::array,然后使用 for 将所有元素设置为新数组并将其传递给 c# 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2014-06-28
    相关资源
    最近更新 更多