c# - 修改所有实例方法的 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)
如果可能的话,当然。
解决方案
推荐阅读
- javascript - React - 如何使用 handleInputChange 函数来更改状态值内的状态值?
- javascript - html嵌套折叠没有引导,jquery
- java - 在 Spring Boot 中处理异常的方法。抛出异常捕获并抛出相同的异常,这是一种不好的做法吗?
- c# - 重复使用 AutoResetEvent
- android - 我无法在 IOS 上保存图像,但在 Android (Flutter) 上运行良好
- node.js - Express:从 React 前端发送 POST 请求以空正文发送,但从 Postman 发送正确发送正文
- python - Python - 在绘图中使用高度和标签变量的问题
- bi-publisher - BI Publisher:将所有列添加到表格报告
- excel - 如果 C 列中的值等于或超过金额,则突出显示 A 列中的名称
- json - 使用正则表达式清理 JSON 字符串