Swig typemap内部构造函数受保护

时间:2016-07-06 21:57:02

标签: c# c++ swig

我的C#代码使用第三方库,用C ++编写并使用Swig将其包装在C#中(三个项目,MyCodeCS,ThirdCpp和ThirdCs

因此,如果我在cpp中使用公共构造函数Acpp()Acpp(int)的类Acpp,我最终会使用类Acs,正确定义的构造函数Acs()和{{1 (到目前为止,这么好),它们都使用内部swig生成的构造函数:Acs(int)

(当然,cpp和cs类都命名为A,但为了清楚起见,我将使用cpp和cs后缀命名它们)

现在,我正在集成一个新的cpp模块(MyCodeCpp),它包含一个继承自Acpp的类Bcpp。到目前为止,非常好:Bcpp继承自Acpp,我可以使用其Acs(IntPtr cPtr,bool)从我的C#代码中调用它而没有任何问题。

我的问题是为了让我的Bcs对象被识别为Acs,我需要定义这样的Bcs类。这是一个非常愚蠢的,因为我已经有了cptr:

IntPtr

事情是...... public class Bcs : Acs { public Bcs(IntPtr cptr): base(cptr,true){} } 是内部的,这意味着如果我想这样做,我需要:

  • 将Bcs添加到thirdCS项目中并重建thirdCS,这就是我现在所做的并且工作正常但令我的首席架构师不满意因为现在我们有一个应该属于MyCodeCS的类,因为它是MyCodeCpp类的包装器,实际上属于thirdCs
  • 以某种方式修改swig行为,以便Acs(IntPtr,bool)受内部保护而不是内部保护,因此可以通过基于MyCodeCS的Bcs类调用

问题是:我不知道如何做到这一点,即使有可能?

非常感谢

1 个答案:

答案 0 :(得分:1)

解决了它。 只需要把

SWIG_CSBODY_PROXY(public, public, SWIGTYPE)
SWIG_CSBODY_TYPEWRAPPER(public, public, public, SWIGTYPE)

在我的.i文件中