3
我的C++類有方法的init如何使用swig和C#處理字符串數組?
int init(int argc, char **argv)
另外我有一個回調,
void callback(int num, char **str)
我的問題,即生成痛飲奇怪類SWIGTYPE_p_p_char.cs,並沒有字符串[]作爲它的預期。 請,建議。
我的C++類有方法的init如何使用swig和C#處理字符串數組?
int init(int argc, char **argv)
另外我有一個回調,
void callback(int num, char **str)
我的問題,即生成痛飲奇怪類SWIGTYPE_p_p_char.cs,並沒有字符串[]作爲它的預期。 請,建議。
SWIG有一些用於將數組傳遞給函數的類型映射,在arrays_csharp.i中。沒有一個不過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
秒的數組,但然後替換imtype所以我們可以給我們自己的編組信息。
我認爲這應該足夠了。如果你願意,你可以過載添加到生成的模塊:
%pragma(csharp) modulecode = %{
public static int foo(string[] argv) {
return foo(argv.Length, argv);
}
%}
注:本仔細測試 - 我從來沒有在我的生活寫了一個C#程序(但還寫了很多痛飲+ JNI的)。我找到了marshaling information on the MSDN forums,但是除了檢查SWIG的輸出看起來是否健全之外,還沒有測試過這些。這似乎匹配this answer,並增加了SizeParamIndex
。