gpt4 book ai didi

c# - 将代码添加到 SWIG 中自动生成的类

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:37 24 4
gpt4 key购买 nike

我正在尝试找到一种方法来将代码添加到 swig 生成的函数中。我已经使用类型映射来扩展类,但在文档中找不到任何关于扩展特定功能的内容。

给定以下 swig 接口(interface)文件:

%module Test
%{
#include "example.h"
%}

%typemap(cscode) Example %{
bool 64bit = SizeOf(typeof(System.IntPtr)) == 8;
static string Path = 64bit ? "/...Path to 64 bit dll.../" :
"/...Path to 32 bit dll.../";
%}

%include "example.h"

我得到以下 C# 代码:

public class MyClass : global::System.IDisposable {
...
bool 64bit = SizeOf(typeof(System.IntPtr)) == 8;
static string Path = 64bit ? "/...Path to 64 bit dll.../" :
"/...Path to 32 bit dll.../";

...
public static SomeObject Process(...) { // Function defined in example.h
<- I would like to add some code here.
SomeObject ret = new SomeObject(...);

}
...
}

我想向函数 Process 添加一些代码,这段代码是对 SetDllDirectory(Path) 的调用,它根据平台类型加载正确的 dll。这需要在 Process() 调用中发生。

非常感谢任何帮助!

最佳答案

您可以使用 %typemap(csout) 生成您正在寻找的代码。不过这有点麻烦,您需要复制一些现有的 SWIGTYPE 类型映射(这是一个通用占位符),可以在 csharp.swg 中找到

例如,给定一个头文件 example.h:

struct SomeObject {};

struct MyClass {
static SomeObject test();
};

然后您可以编写以下 SWIG 接口(interface)文件:

%module Test
%{
#include "example.h"
%}

%typemap(csout,excode=SWIGEXCODE) SomeObject {
// Some extra stuff here
$&csclassname ret = new $&csclassname($imcall, true);$excode
return ret;
}

%include "example.h"

产生:

public static SomeObject test() {
// Some extra stuff here
SomeObject ret = new SomeObject(TestPINVOKE.MyClass_test(), true);
return ret;
}

如果您想为所有返回类型生成它,而不仅仅是返回 SomeObject 的东西,您将需要为 csout 的所有变体做更多的工作。

关于c# - 将代码添加到 SWIG 中自动生成的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26976768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com