如何处理与痛饮和C#字符串数组?(How do I process string arrays wi

2019-09-22 16:13发布

我的C ++类有一个方法叫init

int init(int argc, char **argv)

另外,我有一个回调:

void callback(int num, char **str)

我的问题是,痛饮产生一个奇怪的类SWIGTYPE_p_p_char.cs ,没有string[]如我所料。 请指教。

Answer 1:

SWIG具有使阵列功能,arrays_csharp.i一些typemaps。 没有一个char *INPUT[]然而,但我们可以调整typemaps做你想要什么:

%module test

%include <arrays_csharp.i>

CSHARP_ARRAYS(char *, string)
%typemap(imtype, inattributes="[In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0, ArraySubType=UnmanagedType.LPStr)]") char *INPUT[] "string[]"

%apply char *INPUT[]  { char **argv }

int foo(int argc, char **argv);

它使用SWIG宏CSHARP_ARRAYS产生的typedef的数组string S,但然后替换imtype所以我们可以给自己的封送处理信息。

我认为应该是足够的。 如果你愿意,你可以过载添加到生成的模块:

%pragma(csharp) modulecode = %{
  public static int foo(string[] argv) {
    return foo(argv.Length, argv);
  }
%}

注:测试此小心 - 我从来没有在我的生活写了一个C#程序(但还写了很多痛饮+ JNI的)。 我发现在MSDN论坛上编组的信息 ,但没有测试任何这超出了检查,从SWIG输出看起来神志清醒。 这似乎符合这个答案 ,增加的SizeParamIndex



文章来源: How do I process string arrays with swig and C#?
标签: c# swig