SWIG如何在cpp包装文件中生成的每个方法的顶部和底部注入代码?

问题描述 投票:0回答:0

我想在 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 语句需要在互斥锁调用之外。

swig swig-typemap
© www.soinside.com 2019 - 2024. All rights reserved.