gpt4 book ai didi

c# - Swig:如何将生成的 C# 类的可访问性从 `public class` 更改为 `internal class`

转载 作者:行者123 更新时间:2023-12-05 05:50:40 34 4
gpt4 key购买 nike

我正在使用 swig 4.0.x 包装一个 C++ 文件。

一切正常,只是我想将生成的 C# 类的可访问性从 public class 更改为 internal class

到目前为止,我尝试过的是:在 swig 接口(interface)文件中

%module example

%{
#include "include/exampleapi.h"
%}

%typemap(csclassmodifiers) SWIGTYPE "internal class"
%pragma(csharp) moduleclassmodifiers="internal class"

%include <windows.i>
%include "include/exampleapi.h"

上面的代码似乎适用于模块类(example)和一些其他文件。但它并没有改变所有生成类的可访问性修饰符。

特别是名称以 public class SWIGTYPE_xxx 开头的类(可能称为代理类?这些类包含内部成员 并具有私有(private)类型为 private global::System.Runtime.InteropServices.HandleRef) 的成员。

如何让它们成为内部类

最佳答案

好的,所以我在 swig github 存储库上问了这个问题后就明白了。以下回答由 William Fulton 提供:

SWIGTYPE_xxx 类被称为 Type Wrapper Classes .

您需要将 C 类型用于导致生成类型包装器类的类型映射。例如 SWIGTYPE_p_int 正在包装一个 int *。因此你会使用:

%typemap(csclassmodifiers) int * "内部类"

所有生成的代理和类型包装器类的默认值都来自 csharp.swg:

%typemap(csclassmodifiers) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) "公共(public)类"

因此,只需覆盖这些类型映射以提供您的自定义代码并阅读文档中有关类型映射的章节。

关于c# - Swig:如何将生成的 C# 类的可访问性从 `public class` 更改为 `internal class`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70492586/

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