Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

NoWrap questions

Abierto
#37 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
cpp, csharp
Área
tooling

Línea de trabajo

Start by reproducing the two NoWrap examples in the issue: the opaque-pointer typedef and the function-pointer typedef, then inspect the corresponding code-generation path. Separately trace how generated function, type, and constant names are chosen. Done means the intended NoWrap behavior and prefix-removal options are agreed and covered by focused generation tests.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

question

First off thanks for this incredible library it's mostly easy to use and works well. I do have some questions though regarding the NoWrap option.

  1. When using nowrap for an opaque ptr typedef it still wraps for example:
    typedef struct Test Test;
    Will result in
[global::System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public readonly partial struct Test : IEquatable<native.Test >
{
    public Test(nint handle) => Handle = handle;
    
    public nint Handle { get; }
    
    public bool Equals(Test other) => Handle.Equals(other.Handle);
    
    public override bool Equals(object obj) => obj is Test other && Equals(other);
    
    public override int GetHashCode() => Handle.GetHashCode();
    
    public override string ToString() => "0x" + (nint.Size == 8 ? Handle.ToString("X16") : Handle.ToString("X8"));
    
    public static bool operator ==(Test left, Test right) => left.Equals(right);
    
    public static bool operator !=(Testleft, Testright) => !left.Equals(right);
}

Is it possible to just ignore the typedef if it is an opaque ptr and just use nint whenever it is used as a parameter or member?

  1. When using nowrap for an function pointer typedef. it does not generate a type at all, for example:
typedef void (*Testfun)(int arg1, const char* arg2);

gets ignored and functions using it as param get the following signature

public static partial delegate*unmanaged[Cdecl]<int, byte*, void> setTestCallback(delegate*unmanaged[Cdecl]<int, byte*, void> callback);

Would it be possible to just not wrap it and add the delegate to the main class directly like so:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void Testfun(int arg1, const char* arg2);

And lastly maybe a bit unrelated question but what would be the easiest way to change the names of functions, types and constants?Within a c library they often prefix a library name as a sort of namespace, In c# this would be unnecessary as you already have both the namespace and the class. Is there a built-in way to remove such a suffix? for example testInit() to just Init() where test is the prefix?

Lenguaje dominante
C#
Estrellas
142
Forks
16
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de xoofx/CppAst.CodeGen

Todos los issues de xoofx/CppAst.CodeGen

Issues similares

Más issues de C#

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.