我想在 cpp 包装文件中向 SWIG 生成的包装器添加代码。例如添加全局互斥锁以防止 C# 垃圾收集器更改某些共享变量。
SWIGEXPORT int SWIGSTDCALL CSharp_swig_generated_method___(void *jarg1) {
int jresult; //SWIG generated
// inject code here like mutex begin
/*
SWIG generated code
*/
jresult = result;
// inject code here like mutex end
return jresult;
}
我试过 %exception 指令
%exception %{
MUTEX_BEGIN
$action
MUTEX_END
%}
但这只是将实际的方法调用放在互斥语句之间。我还想在互斥语句之间放置额外的 SWIG 生成代码,例如创建结果变量、分配 jresult 等。只有 jresult 的声明和 return 语句需要在互斥锁调用之外。