2012-09-20 95 views
3

我的C++類有方法的init如何使用swig和C#處理字符串數組?

int init(int argc, char **argv) 

另外我有一個回調,

void callback(int num, char **str) 

我的問題,即生成痛飲奇怪類SWIGTYPE_p_p_char.cs,並沒有字符串[]作爲它的預期。 請,建議。

回答

2

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

相關問題