AaronRobinsonMSFT / DNNE

Prototype native exports for a .NET Assembly.
MIT License
404 stars 41 forks source link

Can we return a struct for "UnmanagedCallersOnly" method? #180

Closed v2brijenpatel closed 11 months ago

v2brijenpatel commented 1 year ago

Trying to return something like this.

[StructLayout(LayoutKind.Sequential)]
public struct MyStruct
{
    public int a;
    public char* b;
    public char* c;
    public char* d;
}

[UnmanagedCallersOnly]
//[DNNE.C99DeclCode("struct T1{int a; char* b; char* c; char* d;};")]
public unsafe MyStruct ReturnCalcValue([DNNE.C99Type("struct T1")] MyStruct myStruct)
{
    // Perform some operation on myStruct,
    return myStruct;
}

Here is the error while publishing:

/project/DNNE/test/ExportingAssembly/obj/Release/net7.0/linux-x64/dnne/ExportingAssembly.g.c(1327,67): error GA1C44C76: expected expression [/home/bpatel/project/DNNE/test/ExportingAssembly/ExportingAssembly.csproj]
          ReturnMQMDHeader_ptr = (/* SUPPLY TYPE /(DNNE_CALLTYPE)(struct M d))get_fast_callable_managed_function(t5_name, methodName);
AaronRobinsonMSFT commented 1 year ago

@v2brijenpatel Can you share what the C signature is?

A first order attempt, without knowing the C signature, is:

[UnmanagedCallersOnly]
[DNNE.C99DeclCode("struct T1{int a; char* b; char* c; char* d;};")]
[return: DNNE.C99Type("struct T1")]
public unsafe MyStruct ReturnCalcValue([DNNE.C99Type("struct T1")] MyStruct myStruct)
AaronRobinsonMSFT commented 11 months ago

@v2brijenpatel Please let me know if you are still hitting issues. I'm going to close this for now.