我的C ++类有一个方法叫init
:
int init(int argc, char **argv)
另外,我有一个回调:
void callback(int num, char **str)
我的问题是,痛饮产生一个奇怪的类SWIGTYPE_p_p_char.cs
,没有string[]
如我所料。 请指教。
我的C ++类有一个方法叫init
:
int init(int argc, char **argv)
另外,我有一个回调:
void callback(int num, char **str)
我的问题是,痛饮产生一个奇怪的类SWIGTYPE_p_p_char.cs
,没有string[]
如我所料。 请指教。
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
。