首页 > 解决方案 > 修改所有实例方法的 C# SWIG 包装器方法体

问题描述

我想在调用本机方法之前添加一些检查(即检查 swigCPtr 是否为空)。我能得到的最接近的是修改类型映射“csout”以在调用之前包含一个检查,如下所示:

%define DISPOSED_CHECK

  if (swigCPtr.Handle == global::System.IntPtr.Zero) {
      // Do something
  }
%enddef

%typemap(csout, excode=SWIGEXCODE) bool,               const bool &               {
    DISPOSED_CHECK
    bool ret = $imcall;$excode
    return ret;
  }
// the rest of typemaps follow the pattern

问题是,静态方法和实例方法使用相同的类型映射,所以静态方法现在被破坏了。SWIG 有没有办法只修改非静态的方法?即仅将类型映射应用于实例方法,或者以仅适用于非静态方法的任何其他方式将代码插入 C# 包装器方法主体?

我看到可以按名称列出所有非静态方法,但这正是我想在这里避免的。完美的解决方案是这样的

%typemap(csout, excode=SWIGEXCODE, static=false)

如果可能的话,当然。

标签: c#swig

解决方案


推荐阅读